最近的一个项目需要用到docker来部署运维项目,由于之前只是简单的用过一点,虽然在服务器上搭了环境,但是一直没有真正使用过,这次正好提前练手,熟悉一下整个docker部署服务的流程,话不多说。整! (这边我用一个eureka的服务端作为示例)
1.docker环境的搭建
首先检查一下服务器上面的docker版本
docker verion
由于我的版本较低,所以我选择升级,升级需要删掉之前的旧版本 (由于我的docker没有启动,所以直接删除就好,如果有正在运行的容器需要先停止,再关掉docker,最后在删除)
yum remove docker docker-common docker-selinux docker-engine
安装所需软件,yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
使用官方源地址
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
超时失败。。。。
配置阿里云的源地址
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
完成之后查看仓库可以安装的docker版本
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable
这里有很多版本,可以按照特定的版本,不过我们为了升级,当然是按照最新版本
sudo yum install docker-ce
or
sudo yum install docker-ce-18.06.0.ce-3.el7
安装完之后就可以启动docker了
2.docker启动
首先设置docker为开机启动
systemctl enable docker
直接启动
systemctl start docker
查看状态
systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2020-07-20 16:56:25 CST; 2 days ago
Docs: https://docs.docker.com
Main PID: 10992 (dockerd)
Tasks: 12
Memory: 133.9M
CGroup: /system.slice/docker.service
└─10992 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
7月 20 16:56:25 orange dockerd[10992]: time="2020-07-20T16:56:25.420273881+08:00" level=info msg="Docker daemon" commit=48a66213fe graphdriver(s)=overlay version=19.03.12
7月 20 16:56:25 orange dockerd[10992]: time="2020-07-20T16:56:25.420374250+08:00" level=info msg="Daemon has completed initialization"
7月 20 16:56:25 orange dockerd[10992]: time="2020-07-20T16:56:25.450725623+08:00" level=info msg="API listen on /var/run/docker.sock"
7月 20 16:56:25 orange systemd[1]: Started Docker Application Container Engine.
查看版本
docker version
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:46:54 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:45:28 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
到这里docker安装及启动已经完成了,现在可以开始部署自己的spring boot服务了
3.部署服务
首先需要将自己的springboot项目打包,直接在idea里面用maven install即可,再把打好的jar包上传到服务器
然后就是需要编写dockerfile文件
vim dockerfile
FROM java:8
MAINTAINER orange
VOLUME /tmp
ADD eureka-1.0.0-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
- FROM 是指引用的基础镜像是java 8也就是运行环境是jdk1.8
- MAINTAINER 维护者信息
- VOLUME 用于指定持久化目录,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录,所以用这个目录作为持久化目录
- ADD 将本地文件添加到容器中并重命名
- RUN 构建镜像时执行的命令 这里就是运行咱们项目的jar包
- ENTRYPOINT 配置容器 这里配置的是tomcat的获取随机数的配置,如果使用系统默认的方法,可能会造成响应缓慢
编辑完dockerfile之后就可以开始制作镜像了
将dockerfile和上面步骤中上传的jar放在同一目录下,然后执行
docker build -t hope-server .
---> Running in b103f0dc0100
Removing intermediate container b103f0dc0100
---> 27248c274b97
Step 3/6 : VOLUME /tmp
---> Running in 00ab20719506
Removing intermediate container 00ab20719506
---> 8b03c7d7dc47
Step 4/6 : ADD eureka-1.0.0-SNAPSHOT.jar app.jar
---> cb269880f278
Step 5/6 : RUN bash -c 'touch /app.jar'
---> Running in 54f6087fa2a4
Removing intermediate container 54f6087fa2a4
---> ffbd61fa294a
Step 6/6 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
---> Running in 83c7b669fcbd
Removing intermediate container 83c7b669fcbd
---> d5d28abe3ea4
Successfully built d5d28abe3ea4
Successfully tagged hope-server:latest
最终结果显示Successfully代表我们制作成功镜像,这个时候可以通过命令来查看我们制作的镜像
docker images
hope-server latest d5d28abe3ea4 56 seconds ago 769MB
hyperledger/fabric-tools latest 0403fd1c72c7 3 years ago 1.32GB
hyperledger/fabric-tools x86_64-1.0.0 0403fd1c72c7 3 years ago 1.32GB
hyperledger/fabric-couchdb latest 2fbdbf3ab945 3 years ago 1.48GB
hyperledger/fabric-couchdb x86_64-1.0.0 2fbdbf3ab945 3 years ago 1.48GB
hyperledger/fabric-kafka latest dbd3f94de4b5 3 years ago 1.3GB
hyperledger/fabric-kafka x86_64-1.0.0 dbd3f94de4b5 3 years ago 1.3GB
hyperledger/fabric-zookeeper latest e545dbf1c6af 3 years ago 1.31GB
hyperledger/fabric-zookeeper x86_64-1.0.0 e545dbf1c6af 3 years ago 1.31GB
可以清楚的看到刚才我们制作的镜像就在第一位,有了镜像之后,就剩下最后一个步骤,那就是启动容器
docker run -d -p 8888:5151 hope-server
633262fc5ee12480f2b3a333a523215cd2b6f4d8af29a884fd114d2c09213d62
- -d参数是让容器后台运行
- -p 是做端口映射,此时将服务器中的8888端口映射到容器中的5151(项目中端口配置的是5151)端口
启动完成之后我们可以通过命令来查看咋们启动的服务的状态及日志
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
633262fc5ee1 hope-server "java -Djava.securit…" About a minute ago Up About a minute 0.0.0.0:8888->5151/tcp crazy_wescoff
#用上面的CONTAINER ID 可以查询这个容器的日志
docker logs --tail 10 633262fc5ee1
2020-07-22 10:17:11.027 INFO 1 --- [ Thread-13] c.n.e.r.PeerAwareInstanceRegistryImpl : Got 1 instances from neighboring DS node
2020-07-22 10:17:11.028 INFO 1 --- [ Thread-13] c.n.e.r.PeerAwareInstanceRegistryImpl : Renew threshold is: 1
2020-07-22 10:17:11.028 INFO 1 --- [ Thread-13] c.n.e.r.PeerAwareInstanceRegistryImpl : Changing status to UP
2020-07-22 10:17:11.043 INFO 1 --- [ Thread-13] e.s.EurekaServerInitializerConfiguration : Started Eureka Server
2020-07-22 10:17:11.077 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 5151 (http) with context path ''
2020-07-22 10:17:11.078 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 5151
2020-07-22 10:17:11.081 INFO 1 --- [ main] c.b.hope.eureka.EurekaApplication : Started EurekaApplication in 10.627 seconds (JVM running for 11.371)
2020-07-22 10:18:11.031 INFO 1 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms
2020-07-22 10:19:11.030 INFO 1 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms
2020-07-22 10:20:11.030 INFO 1 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry : Running the evict task with compensationTime 0ms
4.完成
服务以及启动好了,我们只需要在浏览器输入服务器的地址就可以正常访问咱们的springboot项目啦
通过ps命令查看当前docker运行的容器服务
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
633262fc5ee1 hope-server "java -Djava.securit…" 3 seconds ago Up 1 second 0.0.0.0:8888->5151/tcp vigorous_goldberg
如果需要停掉服务直接用stop 加上容器id即可
docker stop 633262fc5ee1
633262fc5ee1