docker部署比jar强多少
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker部署比jar强多少相关的知识,希望对你有一定的参考价值。
参考技术A 如果SpringBoot的jar包项目采用传统的方式去打包部署到服务器上,会非常的繁琐和麻烦。每次项目修改后重新部署,都需要先将项目进行打包,然后将jar包发送到服务器,指定位置,然后在运行java -jar的命令,如果每次都进行人工打包部署,效率会非常的低。所以我们可以采用jenkins+docker的方式实现自动化部署。docker部署可执行jar包
小小总结
一、思路
1、将docker容器中的指定文件夹挂载到宿主机上,更新jar包只需上传到宿主机指定路径,方便更新
2、利用bash文件运行jar包,并构建该bash的镜像,代替构建直接运行jar包的镜像,利于镜像与jar包解耦。
例如,app-1.0.0.jar 升级到 app-2.0.0.jar,只须更改bash文件的内容,而无须构建新的镜像。
二、准备工作
1、创建存放docker配置文件、jar包的文件夹
在宿主机上,创建文件夹:/home/admin/app,用于存放bash文件和jar包。然后在该文件夹下,创建bash文件和容器配置文件
2、创建bash文件
vi run.sh
java -jar /usr/data/app-1.0.0.jar
/usr/data是docker容器内的路径
我们不必真的到容器内创建这个路径
后面会将此路径挂载到当前文件夹:/home/admin/app
3、创建容器配置文件
vi Dockerfile
FROM java:8
EXPOSE 8081
ENTRYPOINT ["sh","/usr/data/run.sh"]
8081是我们这个jar包的对外端口
最后一句,有网上教程写的是 CMD [“sh”,"-c","/usr/data/hello.sh"],但不知道为什么,我这样写的话,容器运行后会提示没有权限!
二、构建镜像
仍然在/home/admin/app下,构建镜像。注意最后一个“.”,表示 Dockerfile 文件在当前目录下。
docker build -t myapp:1.0.0 .
三、创建容器并运行
docker run -d -it --name=myapp -p 8081:8081 -v /home/admin/app:/usr/data myapp:1.0.0
docker run --restart=always -d -it --name=myapp -p 8082:8081 -v /home/admin/app:/usr/data myapp:1.0.0
-v,将容器内的/usr/data挂载到宿主机的/home/admin/app。以后jar包有更新,丢到宿主机的/home/admin/app,然后重启容器即可。
-d: 后台运行容器,并返回容器ID;
-d, --detach=false Run container in background and print container ID
-i: 以交互模式运行容器,通常与 -t 同时使用;
-i, --interactive=false Keep STDIN open even if not attached
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-t, --tty=false Allocate a pseudo-TTY
四、删除多余或失败的容器、镜像
以上步骤,可能存在波折,不小心就创建了许多并不称心如意的容器和镜像,占用了心水名称和端口,必先删之而后快。
1、观察已经有哪些容器
docker ps -a
加上 -a 参数,可以列出没有在运行的容器。
2、删除指定容器
docker rm $name 或者 容器ID
3、观察已经有哪些镜像
docker images
4、删除指定镜像
docker rmi -f $name 或者 镜像ID
要删除镜像,首先要删除它派生的容器。
五、docker世界中的一些术语
我现在是这么理解的:
docker是一个程序,它不是容器,而是容器引擎。
我们的程序要用docker来跑,首先要创建一个开启我们程序的镜像。
docker利用这个镜像,开启并运行容器。
容器是镜像的实例,同一个镜像可以派生出多个实例。
六、补充
如上所述,我的思路是将容器内的文件夹挂载到宿主机的文件夹上,方便以后更新维护。如果没有这层考虑,其实也可以将jar包直接塞到容器里运行,不过一旦jar包有更新,需要重新构建镜像和容器。
直接塞到容器里运行的方法是Dockerfile内容稍有点不同:
FROM java:8
MAINTAINER chenqu
ADD demo-0.0.1-SNAPSHOT.jar demo.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo.jar"]
以上是关于docker部署比jar强多少的主要内容,如果未能解决你的问题,请参考以下文章