Skip to content

Docker Compose

使用 docker compose 轻松 高效管理 docker 容器,定义和运行多个容器。

三步骤

  1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere.
    • Dockerfile 保证我们的项目在任何地方运行
  2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
    • services 什么是服务?
    • docker-compose.yml 怎么写?
  3. Run docker compose up and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up using the docker-compose binary.
    • docker compose up 启动项目

示例:

yaml
version: '3.9' # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - '8000:5000'
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

一个 compose 包含webredis 两个容器 ,web 关联到了 redis ,先启动 redis 容器然后启动 web 容器

compose:重要的概念

  • services 服务:容器,应用(nginx,redis)
  • project 项目:一组关联的容器。博客、web、mysql

安装

撰写先决条件

  • Docker Compose 需要 Docker Engine。
  • Docker Compose 插件需要 Docker CLI。

安装撰写插件:

  • (Mac,Win,Linux) Docker Desktop:如果您安装了 Desktop,那么您已经安装了 Compose 插件。
  • Linux 系统:要安装 Docker CLI 的 Compose 插件,请使用以下安装方法之一:
  • Windows Server:如果要直接在 Microsoft Windows Server 上运行 Docker 守护程序和客户端,请按照 Windows Server 安装说明进行操作

配置文件

完整配置指南 →

https://docs.docker.com/compose/compose-file/compose-file-v3

depends_on

yaml
version: '3.9'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

表示服务之间的依赖关系。服务依赖关系会导致以下行为:

docker-compose up按依赖顺序启动服务。在上面的示例中,启动顺序为: db→ redis→ web

搭建 WordPress 博客

https://docs.docker.com/samples/wordpress/

  1. 在自定义目录(推荐空目录,避免干扰)中创建docker-compose.yml文件

  2. 输入以下内容并保存(数据库原文为 mysql:5.7,M1 电脑改为 amd64/mysql)

    yaml
    version: '3.9'
    
    services:
      db:
        image: amd64/mysql
        volumes:
          - db_data:/var/lib/mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: somewordpress
          MYSQL_DATABASE: wordpress
          MYSQL_USER: wordpress
          MYSQL_PASSWORD: wordpress
    
      wordpress:
        depends_on:
          - db
        image: wordpress:latest
        volumes:
          - wordpress_data:/var/www/html
        ports:
          - '8000:80'
        restart: always
        environment:
          WORDPRESS_DB_HOST: db
          WORDPRESS_DB_USER: wordpress
          WORDPRESS_DB_PASSWORD: wordpress
          WORDPRESS_DB_NAME: wordpress
    volumes:
      db_data: {}
      wordpress_data: {}
  3. 使用docker-compose up -d 命令,启动容器组

  4. 打开浏览器访问博客(跳过了 WordPress 的在线安装注册过程)

检查容器运行状态

bash
 docker ps
  CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS                  NAMES
  c9e47636a744   wordpress:latest   "docker-entrypoint.s…"   6 seconds ago   Up 6 seconds   0.0.0.0:8000->80/tcp   wp_blog_wordpress_1
  1895525741cf   amd64/mysql        "docker-entrypoint.s…"   7 seconds ago   Up 6 seconds   3306/tcp, 33060/tcp    wp_blog_db_1

实战