基本概念
Docker-Compose是Docker官方的开源项目,负责实现对docker容器集群的快速编排。
可以这么理解,docker compose是docker提出的一个工具软件,可以管理多个docker容器组成一个应用,只需要编写一个YAML格式的配置文件docker-compose.yml,这个配置文件中定义好多个容器之间的调用关系。接着,皆可以通过docker compose相关的命令来一起管理这些容器。
docker-compose的优势有如下几点
- 通过声明式YAML文件统一管理所有的服务、网络、数据卷
- 支持一键启动、停止整个应用栈
- 内置服务依赖顺序控制(通过depends_on)
高阶功能
Docker-Compose常见的高阶功能如下
环境变量注入
services:db:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
通过系统变量来管理密码
资源限制
services:worker:deploy:resources:limits:cpus: '0.5'memory: 512M
通过配置可以限制容器使用cpu、内存等资源
健康检查
services:web:healthcheck:test: ["CMD", "curl", "-f", "http://localhost"]interval: 30stimeout: 10sretries: 3
web等应用容器可以通过执行curl等命令来检测服务的健康心跳
安装流程
使用官方推荐的安装方式,不过在安装之前需要先安装docker引擎并启动docker。
一键安装脚本如下
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose && \
docker-compose --version
常见的命令
命令 | 作用 | 示例 |
docker compose up | 启动所有服务 | #以后台方式启动所有的service docker compose up -d #以后台方式启动指定服务 docker compose up -d web |
docker compose down | 停止并删除所有容器、网络、数据卷 | |
docker compose exec | 进入容器执行命令 | docker compose exec redis sh |
docker compose config | 验证 docker-compose.yml 语法 |
其他命令,还可以通过docker compose --help 来自助查看
案例
这里来使用docker compose来安装一个nginx的容器,操作步骤如下
创建目录
创建如下层级的目录,nginx.conf是nginx的配置文件
html/index.html是一个简单的html静态资源文件
├── docker-compose.yml
├── nginx
│ ├── conf.d
│ │ └── nginx.conf
│ ├── html
│ │ └── index.html
│ └── logs
│ ├── access.log
│ └── error.log
└── redis
配置文件编写
user nginx;
worker_processes auto;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;keepalive_timeout 65;# 包含子配置(若需拆分配置)include /etc/nginx/conf.d/*.conf;
}
编写docker compose的YAML文件
services:nginx:image: nginx:1.25-alpinecontainer_name: my_nginxports:- "80:80"volumes:- ./nginx/html:/usr/share/nginx/html # 静态文件- ./nginx/conf.d/nginx.conf:/etc/nginx/nginx.conf # 主配置文件- ./nginx/logs:/var/log/nginx # 挂载日志目录restart: unless-stoppedlogging: # 可选:限制日志大小(防止磁盘占满)driver: "json-file"options:max-size: "10m"max-file: "3"
编写一个简单的html页面
<h1>Hello Docker Compose + Nginx!</h1>
检查yml文件格式
docker compose config
检查格式没问题以后,运行docker compose配置文件
运行
docker compose up -d
运行成功后,可以在浏览器访问静态资源,能正常显示index.html内容说明nginx运行正常
总结
docker compose可以非常灵活的来管理docker容器,上手又简单,值得学!
通过docker compose运行起来的容器,使用的是自定义的docker网络,默认也是桥接模式,同一个service下的docker容器是在一个网段内,可以直接使用服务名来进行通信。