Docker Compose 简介

2019-12-22 container

Docker Compose 是 Docker 官方编排项目,用于快速的部署应用。通过 DockerFile 可以快速生成一个容器,如果要多个容器配合使用,那么就可以通过该编排工具完成。

简介

通过一个单独的 docker-compose.yml 模板文件定义一组相关联的应用容器作为一个项目,其中有两个比较重要的概念:

  • 服务 Service,一个应用容器,可以包括若干运行相同镜像的容器实例。
  • 项目 Project,由一组关联的应用容器组成的一个完整业务单元,在配置文件中定义。

Compose 最开始由 Python 编写,后来应该用 GoLang 进行了重写,会调用 Docker 服务提供的 API 来对容器进行管理。

安装

在 V2 版本中可以作为 Docker 的插件或者单独使用。

----- 可以直接根据OS安装插件
# apt-get install docker-compose-plugin
# yum install docker-compose-plugin

也可以从 Github Releases 下载相关的二进制,保存在 docker 插件所在目录,其中用户级别在 ~/.docker/cli-plugins,系统级为 /usr/local/lib/docker/cli-plugins

示例

这里使用的是 Dockerfile 简介 中的示例镜像,然后创建 docker-compose.yml 文件,内容如下。

version: '3'
services:
  web:
    build: .                # 可以通过Dockerfile构建
    ports: .
      - "8000:5000"         # 端口映射 Host:Container,也可以指定IP地址
  foobar:
    image: foobar:latest    # 指定镜像
    container_name: foobar  # 容器名
    restart: always         # 退出后立即重启
    volumes:                # 配置数据卷,Host:Container:ro
      - /opt/foobar/data:/usr/foobar/data:rw
    environment:            # 指定环境变量
      - TZ=Asia/Shanghai
    ports:
      - "127.0.0.1:3030:2000"
    command: nc -kl 2000    # 指定执行的命令

最后,通过 docker-compose up 命令启动即可,可以通过 -f 参数指定文件,另外,一些环境变量类似的配置可以使用如下方式,更多可以参考 YAML 中的内容。

envs: &shared-envs
    APP_PATH: ${APP_PATH:-/usr/bin}
services:
  web:
    environment:
      <<: *shared-envs
      RUN_MODE: ${RUN_MODE:-release}

这是 YAML 格式提供的机制,可以共享一些变量的同时,针对不同的服务定制一些环境变量。

存储系统

可使用上述示例中 bind 访问,也支持 ./data:/usr/foobar/data:ro 相对路径方式,还可以使用如下存储卷。

version: '3'
services:
  web:
    volumes:
      - static:/usr/data:rw
volumes:
  static:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/opt/data'

网络配置

默认会创建的一个名为 default 的网络,相关的容器会添加到网络中,其对应的名字就是默认服务名,例如上述的 web 可以通过 http://web:5000 访问,可以通过如下方式配置。

networks:
  monitor:
    driver: bridge
services:
  web:
    networks:
      - monitor

另外,还可以在 services 中通过 network_mode: host 参数指定模式。

常用命令

----- 只启动某个指定的服务
docker compose up web
----- 默认从当前目录读取compose.yaml文件启动
docker compose up -d -f compose.yaml
----- 连接到某个服务
docker compose exec -it foobar /bin/sh
----- 指定 Compose 服务的当前状态信息
docker compose ps
----- 查看某个服务的日志,如果不指定则会查看所有
docker compose logs -f foobar

注意,其中 up 用于启动,而 start/stop 可以在启动之后重启、停止使用,如果没有通过 up 启动而且运行态已经被清理,那么使用 start 则没有效果,与 up 对应的是 down 子命令。

常用参数整理如下。

  • -d 后台运行。

常用镜像

Jaeger

docker pull quay.io/jaegertracing/jaeger:2.1.0

其中 Jaeger 最新版本可以从 Download 获取,启动参数或端口可参考 Getting Started 中内容。

Redis

官方 redislabs/redis 镜像大概有 2G 左右,有点大,可以使用 library/redis 实现,只有 100M 左右,其中配置文件如下。

port 6379
bind 0.0.0.0
daemonize no
requirepass 123456
logfile ""
appendonly no

更多配置项可以参考 redis.io 内容。

参考