`
郑云飞
  • 浏览: 794759 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

docker容器部署Spring Boot项目及更新

阅读更多

Docker这项容器技术已经是十分的火热了,读者要是不了解docker的话可以吧docker先理解为虚拟机。 
我们的Springboot最终是要部署在Linux上的,docker作为Linux轻量级的实现。docker也是可以用来部署Springboot应用的。 

1.创建Dockerfile 
创建一个文件名为Dockerfile的文件,复制以下内容到文件中

Java代码 
  1. FROM java:8  
  2. VOLUME /tmp  
  3. ADD config-server-0.0.1-SNAPSHOT.jar app.jar  
  4. RUN sh -c 'touch /app.jar'  
  5. ENV JAVA_OPTS=""  
  6. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]  

 其中config-server-0.0.1-SNAPSHOT.jar这个是我的springClould的一个配置中心微服务



 2.创建docker镜像 

将创建好的Dockerfile文件和jar包上传到服务器,放在同一文件夹下,进入jar包所在文件夹,执行命令

Java代码 
  1. docker build -t xstz_config_server .  

 xstz_config_server为生成的镜像名, .表示当前目录

 

Java代码 
  1. docker build -t xstz_config_server .  
  2. Sending build context to Docker daemon 26.84 MB  
  3. Step 1 : FROM java:8  
  4. Trying to pull repository docker.io/library/java ...  
  5. 8: Pulling from docker.io/library/java  
  6. 5040bd298390: Pull complet  
  7. fce5728aad85: Pull complete  
  8. 76610ec20bf5: Pull complete  
  9. 60170fec2151: Pull complete  
  10. e98f73de8f0d: Pull complete  
  11. 11f7af24ed9c: Pull complete  
  12. 49e2d6393f32: Pull complete  
  13. bb9cdec9c7f3: Pull complete  
  14. Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d  
  15.  ---> d23bdf5b1b1b  
  16. Step 2 : VOLUME /tmp  
  17.  ---> Running in 2c1948cd1181  
  18.  ---> 33092a5791af  
  19. Removing intermediate container 2c1948cd1181  
  20. Step 3 : ADD config-server-0.0.1-SNAPSHOT.jar app.jar  
  21.  ---> b2c41134d3f  
  22. Removing intermediate container 684002e93194  
  23. Step 4 : RUN sh -c 'touch /app.jar'  
  24.  ---> Running in 985f0fece3fd  
  25.  ---> b63eb40e4e50  
  26. Removing intermediate container 985f0fece3fd  
  27. Step 5 : ENV JAVA_OPTS ""  
  28.  --> Running in 327eb48ba1d6  
  29.  ---> d3c19e35c369  
  30. Removing intermediate container 327eb48ba1d6  
  31. Step 6 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar  
  32.  ---> Running in eb0d88164ae7  
  33.  ---> 1ed548a8d199  
  34. Removing intermediate container eb0d88164ae7  
  35. Successfully built 1ed548a8d199  

 

 

3.查看生成的镜像

 

Java代码 
  1. docker images  
  2. REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE  
  3. xstz_config_server   latest              1ed548a8d199        6 seconds ago       696.8 MB  
  4. docker.io/nginx      latest              8b89e48b5f15        5 days ago          109 MB  
  5. docker.io/registry   latest              b2b03e9146e1        2 weeks ago         33.29   

 

 

docker.io/java       8                   d23bdf5b1b1b        18 months ago       643.1 MB

4.创建容器并运行jar包

 

Java代码 
  1. [root@oracle xstz_springclould]# docker run -d -p 8091:8091 xstz_config_server  
  2. e67579cb6f5bc60a11ca1441ba1ae220c9fdf2d772d1ff3d22d713614673c75e  
  3. [root@oracle xstz_springclould]#  

 增加时区,并给容器起名字,防止docker容器时间和宿主机不一致

Java代码 
  1. docker run --name eureka -d -p 8761:8761 -e TZ="Asia/Shanghai" eureka:v1  

 

 

-d表示在后台运行

-p 指定端口号 第一个8080 为 容器内部的端口号 第二个8080位外界访问的端口号,将容器内的8080端口号映射到外部的8080端口号

5.然后就可以通过外网ip+端口号访问项目

6.测试一下,从spring clould config 客户端启动项目,从config-server端读取配置文件,看是否可以成功

启动我本地的Config客户端,发下可以成功启动,成功从服务端读取配置文件



 配置文件如下



 

 

 二、服务更新

 1.查看容器上存放的jar包路径

Dofile为例如下

Java代码 
  1. FROM java:8  
  2. VOLUME /tmp  
  3. ADD eureka_server-0.0.1-SNAPSHOT.jar eureka.jar  
  4. RUN sh -c 'touch /eureka.jar'  
  5. ENV JAVA_OPTS=""  
  6. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka.jar"]  

 查看命令

Java代码 
  1. find / -name eureka.jar  

 结果

Java代码 
  1. /var/lib/docker/overlay2/0ad9b91289cca6d0cc4961476ecadc4f96761af3c202c270ad60de7aee1ecf4f/diff/eureka.jar  
  2. /var/lib/docker/overlay2/3759b25ac40ef0c8df4e0f87ec245417fdb3efdcaf17569e5a866de6bf6882a0/diff/eureka.jar  
  3. /var/lib/docker/overlay2/959a2175dc14231ae29aa231626b6aae566063e9d3f577e299fc261d511908aa/merged/eureka.jar  

 

2. 把需要更新的新jar包替换上面查询出来的所有jar。

3. 重启docker容器。

实时查看docker容器名为eureka的最后10行日志

Java代码 
  1. docker logs -f -t --tail 10 eureka  

 优化更新

用了一段时间上面的更新方法,发现每次替换jar,都要替换3个地方,有点繁琐,而且前缀不固定,没法通过自动化脚本更新,于是又研究了另外一个智能的办法

dockerfile如下

Dockerfile代码 
  1. FROM java:8  
  2. VOLUME /tmp  
  3. ADD eureka_server-0.0.1-SNAPSHOT.jar eureka.jar  
  4. RUN sh -c 'touch /eureka.jar'  
  5. ENV JAVA_OPTS=""  
  6. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka.jar"]  

 构建命令

Java代码 
  1. docker build -t eureka:v1 .  

 

运行命令

Java代码 
  1. docker run --name=eureka -d -p 8761:8761 -v /home/docker/springclould/eureka/eureka_server-0.0.1-SNAPSHOT.jar:/eureka.jar  --privileged=true -e tZ="Asia/Shanghai" eureka:v
  2. 1  

 -p 映射端口8761 本机的端口 映射的容器的端口 

-v 挂载目录home/docker/springclould/eureka/eureka_server-0.0.1-SNAPSHOT.jar本地目录 /eureka_server-0.0.1-SNAPSHOT.jar容器目录,在创建前容器是没有software目录的,docker 容器会自己创建

--privileged=true 关闭安全权限,否则你容器操作文件夹没有权限

--容器名称

将容器中的jar映射到宿主机目录中,每次只需要替换宿主机中的jar包即可

然后停止服务

Java代码 
  1. docker stop eureka  

 再启动服务

Java代码 
  1. docker start eureka  

 即可更新服务

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics