简介
Docker Compose是Docker官方编排(Orchestration)工具之一,是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
Compose适用于生产、登台、开发、测试以及CI工作流程。使用Compose基本上是一个三步过程:
- 使用Dockerfile定义应用程序的环境,以便可以在任何地方复制它。
- 在docker-compose.yml中定义构成应用程序的服务,以便它们可以在隔离环境中一起运行。
- 运行docker compose up命令启动整个应用程序,也可以使用二进制文件运行docker-compose up。
安装
Docker Compose安装依赖于Docker环境,这里基于Ubuntu 20.04,Docker version 20.10.14版本。
所下载的文件是一个可执行文件,对文件进行授权sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果docker-compose命令不能直接使用,进行可执行软链接sudo chmod +x /usr/local/bin/docker-compose
查看版本,出现版本信息表示安装完成。sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
root@starsray:~# docker-compose --version
docker-compose version 1.29.2, build 5becea4c
实战
Docker Compose的配置文件是基于yaml文件进行配置的,官方提供了完整的yaml编写配置指南。关于yaml版本选择参考官方提供参考,每一个Compose file format版本都与Docker Engine所对应。目前所支持的大版本为两个v2.x和v3.x。
Compose file format | Docker Engine release |
---|---|
Compose specification | 19.03.0+ |
3.8 | 19.03.0+ |
3.7 | 18.06.0+ |
3.6 | 18.02.0+ |
3.5 | 17.12.0+ |
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.4 | 17.12.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
Skywalking是一款优秀的开源APM工具,运行其服务端主要依赖elasticsearch、oap-server、oap-ui三个组件,因此使用Docker Compose来搭建一套运行环境。
version: '3.8'
services:
elasticsearch:
image: elasticsearch:7.8.0
container_name: elasticsearch
ports:
- "9200:9200"
healthcheck:
test: [ "CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1" ]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
networks:
- oap-es
oap:
image: apache/skywalking-oap-server:8.9.1
container_name: oap
depends_on:
elasticsearch:
condition: service_healthy
networks:
- oap-es
- oap-ui
ports:
- "11800:11800"
- "12800:12800"
environment:
SW_STORAGE: elasticsearch
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
SW_HEALTH_CHECKER: default
SW_TELEMETRY: prometheus
JAVA_OPTS: "-Xms1024m -Xmx1024m"
ui:
image: apache/skywalking-ui:8.9.1
container_name: ui
depends_on:
- oap
ports:
- "39043:8080"
deploy:
resources:
limits:
cpus: '0.50'
memory: 256M
environment:
SW_OAP_ADDRESS: http://oap:12800
networks:
- oap-ui
networks:
oap-es:
oap-ui:
需要注意:docker-compose.yml中用到的命令是否支持,可以查阅上面的链接,注意version版本号,此处需要注意的是SkyWalking的启动需要等待Elasticsearch完全启动,因此使用了3.x以上版本支持的healthcheck来保证顺序启动,depends_on本身并不能保证docker容器按照顺序启动,为了避免容器资源占用过多,也可以使用deploy来限制CPU和内存的占用。
关于SkyWalking和Elasticsearch版本选择说明。
说明:Since 8.8.0, the image could work with different storage, including ElasticSearch 6/7 and OpenSearch. Before 8.8.0(<= 8.7.0), -es6 image can only connect to Elasticsearch 6 when set SW_STORAGE=elasticsearch. You need to use -es7 image when set SW_STORAGE=elasticsearch7.
一般来说直接执行命令就能启动成功
starsray@starsray:/opt/docker/skywalking$ docker-compose up -d
WARNING: The following deploy sub-keys are not supported and have been ignored: resources.reservations.cpus
Creating network "skywalking_oap-es" with the default driver
Creating network "skywalking_oap-ui" with the default driver
Creating elasticsearch ... done
Creating oap ... done
Creating ui ... done
访问地址:http://localhost:39043,服务端启动成功。
参考网址: