[appendix] = Docker Compose Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。 使用 Dockerfile 我们很容易定义一个单独的应用容器。 然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。 例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器; 再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。 如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。 这时候就需要一个工具能够管理一组相关联的的应用容器,这就是 Docker Compose。 Compose有2个重要的概念: * 项目(Project): 由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。 * 服务(Service): 一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 == 模版文件 模板文件是使用 Compose 的核心, 涉及到的指令关键字也比较多, 默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。 [source,bash] ---- version: '3' services: elasticsearch: image: elasticsearch:6.8.5 container_name: elasticsearch restart: always depends_on: - db - redis volumes: - /app/skywalking/elasticsearch/data:/usr/share/elasticsearch/data:rw - /app/skywalking/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - /app/skywalking/elasticsearch/conf/jvm.options:/usr/share/elasticsearch/config/jvm.options - /app/skywalking/elasticsearch/logs:/usr/share/elasticsearch/logs:rw environment: - TZ=Asia/Shanghai - xpack.monitoring.enabled=false - xpack.watcher.enabled=false ports: - "9200:9200" - "9300:9300" ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000 ---- == 常用命令 === 列出 Compose 文件中包含的镜像 [source,bash] ---- # 列出 Compose 文件中包含的镜像 docker-compose -f docker-compose.yml images ---- === 列出项目中目前的所有容器 [source,bash] ---- # 列出项目中目前的所有容器 docker-compose -f docker-compose.yml ps ---- === 构建(重新构建)项目中的服务容器 [source,bash] ---- # 构建(重新构建)项目中的服务容器 # 一般搭配自定义镜像, 比如编写的 Dockfile, 功能类似于 docker build docker-compose -f docker-compose.yml build ---- === up [source,bash] ---- # 构建(重新构建)项目中的服务容器 # 一般搭配自定义镜像, 比如编写的 Dockfile, 功能类似于 docker build # 参数说明: # -d 在后台运行服务容器, 默认前台运行,控制台将会同时打印所有容器的输出信息,可以很方便进行调试 # --no-color 不使用颜色来区分不同的服务的控制台输出 # --no-deps 不启动服务所链接的容器 # --force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用 # --no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用,默认先停止容器,然后重新创建 # --no-build 不自动构建缺失的服务镜像 # -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒) docker-compose -f docker-compose.yml up ---- === down [source,bash] ---- # 停止用up命令所启动的容器并移除网络 docker-compose -f docker-compose.yml down ---- === stop [source,bash] ---- # 停止已经处于运行状态的容器,但不删除它 # 停止所有服务 docker-compose -f docker-compose.yml stop # 停止指定的名为 xxx 的服务 docker-compose -f docker-compose.yml stop xxx ---- === restart ---- # 重启项目中的服务 docker-compose -f docker-compose.yml restart ---- === logs ---- # 查看服务容器的输出 # 默认情况下, docker-compose 将对不同的服务输出使用不同的颜色来区分, 可以通过 --no-color 来关闭颜色 # 查看整体的日志 docker-compose -f docker-compose.yml logs # 查看名为 xxx 的服务的日志 docker-compose -f docker-compose.yml logs xxx ---- === rm ---- # 移除容器 docker-compose -f docker-compose.yml rm ----