DockerCompose(初识、安装、部署)
初识DockerCompose?
-
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
-
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
version: "3.8"
services:
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "/tmp/mysql/data:/var/lib/mysql"
- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
web:
build: .
ports:
- "8090:8090"
将Docker run中的各种参数全部转化为compose中的指令。
- DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/
DockerCompose安装
参照文档:DockerCompose安装
DockerCompose部署微服务
实现思路如下:
- 查看cloud-demo文件夹,里面已经编写好了docker-compose文件,结构如下
-
修改自己的cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名
-
使用maven打包工具,将项目中的每个微服务都打包为app.jar
-
将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中
-
将cloud-demo上传至虚拟机,利用
docker-compose up -d
来部署解释:启动所有在
docker-compose.yml
文件中定义的服务,并且-d
后台启动
其中:
docker-compose.yml的内容:
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: toor
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
userservice:
build: ./user-service
depends_on:
- nacos
orderservice:
build: ./order-service
depends_on: # 表示orderservice在nacos启动之后启动
- nacos
gateway:
build: ./gateway
ports:
- "10010:10010"
Dockerfile内容:
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar
常见的docker-compose命令我已经写成了一个文档,也可以使用--help
命令来查看命令的具体使用用法。
问题解决(重要!!!)
-
首先使用命令后台启动:
docker-compose up -d
-
发现服务并没有成功启动,使用命令查看日志:
docker-compose logs -f
会发现一堆报错:
其报错的原因是我们的服务尝试启动,发现nacos启动在各种Service服务之后,所以服务无法启动,更别说访问了,可以使用depends-on可以设置容器的启动顺序,如下文件配置:# 表示orderservice在nacos启动之后启动
version: "3.2" services: nacos: image: nacos/nacos-server environment: MODE: standalone ports: - "8848:8848" mysql: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: toor volumes: - "$PWD/mysql/data:/var/lib/mysql" - "$PWD/mysql/conf:/etc/mysql/conf.d/" userservice: build: ./user-service depends_on: - nacos orderservice: build: ./order-service depends_on: # 表示orderservice在nacos启动之后启动 - nacos gateway: build: ./gateway ports: - "10010:10010"
-
现在重启一下服务就可以了:
#docker-compose restart <你的服务名(可以多个空格隔开)> docker-compose restart gateway userservice orderservice