Docker Compose基础使用指南

Docker Compose基础使用指南
Docker Compose即容器组合,是基于Docker的一种初级容器管理方案,是Docker官方开源的容器编排工具,优点是简单易用,而且功能强大。
1. 环境要求
常见环境配置示例:
# 系统环境
系统: Ubuntu 22.04/CentOS 7.6
Docker: 18.09.7及以上
Docker Compose: 1.29.2及以上
2. Docker Compose配置示例
2.1 基础配置示例
version: "3"
services:
server:
container_name: server1 # 容器名称
# 指定镜像 ${VERSION:-latest} ,VERSION先从同级目录内的.env文件中获取,获取不到,则使用latest
image: xxxx.com/web_server:${VERSION:-latest}
restart: always # 是否一直重启
ports: # 端口映射 外部:容器内部
- "80:80"
volumes: # 挂载卷
- ./data/server:/data
environment: # 系统设置
- TZ=Asia/Shanghai
env_file: # 环境变量
- variables.env
depends_on: # 依赖的容器
- mysql
logging: # 日志设置
options:
max-size: 1g # 日志最大存储1g
entrypoint: # 容器的切入点,此处可以不填,默认是镜像声明的
- start.sh
- args1 # start.sh的参数
- args2
user: "www:www" # 指定内部的程序用什么角色执行
healthcheck: # 健康检查
test: ["CMD", "/healthcheck.sh"] # 不正常的话,非0退出即可
interval: 60s # 间隔时长
timeout: 10s # 超时时长
retries: 3 # 重试次数
extra_hosts: # dns解析
- "www.163.com:172.17.3.1"
3. 常用命令
# 启动docker-compose.yml声明的容器,会自动更新,重建容器
docker-compose up -d
# 停止并删除docker-compose.yml声明的容器
docker-compose stop
# 查看docker-compose.yml声明的容器的状态
docker-compose ps
# 查看容器的日志
docker-compose logs --tail -n 100 -f server
# 查看容器的日志,导出到vim中,方便查询
docker-compose logs server | vim -
# 进入容器内部
docker-compose exec server /bin/bash
4. 便捷脚本
创建快速进入容器的脚本:
#!/bin/bash
# 快速进入容器内
docker-compose exec $1 /bin/bash
5. 常见问题处理
5.1 端口占用问题
# docker-proxy占用端口不释放,导致新容器启动失败
# 确认端口占用的是什么程序
netstat -tlnp | grep port
# 如果是docker占用,重启一下docker进程即可
systemctl restart docker
5.2 容器和镜像管理
容器日志位置:
- 一般在
/var/lib/docker/containers/<container_id>
- docker-compose.yml修改后,在目录中直接
docker-compose up -d
会重新创建容器 - 如果只是修改启动脚本,
docker-compose up -d
不会重新创建容器
镜像导入导出:
# 打包导出
docker save -o myengine.tar myengine:v0.1
# 导入
docker load -i myengine.tar
# 压缩镜像包
gzip myengine.tar # 进一步压缩体积,节省流量
# 上传到镜像仓库
docker tag myengine:v0.1 hub.docker.com/foobar/myengine:v0.1
docker push hub.docker.com/foobar/myengine:v0.1
6. 注意事项
- 默认情况下,docker-compose会建立一个默认的网络,供docker-compose.yml内的容器使用
- 修改配置文件后重新部署时,注意检查端口占用情况
- 使用环境变量时,优先从.env文件读取,找不到则使用默认值
- 建议使用数据卷来持久化重要数据
- 合理配置日志轮转,避免日志占用过多磁盘空间