ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Docker Compose文件

Docker Compose文件 Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个docker-compose.yml配置文件来声明多个容器如应用、数据库等然后用一条命令启动或停止整个应用栈。一、Docker Compose在没有 Docker Compose 之前如果要用 Docker 跑一个完整的应用比如一个 Python Web 应用 MySQL 数据库需要手动执行一连串docker run命令docker run -d --name mysql -e MYSQL_ROOT_PASSWORD123456 mysql:8.0 docker run -d --name redis redis:7.0 docker run -d --name app -p 8080:8080 myapp:latest而 Docker Compose 通过一个声明式的配置文件把上面所有问题都解决了。二、文件docker-compose.ymldocker-compose.yml是 Compose 的配置文件采用 YAML 格式。它定义了应用的服务services、网络networks和数据卷volumes。示例version: 3.8 services: # MySQL 数据库服务 mysql: image: mysql:8.0 container_name: myapp_mysql restart: always environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: myapp MYSQL_USER: app_user MYSQL_PASSWORD: app_pass ports: - 3306:3306 volumes: - mysql_data:/var/lib/mysql - ./init.sql:/docker-entrypoint-initdb.d/init.sql networks: - app_network healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] interval: 10s timeout: 5s retries: 3 # Python 应用服务 app: build: context: . dockerfile: Dockerfile container_name: myapp_python restart: always ports: - 8080:8080 environment: - DB_HOSTmysql - DB_PORT3306 - DB_USERapp_user - DB_PASSWORDapp_pass - DB_NAMEmyapp volumes: - ./app:/app - /app/__pycache__ # 排除缓存 depends_on: mysql: condition: service_healthy networks: - app_network command: python app.py # Redis 缓存服务 redis: image: redis:7.0-alpine container_name: myapp_redis restart: always ports: - 6379:6379 volumes: - redis_data:/data networks: - app_network # 数据卷声明 volumes: mysql_data: redis_data: # 网络声明 networks: app_network: driver: bridge三、配置项1.services服务的定义每个服务代表一个容器。字段说明示例image使用现成的镜像image: mysql:8.0build从 Dockerfile 构建镜像build: .container_name指定容器名称container_name: myapp_mysqlrestart重启策略restart: alwaysports端口映射ports: - 8080:8080environment/env_file环境变量environment: DB_HOSTmysqlvolumes挂载数据卷volumes: - mysql_data:/var/lib/mysqlnetworks加入的网络networks: - app_networkdepends_on依赖关系depends_on: - mysqlcommand覆盖默认命令command: python app.pyhealthcheck健康检查healthcheck: test: [CMD, curl, -f, http://localhost]2.volumes数据卷声明volumes: mysql_data: # 命名卷由 Docker 管理 redis_data: # 也可以指定外部卷 # external_data: # external: true3.networks网络声明networks: app_network: driver: bridge # 也可以使用 overlay 网络Swarm 模式 # overlay_network: # driver: overlay四、常用命令基础命令命令作用docker-compose up -d启动所有服务-d 后台运行docker-compose down停止并删除所有容器docker-compose ps查看服务状态docker-compose logs查看日志docker-compose logs -f app实时查看 app 服务的日志docker-compose stop停止服务不删除容器docker-compose start启动已停止的服务docker-compose restart重启服务构建与管理# 构建镜像 docker-compose build # 构建时不使用缓存 docker-compose build --no-cache # 拉取所有服务的镜像 docker-compose pull # 进入某个服务容器执行命令 docker-compose exec app bash # 查看某个服务的端口映射 docker-compose port app 8080扩展命令# 启动指定服务 docker-compose up -d mysql redis # 以特定配置文件启动 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d # 指定项目名称默认是目录名 docker-compose -p myproject up -d五、进阶配置1. 环境变量文件.env# .env 文件 DB_PASSWORD123456 APP_PORT8080# docker-compose.yml services: app: ports: - ${APP_PORT}:8080 environment: - DB_PASSWORD${DB_PASSWORD}2. 多环境配置# docker-compose.override.yml默认会被自动加载 services: app: environment: - DEBUGtrue# docker-compose.prod.yml生产环境用 services: app: environment: - DEBUGfalse restart: always# 使用生产配置 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d3. 服务依赖与条件depends_onservices: app: depends_on: mysql: condition: service_healthy # 等待健康检查通过 redis: condition: service_started # 等待启动即可4. 资源限制services: app: deploy: resources: limits: cpus: 0.5 memory: 512M reservations: cpus: 0.25 memory: 256M
返回列表