Dawn's Blogs

分享技术 记录成长

0%

Docker学习笔记 (6) docker-compose的使用

Compose 的使用

介绍

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Compose 中有两个重要的概念:

  • 服务(service):一个个应用容器实例,比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器。
  • 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

docker-compose 常用命令

dockers-compose 的常用命令如下:

  • docker-compose up:启动所有 docker-compose 服务,加上 -d 参数表示后台运行
  • docker-compose down:停止并删除容器、网络、卷、镜像。
  • docker-compose exec 服务:进入指定的容器内部。
  • docker-compose ps:展示当前 docker-compose 编排过的运行的所有容器。
  • docker-compose top:展示当前 docker-compose 编排过的容器进程。
  • docker-compose logs 服务:查看指定服务容器输出日志。
  • docker-compose config:验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误原因。
  • docker-compose restart:重启服务。
  • docker-compose start:启动服务。
  • docker-compose stop:停止服务。

docker-compose.yaml 常用语法

docker-compose.yml 格式为:

1
2
3
4
5
6
7
8
version: "3"
services:
serviceName:
image: examples/web
ports:
- "80:80"
volumes:
- "/data"

每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像

  • build:指定 Dockerfile 所在文件夹的路径,Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

  • image:指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。

  • container_name:指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。注意:指定容器名称后,该服务将无法进行扩展,因为 Docker 不允许多个容器具有相同的名称。

  • ports:暴露端口信息,使用列表。

    1
    2
    3
    4
    ports:
    - "3000"
    - "8000:8000"
    - "49100:22"
  • volumes:数据卷所挂载路径设置,使用列表。

    1
    2
    3
    volumes:
    - /var/lib/mysql
    - cache/:/tmp/cache
  • environment:设置环境变量。

    1
    2
    3
    4
    5
    6
    environment:
    MYSQL_ROOT_PASSWORD: '123456'
    MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
    MYSQL_DATABASE: 'db2021'
    MYSQL_USER: 'zzyy'
    MYSQL_PASSWORD: 'zzyy123'
  • command:覆盖容器启动后默认执行的命令。

  • working_dir:指定容器中工作目录。

  • depends_on:解决容器的依赖、启动先后的问题。

    1
    2
    3
    depends_on:
    - db
    - redis
  • networks:配置容器连接的网络。

    1
    2
    3
    networks:
    - some-network
    - other-network
  • dns:自定义 DNS 服务器。可以是一个值,也可以是一个列表。

    1
    2
    3
    dns:
    - 8.8.8.8
    - 114.114.114.114