前言:
关于 dokcer 的安装已经在上文介绍过,有兴趣的同学可以去了解下。
正文:
首先大概说一下 docker、镜像、容器的关系。镜像可以理解为是虚拟机,有很多种,比如服务器镜像、java镜像等等。容器可以理解为是基于镜像创建的一个独立的空间,我们的项目就是跑在容器里面的。而 docker 则是来操作镜像和容器的工具。镜像跟容器之间的关系为:一个镜像可以对应多个容器,容器必须依赖于镜像而存在,镜像为容器提供了相应环境。(均为个人理解,有不对的地方还请各位同学指正!)
准备:
保证服务器安装 docker,腾讯云 CentOS7.6 服务器
部署项目方法一:
1、拉取 java 镜像
docker search java #这是 docker 命令,意为在 docker hub 上查找关于 java 的镜像
docker pull java:8 #拉取 java:8 镜像,也就是我们运行 springboot 项目所需的环境(因为
springboot 项目内置了 tomcat,所以不需要 tomcat 镜像)
docker images #查看镜像列表
注:docker rmi 镜像ID或镜像名 #删除镜像(有些镜像通过镜像名删除不了,所以得用镜像ID来删除)
2、将项目打包,然后通过 xftp 工具将 jar 包传到服务器(可以是默认目录,也可以自定义目录,笔者的目录为 /root/project/getapp)
3、通过 docker 命令来创建容器、挂载项目、启动项目
docker run --name getapp -d -p 3301:8081 -v /root/project/getapp/getmusic-0.0.1-
SNAPSHOT.jar:/root/project/getapp/getmusic-0.0.1-SNAPSHOT.jar java:8 nohup java -jar
/root/project/getapp/getmusic-0.0.1-SNAPSHOT.jar &
注:docker run --name getapp:创建一个容器,名称为 getapp
-d -p:-d 为后台运行容器,-p 为随机端口映射(好像不需要,但也不影响)
3301:8081:指定容器端口号为3301,8081是你项目端口号
-v /root/project/getapp/getmusic-0.0.1-SNAPSHOT.jar:/root/project/getapp/getmusic-
0.0.1-SNAPSHOT.jar:将你的项目挂在到容器的这个位置(我这里都是项目 jar 包所在的位置)
java:8:指定容器依赖的镜像为 java:8,也就是之前拉取的
nohup:后台永远运行
java -jar /root/project/getapp/getmusic-0.0.1-SNAPSHOT.jar:运行项目
&:即使服务器死机也运行
4、完成后我们就会看到一个名为 getapp 的容器
docker ps #查看当前运行的容器列表
注:docker ps -a #查看所有容器列表
docker rm -f(容器名或容器ID) #删除当前运行的容器
docker rm (容器名或容器ID) #删除未运行的容器
5、检查项目是否正常启动
docker logs (容器名) #可以通过查看 docker 日志来检查项目是否正常启动
6、访问项目接口
http://服务器Ip:容器端口号/接口url #访问接口
比如:http://11.111.111.111:1111/api/student/list
注:笔者使用的是腾讯云CentOS7.6服务器,如果你给实列加了安全组,就得开通 3301(容器端口号)的校验规则,如果没有加安全组好像就不用管。如果你使用的是阿里云,那就得开放 3301(容器端口号)端口号。
7、更新服务器:只需要将 jar 包传至相同位置,然后重启 docker 就行
docker restart (容器名) #重启 docker
注:理论上我们支持一个容器放一个项目
部署项目方法二:
1、开始时不需要拉取镜像,只需安装 docker 即可。首先将项目 jar 包传至服务器(笔者这里的位置为 /root/project/getapp),然后进入项目 jar 所在位置,创建 Dockerfile 文件
cd project/getapp #进入项目所在位置
vim Dockerfile #创建 Dockerfile 文件并编写以下代码
FROM java:8 #基础镜像
MAINTAINER xgllhuangzi<******@163.com> #作者
VOLUME /tmp #指定临时目录为 /tmp
ADD getmusic-0.0.1-SNAPSHOT.jar getapp.jar #将jar 包添加到容器中并更名为 getapp
RUN bash -c 'touch /getapp.jar' #操作镜像
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/getapp.jar"] #运行项目
按 esc 退出编辑,然后 :wq 保存退出
2、创建镜像
docker build -t getappi . #实际上是以 java:8 镜像为基础创建镜像,
只不过是将镜像与项目绑定在了一起,也就是 Dockerfile 文件中的 FROM java:8 这一句
3、创建容器
docker run --name getapp 3301:8081 -d -p getappi #解释在方法一中有
4、查看镜像、查看容器是否创建成功,检查项目是否正常启动(具体命令见方法一)
注:两种方法的区别:
1、方法一中,项目是基于镜像的,方法二中,项目是跟镜像绑定在一起的。
2、方法一中,如果你部署 springboot 项目的话,只需要一个 java:8 镜像就可以了,也就是说不管你部署多少个项目,只需要一个镜像。但是在方法二中,你每部署一个项目,就会创建一个镜像(因为方法二中项目跟镜像是绑定在一起的),而一个镜像大概 600M-700M,这就会浪费服务器资源。
3、方法而要比方法一标准,也就是通过 Dockerfile 的方式部署更加标准。
所以具体选择哪一种还得视情况而定,如果你服务器贼强的话完全可以选择第二种!(充钱你就会变得更强!)