部署nginx+jdk8+springboot服务到docker 镜像的过程记录

由于docker虚拟化技术的发展让微服务的部署变得非常方便,但要将众多类型不同的服务部署到一个镜像容器中却是有一定需求的,因为一个容器一个服务的部署方式太过于占资源。本笔记主要从自身一个项目开始记录下整个过程及部署过程中遇到的问题解决思路,以备份。

1、环境:

      a、centos 7 并装了docker 11.1

      b、xshell 6 ,xftp 6 学校家庭版本(因为免费)

      c、一个采用vue.js 开发的纯静态站点(含有html,js,css,imges)需要采用nginx 部署

      d、一个spring boot 项目(jar 包)

      e、jdk 1.8 

2、制备基础镜像

     a、采用xshell链接centos 7 , 采用 docker images  命令来查看镜像服务器环境是否装了docker( 随便找个命令就可以测试docker 是否安装或启动)

     b、 采用 docker pull centos 7 即可拉取docker 镜像(至于docker 源的配置可以查看本人相关笔记)

docker.io/centos                                                latest              e934aafc2206        3 months ago        199 MB

     c、 采用 docker run -it --name mytestcentos01 -d -p 3003:3003 -v /home/soft : /home/soft  -p 3080:8080 -p 3030:80  e934aafc2206  /bin/bash 实例化镜像。(这里的端口号映射和-v 参数相关参考其他博客,本笔记不做解释),实例化完成后 采用 docker ps -a 可以查看该容器的状态

部署nginx+jdk8+springboot服务到docker 镜像的过程记录

          d、可以采用ctrl+p+q 退出当前容器回到主机,且不会stop容器,可以采用 docker attach + 容器ID 进入容器。采用 ctrl+c 可以退出容器(关闭进程,由于docker 是c++ 编写的)

部署nginx+jdk8+springboot服务到docker 镜像的过程记录

 3、JDK 1.8 安装(基本有三种方式:本笔记采用了外部下载,通过shell 共享,通过 -v 参数共享到镜像)

     a、通过cd /home/soft 进入容器挂载共享目录 ,并通过ls 查看内容

部署nginx+jdk8+springboot服务到docker 镜像的过程记录

    b、切换焦点到/usr/local,并mkdir jdk (mkdir /usr/local/jdk )

    c、mv /home/soft/jdk-8u171-linux-x64.tar.gz /usr/local/jdk (可以考虑在源soft目录调用 tar -zxvf  jdk-8u171-linux-x64.tar.gz 解压后 mv 或 cp),

     d、tar -zxvf  jdk-8u171-linux-x64.tar.gz 解压jdk  并 rm jdk-8u171-linux-x64.tar.gz

      部署nginx+jdk8+springboot服务到docker 镜像的过程记录

    e、通过" nano /etc/profile"打开配置项,末尾添加环境变量配置(如果没有nano,采用yum install nano 安装即可)

部署nginx+jdk8+springboot服务到docker 镜像的过程记录

环境变量内容:

JAVA_HOME=/usr/local/jdk/jdk1.8.0_171
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/dt.jar

export JAVA_HOME JRE_HOME PATH CLASSPATH

通过 ctrl+o -> ctrl+x 保存修改并退出

f、通过 source /etc/profile 命令启用配置生效,通过 java -version 查看版本

部署nginx+jdk8+springboot服务到docker 镜像的过程记录

4、nginx 部署 静态vue.js 前端服务(静态)

a、如果对nginx 版本没有特殊要求,采用 yum install nginx 安装即可

d、如果容器是centos ,那么会被默认安装到/etc/nginx/*下

部署nginx+jdk8+springboot服务到docker 镜像的过程记录

e、配置

1、通过 nano nginx.conf 打开文本

部署nginx+jdk8+springboot服务到docker 镜像的过程记录

通过  include /etc/nginx/conf.d/*.conf; 可以看到该版本nginx 的配置在 /etc/nginx/conf.d/ 下,也就是说只要是在这个目录下的 .conf 文件都会被读取

2、通过 cd /etc/nginx/conf.d/ 切换并 ls 查看

部署nginx+jdk8+springboot服务到docker 镜像的过程记录

3、我在项目中定义的conf 文件为PTS_ADMIN.conf

通过 nano PTS_ADMIN.conf 编辑

部署nginx+jdk8+springboot服务到docker 镜像的过程记录

1>、端口不能重复.

2>、这里是配置该nginx 待加载的静态资源的目录(建议把目录指定到该容器的挂载共享目录/home/soft/*,方便热更新资源.)

3>、代理服务的配置(rewrite ^/api/(.*)$ /dep/dispatch/$1 break; rewrite 的配置分为前后2部分,中间用空格分开,即:^/api/(.*)$ 为当前静态资源中请求

路径的拦截部分,例如: /api/a/ab/c/... 就会被拦截。后面的 /dep/dispatch/$1 为服务替换部分,上面替换后的地址:/api/dep/dispatch/a/ab/c/... 。更多nginx配置参考官方文档

    4> 保存配置 ,采用 nginx 启动 nginx

4、nginx 启动,重启

     nginx stop 命令有BUG,会导致部分配置被删除,导致无法启动,会报nginx.pid 丢失,如果已经出现这个问题可以采用重新装nginx(网上的解决方案不一定成功。)

5、nginx -s reload 重启nginx 是最为安全优雅的重新加载配置的方式,推荐.

6 、 nginx 部署中可以参考 https://www.cnblogs.com/bingo1024/p/9022890.html 博文

5、 spring boot  jar 服务配置与部署

    a、切换目录 cd /home/soft 后 ls

部署nginx+jdk8+springboot服务到docker 镜像的过程记录

   1>、nginx 静态资源目录

    2>、 待部署jar包

   b、通过  java -jar -Denv=DEV pbplatform-dep-dispatch-1.0-SNAPSHOT.jar & 命令实现服务的后台启动 ,通过 jobs 命令切换回主控制台

   c 、 通过 nohup java -jar -Denv=DEV pbplatform-dep-dispatch-1.0-SNAPSHOT.jar  > temp.txt & 将日志挂在到当前目录下,方便查看.

   d、 相关参考 https://blog.csdn.net/qq_30739519/article/details/51115075 博文.

6、完工

部署nginx+jdk8+springboot服务到docker 镜像的过程记录


7、鸣谢!该例子项目学习过程中参考的部分博文。,有部分列出了出处,部分忘记了。