简介

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版本。
    1. 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
    所下载的文件是一个可执行文件,对文件进行授权
    1. sudo chmod +x /usr/local/bin/docker-compose
    如果docker-compose命令不能直接使用,进行可执行软链接
    1. sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    查看版本,出现版本信息表示安装完成。
    1. root@starsray:~# docker-compose --version
    2. 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来搭建一套运行环境。

  1. version: '3.8'
  2. services:
  3. elasticsearch:
  4. image: elasticsearch:7.8.0
  5. container_name: elasticsearch
  6. ports:
  7. - "9200:9200"
  8. healthcheck:
  9. test: [ "CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1" ]
  10. interval: 30s
  11. timeout: 10s
  12. retries: 3
  13. start_period: 10s
  14. environment:
  15. - discovery.type=single-node
  16. - bootstrap.memory_lock=true
  17. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  18. ulimits:
  19. memlock:
  20. soft: -1
  21. hard: -1
  22. networks:
  23. - oap-es
  24. oap:
  25. image: apache/skywalking-oap-server:8.9.1
  26. container_name: oap
  27. depends_on:
  28. elasticsearch:
  29. condition: service_healthy
  30. networks:
  31. - oap-es
  32. - oap-ui
  33. ports:
  34. - "11800:11800"
  35. - "12800:12800"
  36. environment:
  37. SW_STORAGE: elasticsearch
  38. SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
  39. SW_HEALTH_CHECKER: default
  40. SW_TELEMETRY: prometheus
  41. JAVA_OPTS: "-Xms1024m -Xmx1024m"
  42. ui:
  43. image: apache/skywalking-ui:8.9.1
  44. container_name: ui
  45. depends_on:
  46. - oap
  47. ports:
  48. - "39043:8080"
  49. deploy:
  50. resources:
  51. limits:
  52. cpus: '0.50'
  53. memory: 256M
  54. environment:
  55. SW_OAP_ADDRESS: http://oap:12800
  56. networks:
  57. - oap-ui
  58. networks:
  59. oap-es:
  60. 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.

一般来说直接执行命令就能启动成功

  1. starsray@starsray:/opt/docker/skywalking$ docker-compose up -d
  2. WARNING: The following deploy sub-keys are not supported and have been ignored: resources.reservations.cpus
  3. Creating network "skywalking_oap-es" with the default driver
  4. Creating network "skywalking_oap-ui" with the default driver
  5. Creating elasticsearch ... done
  6. Creating oap ... done
  7. Creating ui ... done

访问地址:http://localhost:39043,服务端启动成功。
image.png
参考网址: