前面我们学习和实战了用dockerfile构建镜像,通过镜像可以任意在docker环境容器化部署项目。但是作为WEB领域的开发者,大多都是微服务架构,一个项目会有很多的子项目和中间件,一个个的容器化部署会非常的麻烦。那么,此时我们可以用docker-compose批量构建镜像和容器化,简化我们的运维。
docker-compose 望文生义就是docker组件,可以构建镜像和管理容器。开发人员可以用它批量构建镜像和启动容器。
常用参数:
version 指定compose的文件版本,必写
services 定义服务,必写
以下是services参数:
参数 | 含义 |
---|---|
build | 配置构建时,Compose 会利用它自动构建镜像,该值可以是一个路径,也可以是一个对象 |
image | 镜像名称或镜像ID。如果本地没有指定镜像,则会去docker hub上拉取 |
restart: always | 容器总是重新启动 |
container_name | 容器名 |
volumes | 挂载共享目录 |
command | 构建时需要执行的命令 |
ports | 对外暴露的端口 |
environment | 添加环境变量 |
depends_on | 依赖其他服务,其他服务容器化后才进行 |
networks | 设置网络,不配置会创建默认网络,所有服务都会加入这个网络 |
参数 | 含义 |
---|---|
docker-compose -h | 查看帮助 |
docker-compose build | 构建镜像 |
docker-compose build -d | 后台构建镜像 |
docker-compose up | 创建并运行所有容器 |
docker-compose up -d | 创建并后台运行所有容器 |
docker-compose -f docker-compose.yml up -d | 指定模板 |
docker-compose down | 停止并删除容器、网络、卷、镜像 |
docker-compose pull | 拉取依赖镜像 |
dokcer-compose config | 检查配置 |
dokcer-compose config -q | 检查配置,有问题才有输出 |
docker-compose restart | 重启服务 |
docker-compose start | 启动服务 |
docker-compose stop | 停止服务 |
docker-compose ps | 列出项目中所有的容器 |
docker-compose logs | 查看容器中日志信息 |
docker-compose up --force-recreate -d | 修改compose后强制重新创建容器 |
在实际的生产中容器化部署往往是多个镜像进行容器化,比如kafka集群、rabbitmq集群、zk集群,一般不建议多种不相关的镜像放在一个docker-compose中。对于数据库一般不建议容器化,微服务集群建议容器化。
由于在实际生产环境服务镜像一般都是由dockerfile直接产生,一般不会使用docker-compose进行build。如果需要用docker-compose 构建镜像可以直接使用services下的build参数,并提供dockerfile路径即可。
本文直接使用docker-compose启动管理多个容器
目标镜像:demo_demo、demo_test-demo
mkdir -p /home/test/demo/logs
编写docker-compose,对两个镜像进行容器化配置,并指定日志挂载目录和时区。
vim docker-compose.yml
version: '3.3' #docker-compose版本
services: #服务列表
demo: #服务名
container_name: demo #容器名称
image: demo_demo #镜像
ports: #端口映射
- 8888:9999
volumes: #目录挂载
- /home/test/demo/logs:/opt/logs
- /etc/localtime:/etc/localtime
restart: always #自动重启
environment: #环境变量
TZ: Asia/Shanghai #时区
test-demo:
container_name: test-demo
image: demo_test-demo
ports:
- 7777:9999
volumes:
- /home/test/demo/logs:/opt/logs
- /etc/localtime:/etc/localtime
restart: always
environment:
TZ: Asia/Shanghai
》》》后台启动容器
docker-compose up -d
》》》查看容器
docker ps | grep demo
》》》查看端口映射
netstat -nplt | grep 8888
netstat -nplt | grep 7777
》》》查看容器日志
docker-compose logs --tail 300 -f demo
》》》修改docker-compose强制重启容器
docker-compose up --force-recreate -d
用docker-compose管理容器化springboot项目较为简单,可以直接批量构建镜像和容器化管理,大大大简化我们的运维。在实际的生产环境中,对于数据库一般不建议容器化,微服务集群建议容器化。