Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用。
Compose 项目目前在 Github 上进行维护。
Compose 定位是“defining and running complex applications with Docker”,前身是 Fig,兼容 Fig 的模板文件。
Dockerfile 可以让用户管理一个单独的应用容器;而 Compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。
该项目由 Python 编写,实际上调用了 Docker 提供的 API 来实现。

首先介绍几个术语。
服务(service):一个应用容器,实际上可以运行多个相同镜像的实例。
项目(project):由一组关联的应用容器组成的一个完整业务单元。
可见,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。

单机部署项目

安装

官方文档: https://docs.docker.com/compose/install/

  1. # 下载 Docker Compose 的当前稳定版本
  2. 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
  3. # 查看是否安装成功
  4. docker-compose -h
  5. docker-compose --version # docker-compose version 1.29.2, build 5becea4c
  6. # 对二进制文件应用可执行权限
  7. chmod +x /usr/local/bin/docker-compose

卸载

  1. rm /usr/local/bin/docker-compose
  1. docker-compose up
  2. docker-compose up -d # 后台启动
  3. # 停止应用程序,方法是docker-compose down 在第二个终端的项目目录中运行,或者在启动应用程序的原始终端中按 CTRL+C。
  4. docker-compose down / CTRL + C
  5. docker-compose stop
  6. # 使用以下down 命令关闭所有内容,完全删除容器。传递--volumes给 Redis 容器使用的数据卷
  7. docker-compose down --volumes

官网示例启动

image.png
image.png
image.png

  1. # 默认命名规则
  2. # 默认的服务名: 文件名_服务名_num
  3. # _num 代表副本,多个服务器,集群,高可用,高并发,负载均衡
  4. composetest_redis_1
  5. composetest_web_1
  6. docker service ls
  7. Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

docker-compose网络

通过docker-compose启动的项目(包含多个服务),都在同一个网络下,可以通过服务名字访问

  1. [root@--- ~]# docker network ls
  2. NETWORK ID NAME DRIVER SCOPE
  3. 8d10d0e8db5e bridge bridge local
  4. 3fa1e11e2050 composetest_default bridge local # docker-compose生成的
  5. e8bf4fced9e2 host host local
  6. 0096a971fd2c mynet bridge local
  7. 6263db0933b9 none null local
  8. 0350d84612be redis bridge local
  9. 799426d70aa2 test-network bridge local
  10. c143092e025f todo-app bridge local
  11. [root@--- ~]# docker network inspect 3fa1e11e2050
  12. [
  13. {
  14. "Name": "composetest_default",
  15. "Id": "3fa1e11e2050b81eb69691487789dd545d6ce3c36e686035c0a49db54f86b2f7",
  16. "Created": "2021-10-10T15:46:29.084459645+08:00",
  17. "Scope": "local",
  18. "Driver": "bridge",
  19. "EnableIPv6": false,
  20. "IPAM": {
  21. "Driver": "default",
  22. "Options": null,
  23. "Config": [
  24. {
  25. "Subnet": "172.21.0.0/16",
  26. "Gateway": "172.21.0.1"
  27. }
  28. ]
  29. },
  30. "Internal": false,
  31. "Attachable": true,
  32. "Ingress": false,
  33. "ConfigFrom": {
  34. "Network": ""
  35. },
  36. "ConfigOnly": false,
  37. "Containers": {
  38. "57876e08abc657e884e2f527d930e0ffc34d632928d38ae2e29efa03c91b1980": {
  39. "Name": "composetest_redis_1",
  40. "EndpointID": "b1803007038c048525602a20da0c2aac73f8a87741ce127e84f89084fd2b75f0",
  41. "MacAddress": "02:42:ac:15:00:03",
  42. "IPv4Address": "172.21.0.3/16",
  43. "IPv6Address": ""
  44. },
  45. "994a3c48416ace662a09b1179a695ee63c9a3c33fccefbb0886374260fcd6aab": {
  46. "Name": "composetest_web_1",
  47. "EndpointID": "cd7e479a22bd251c87214e27d033af3a1bf4164664457e9ceb8cf32f690cded7",
  48. "MacAddress": "02:42:ac:15:00:02",
  49. "IPv4Address": "172.21.0.2/16",
  50. "IPv6Address": ""
  51. }
  52. },
  53. "Options": {},
  54. "Labels": {
  55. "com.docker.compose.network": "default",
  56. "com.docker.compose.project": "composetest",
  57. "com.docker.compose.version": "1.29.2"
  58. }
  59. }
  60. ]
  61. [root@--- ~]#