跳转到内容

❧ Docker-Compose完整教程

一、Docker Compose 定义

Docker Compose 通过一个单独的 docker-compose.yml 模板文牛(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的 Docker 容器的快速部署

img

二、Docker Compose 命令

Terminal window
docker-compose [options] [command]
类型参数或指令说明
Options-f, —file FILE指定 docker-compose.yml 文件路径
Options-p, --project-name NAME指定项目名称
Options—verbose显示更多输出信息
Options-h, —help显示帮助信息
Commandup创建并启动所有容器
Commanddown停止并删除所有容器
Commandps列出所有启动的容器
Commandlogs查看指定容器日志
Commandexec在运行中的容器中执行命令
Commandstart启动所有容器
Commandstop停止所有容器
Commandrestart重启所有容器
Commandkill强制停止所有容器
Commandscale设置容器数量
Commandtop显示容器进程信息
Commandconfig验证 docker-compose.yml 文件
Commandbuild构建或重新构建服务
Commandcommit创建一个新的镜像,从容器的更改中创建
Commandvolumes列出所有卷
Commandpull拉取服务镜像
Commandpush推送服务镜像
Commandversion显示docker-compose版本信息

三、Docker-compose.yml 配置文件

docker-compose.yml
# Docker Compose 完整示例
version: '3.8' # 声明Compose文件版本
services:
# Web应用服务
web:
# 构建配置
build:
context: . # 构建上下文,当前目录
dockerfile: Dockerfile.dev # 自定义Dockerfile名称
args: # 构建参数
- APP_HOME=app
container_name: web_app # 自定义容器名称
# 基于现有镜像构建(二选一,这里注释掉了)
# image: remote-registry:4000/web:latest
# 端口配置
ports:
- "8080:80" # 宿主机端口8080映射到容器端口80
- "6379" # 容器端口6379,宿主机会随机分配端口
expose:
- "3000" # 暴露端口给同一网络的容器,不暴露给宿主机
# 环境变量配置
environment:
- MODE=development
- SHOW=true
env_file:
- .env # 从.env文件加载环境变量
- ./common.env
- ./apps/web.env
# 命令和入口点
entrypoint: /code/entrypoint.sh # 容器启动入口点
command: bundle exec thin -p 3000 # 容器启动后执行的命令
# command: ['/bin/bash', 'start.sh'] # 另一种命令格式
# 网络配置
networks:
- frontend
- backend
# 卷配置
volumes:
- .:/code # 挂载当前目录到容器的/code目录
- static_volume:/app/static # 挂载命名卷
# 依赖关系
depends_on:
- db
- redis
# 外部链接(连接到docker-compose.yml外的容器)
external_links:
- redis_1
- project_db_1:mysql
# 数据库服务
db:
image: postgres:latest # 使用官方PostgreSQL镜像
container_name: postgres_db
# 网络配置
networks:
- backend
# 卷配置
volumes:
- postgres_data:/var/lib/postgresql/data # 使用命名卷存储数据
- ./init.sql:/docker-entrypoint-initdb.d/init.sql # 初始化SQL脚本
# Redis服务
redis:
image: redis:alpine # 使用轻量级的Redis镜像
container_name: redis_cache
# 网络配置
networks:
- backend
# 网络定义
networks:
frontend:
driver: bridge # 使用bridge驱动
backend:
driver: bridge
# 外部网络(已经存在的网络)
default:
external:
name: my-pre-existing-network
# 卷定义
volumes:
postgres_data: # 存储PostgreSQL数据的命名卷
static_volume: # 存储静态文件的命名卷