使用Docker部署Spring boot项目

php论坛  2020-02-11 17:06:41  来源:1  阅读:210

使用Docker部署Spring boot项目


 


一、前提条件


1.有一个Spring boot项目




 


编译打包(mvn package)后在工程target目录下生成文件springBootDocker.jar


 


项目源码:


 


 


maven打包的jar包:


 


 


2. 一台装有Docker的Linux主机和一台Docker Registry(Harbor)


(安装步骤略)


 


二、用Docker打包镜像并发布


1. 编写Dockerfile文件,创建文件名为Dockerfile的文本文件,内容如下:


 


FROM java:8


VOLUME /tmp


COPY springBootDocker.jar app.jar


RUN bash -c "touch /app.jar"


EXPOSE 8080


ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=test", "--server.port=8080", "> /log/app.log"]


 


解释:


java:8是指Docker Hub上官方提供的java镜像,版本号是8也就是jdk1.8,有了这个基础镜像后,Dockerfile可以通过FROM指令直接获取它的状态——也就是在容器中java是已经安装的,接下来通过自定义的命令来运行Spring Boot应用:


VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp。


将项目的jar文件作为app.jar添加到容器


RUN表示在新创建的镜像中执行一些命令,然后把执行的结果提交到当前镜像。这里使用touch命令来改变文件的修改时间,Docker创建的所有容器文件默认状态都是“未修改”。这对于简单应用来说不需要,不过对于一些静态内容(比如:index.html)的文件就需要一个“修改时间”。


EXPOSE 容器暴露端口


ENTRYPOINT 应用启动命令 参数设定


 


2. 上传文件Dockerfile和springBootDocker.jar到服务器的同一目录下


[root@localhost img_springboot]# ll


总用量 15864


-rw-r--r--. 1 root root 210 10月 22 15:06 Dockerfile


-rw-r--r--. 1 root root 16237220 10月 22 15:05 springBootDocker.jar


 


3. 将jar打包为镜像(docker build -t boot-docker .)


[root@localhost img_springboot]# docker build -t spring-boot-docker .


Sending build context to Docker daemon 16.24MB


Step 1/6 : FROM java:8


---> d23bdf5b1b1b


Step 2/6 : VOLUME /tmp


---> Using cache


---> a6f308f55c0c


Step 3/6 : COPY springBootDocker.jar app.jar


---> 155a71904ce8


Step 4/6 : RUN bash -c "touch /app.jar"


---> Running in 03131cf1eda9


Removing intermediate container 03131cf1eda9


---> 00d91e7e9aff


Step 5/6 : EXPOSE 8080


---> Running in 390fbf54f1d4


Removing intermediate container 390fbf54f1d4


---> ae18996023c4


Step 6/6 : ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=test", "--server.port=8080", "> /log/app.log"]


---> Running in daed8e8d2177


Removing intermediate container daed8e8d2177


---> 1d978ac3b4d4


Successfully built 1d978ac3b4d4


Successfully tagged boot-docker:latest


 


打包之后可以使用docker images命令查看镜像


[root@localhost img_springboot]# docker images


REPOSITORY TAG IMAGE ID CREATED SIZE


spring-boot-docker latest 1d978ac3b4d4 15 minutes ago 676MB


172.16.50.37/repo-test hw20181019 4ab4c602aa5e 6 weeks ago 1.84kB


 


4. 运行镜像


[root@localhost img_springboot]# docker run --name spring-boot-docker -d -v /opt/jar/springBootDocker/logs:/log -p 8080:8080 spring-boot-docker


51c70bbb2134e053324de405b92060a9c1c123bbc4c6eb94eb849a8dae7ca9c5


 


运行后,可以访问到spring boot 项目(http://{运行镜像的主机IP}:8080)




解释说明:


run: 容器启动命令


--name boot-docker 自定义容器命名


-d 程序后台启动


-v /opt/jar/boot-docker/logs:/log 应用日志 数据卷的方式存储


-p 8000:8000 用主机8000端口映射容器端口


boot-docker 镜像名称


 


5. 推送到私有仓库


5.1 打tag


[root@localhost img_springboot]# docker tag spring-boot-docker 172.16.50.37/repo-test/spring-boot-docker:1600


 


5.2 推送到私服


[root@localhost img_springboot]# docker push 172.16.50.37/repo-test/spring-boot-docker


The push refers to repository [172.16.50.37/repo-test/spring-boot-docker]


21353a604843: Pushed


53582412fb9f: Pushed


35c20f26d188: Pushed


c3fe59dd9556: Pushed


6ed1a81ba5b6: Pushed


a3483ce177ce: Pushed


ce6c8756685b: Pushed


30339f20ced0: Pushed


0eb22bfb707d: Pushed


a2ae92ffcd29: Pushed


1600: digest: sha256:f79fbf45dccb0e6cbd9b78ee07035fcfbdf1d9311cad5e2067d8d9c59af063fe size: 2424


 


登录到Harbor的web界面可以看到:




6. 拉取镜像


[root@localhost img_springboot]# docker pull 172.16.50.37/repo-test/spring-boot-docker:1600


1600: Pulling from repo-test/spring-boot-docker


Digest: sha256:f79fbf45dccb0e6cbd9b78ee07035fcfbdf1d9311cad5e2067d8d9c59af063fe


Status: Image is up to date for 172.16.50.37/repo-test/spring-boot-docker:1600


 

————————————————

版权声明:本文为CSDN博主「funtaster」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/funtaster/article/details/83274727


docker 常用命令


docker rm `docker ps -a | grep Exited | awk '{print $1}'`   删除异常停止的docker容器


docker rmi -f  `docker images | grep '<none>' | awk '{print $3}'`  删除名称或标签为none的镜像


1.docker stop [name]  停止

 2.docker logs -f [name] 查看日志

 3.docker ps    查看运行进程

 4.docker images  查看镜像

 5.docker run -p [port]:[port] -t [name] 运行进程

 6.docker pull [address] 获取镜像

 7.docker login --username=[name] [address] 登录镜像仓库



分享到:

0条评论网友评论

  • 全部评论
加载更多

飞翔船舶

关于飞翔 | 联系我们 | 新手教程 | 隐私声明 | 经营优势 | 常见问题

Copyright © 2010 - 2012 Tencent. All Rights Reserved  工信部备案号:备案号:ICP备1100256