|  |  |  | [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 | 
					
						
							|  |  |  | ---- | 
					
						
							|  |  |  | 
 |