1. 简介

Docker-Compose 项目是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。

Docker-Compose将所管理的容器分为三层:

  • 工程(project)
  • 服务(service)
  • 容器(container)

Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。

2.Docker-Compose安装

  1. sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
  2. sudo chmod +x /usr/local/bin/docker-compose

3.docker-compose.yml编写

  1. version: "3.8" # 指定 docker-compose.yml 文件的版本信息 写法格式
  2. services: # 多个容器集合
  3. tomcat:
  4. image: "tomcat:8.5.66"
  5. ports:
  6. - "8080:8080"
  7. myapp:
  8. build:
  9. context: ./ # 指定dockerfile文件所在的目录 ./ 代表当前docker-compose.yml所在的当前目录
  10. dockerfile: Dockerfile-myapp # 指定dockerfile文件 默认是Dockerfile文件
  11. args: # 添加构建参数,这些只能在构建过程中访问的环境变量,值可以为空。首先在Dockerfile文件中指定参数。
  12. - "buildNo=1"
  13. - "gitCommitHash=cdc3b19"
  14. command: "ls -a /root" # 用于覆盖容器启动时的最后指令 类似于 <docker run imageId (覆盖的指令)>
  15. container_name: "myapp" # 指定容器启动后的名字 类似于 <docker run --name "myapp" imageId >
  16. ports: # 指定容器映射的端口 类似于 <docker run -p 8999:8999 -p 8888:8888 imageId >
  17. - "8999:8999"
  18. - "8888:8888"
  19. environment: # 用于指定容器启动环境变量 类似于<docker run -e MYSQL_ROOT_PASSWORD=root -e myName=root imageId >
  20. - "MYSQL_ROOT_PASSWORD=root"
  21. - "myName=root"
  22. env_file: # 用于指定写有环境变量的文件 类似于<docker run -e ./.env imageId > 可以防止敏感数据暴露在docker-compose.yml文件中
  23. - ./.env
  24. networks: # 配置容器连接的网络,引用顶级 networks 下的条目 <docker run --network myBridge imageId >
  25. - myBridge
  26. volumes:
  27. - "myAppData:/root/myAppData" # 指定挂载数据卷,引用顶级 networks 下的条目 <docker run --network myBridge imageId >
  28. # - "/root/appData:/root/myAppData" # 绝对路径指定
  29. # 定义网络,可以多个。如果不声明,默认会创建一个网络名称为"工程名称_default"的 bridge 网络
  30. networks:
  31. myBridge: # 一个具体网络的条目名称
  32. driver: bridge # 网络名称,默认为"工程名称_网络条目名称"
  33. name: myBridge # 网络模式,默认为 bridge
  34. volumes:
  35. myAppData:
  36. name: myAppData