SpringCloud版本:2.0
docker-compose:1.8.0
Maven:3.5
服务器:Centos 7
Docker以及Docker-Compose安装请查看文章 CentOS 7安装Docker
(1)、在父工程添加maven对应docker插件
com.spotify
docker-maven-plugin
1.1.1
${docker.image.prefix}/${project.artifactId}
latest
src/main/docker
http://192.168.1.160:2375
/
${project.build.directory}
${project.build.finalName}.jar
在某个要部署的web工程的src/main/docker文件目录下创建Dockerfile文件
(2)、编写Dockerfile文件
如下:
# 基于哪个镜像
FROM java:8
# 将本地文件夹挂载到当前容器
VOLUME /tmp
# 拷贝文件到容器,jyh-upload-0.0.1-SNAPSHOT.jar这里是maven打包后的名字
ADD jyh-upload-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
同样的道理,其余的微服务也需要编写Dockefile文件,因为Docker插件的配置已经放在类父工程,所以不需要额外的配置。只需要编写Dockerfile文件即可。
(3)、构建镜像并上传
首先使用Maven命令清除并安装好依赖关系。建议使用父工程全部清除和一键安装依赖。
使用 clean package命令,或者自己编写命令
使用docker命令构建镜像并上传到服务器
clean package docker:build -DskipTests
(4)、查看是否成功
在服务器端使用docker images命令查看所有镜像
可以看到我们的镜像已经上传成功,依赖的java(jdk)也已经下载好了。但是又
(5)、删除重复上传产生的虚悬镜像(名称为none的镜像)
docker images|grep none|awk '{print $3 }'|xargs docker rmi
如此单个为服务是可以正常上传了,但是Docker项目启动之后是在一个个隔离的单独容器中运行,并且会为每一个容器虚拟一个ip地址,我们通过桥接或者其他通信模式进行通信,这个时候就使用docker-compose编写yml文件定义好依赖关系,并使用网络通信。
(1)、在服务器任意目录,新建文件docker-compose.yml
version: '2' #版本
services: #服务
eureka-server: #自定义服务名--注册中心
restart: on-failure
image: djd/jyh-eureka #镜像名称
ports:
- "8761:8761" #映射的端口
networks:
- eureka-net #网络模式
environment: #环境变量
SERVER_PORT: "8761" #自定义参数用于给服务的配置文件传递参数
SPRING_PROFILES_ACTIVE: "test" #环境
SPRING_REDIS_HOST: "192.168.1.112" #redis
auth-server: #自定义服务名--认证中心
restart: on-failure
image: djd/jyh-auth-server #镜像名称
ports:
- "8888:8888" #映射的端口
networks:
- eureka-net #网络模式
- auth-net
environment: #环境变量
SERVER_PORT: "8888" #自定义参数用于给服务的配置文件传递参数
SPRING_PROFILES_ACTIVE: "test" #环境
SPRING_REDIS_HOST: "192.168.1.112" #redis
gate: #网关服务
restart: on-failure
image: djd/jyh-gate
ports:
- "8765:8765"
environment:
REGISTER_URL: "http://192.168.1.160:8761/eureka/"
SERVER_PORT: "8765"
SERVER_ADDR: "192.168.1.160"
SPRING_PROFILES_ACTIVE: "test" #环境
SPRING_REDIS_HOST: "192.168.1.112" #redis
AUTH-SERVER: "http://192.168.1.160:8888" # sso-server地址
networks:
- eureka-net
- auth-net
upload: #上传服务
restart: on-failure
image: djd/jyh-upload
ports:
- "9000:9000"
environment:
REGISTER_URL: "http://192.168.1.160:8761/eureka/"
SERVER_PORT: "9000"
SERVER_ADDR: "192.168.1.160"
SPRING_PROFILES_ACTIVE: "test" #环境
SPRING_REDIS_HOST: "192.168.1.112" #redis
networks:
- eureka-net
manager-web: #后台管理
restart: on-failure
image: djd/manager-web
ports:
- "7001:7001"
environment:
REGISTER_URL: "http://192.168.1.160:8761/eureka/"
SERVER_PORT: "7001"
SERVER_ADDR: "192.168.1.160"
SPRING_PROFILES_ACTIVE: "test" #环境
SPRING_REDIS_HOST: "192.168.1.112" #redis
SPRING_DATASOURCE_URL: "you jdbc connect address"
AUTH-SERVER: "http://192.168.1.160:8888" # sso-server地址
networks:
- eureka-net
- auth-net
networks:
eureka-net:
driver: bridge
auth-net:
driver: bridge
(2)、启动
保存文件,并使用docker-compose命令启动
[root@docker-deploy deploy-docker]# docker-compose -f ./docker-compose.yml up -d
(3)、查看容器启动进程
启动成功之后查看容器启动进程
[root@docker-deploy deploy-docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97d8f3d0b8a1 djd/manager-web "java -Djava.secur..." 2 days ago Up 2 days 0.0.0.0:7001->7001/tcp deploydocker_manager-web_1
2b4805e939e3 557f5889c75d "java -Djava.secur..." 2 days ago Up 2 days 0.0.0.0:8765->8765/tcp deploydocker_gate_1
9e6c0fe49b4c djd/jyh-eureka "java -Djava.secur..." 4 days ago Up 4 days 0.0.0.0:8761->8761/tcp deploydocker_eureka-server_1
ff2aefc2dd00 djd/jyh-upload "java -Djava.secur..." 4 days ago Up 4 days 0.0.0.0:9000->9000/tcp deploydocker_upload_1
efa88b5dfe9e djd/jyh-auth-server "java -Djava.secur..." 4 days ago Up 4 days 0.0.0.0:8888->8888/tcp deploydocker_auth-server_1
(4)、查看日志
查看某个 启动日志:这里既可以根据容器的名称也可以根据名称的id查看日志。
[root@docker-deploy deploy-docker]# docker logs -f -t --tail 1000 deploydocker_manager-web_1
(5)、停止
停止Docker-Compose
docker-compose -f docker-compose.yml down
停止单个容器
[root@docker-deploy deploy-docker]# docker stop 容器id
删除所有容器
[root@docker-deploy deploy-docker]# docker rm -f $(docker ps -a -q)
查看所有容器
[root@docker-deploy deploy-docker]# docker ps -a
查看所有容器id
[root@docker-deploy deploy-docker]# docker ps -a -q
参考文章:https://blog.csdn.net/u011508407/article/details/82153562