1. 简介
Docker-Compose 项目是 Docker 官方的开源项目,负责实现对Docker容器集群的快速编排。
Docker-Compose将所管理的容器分为三层:
- 工程(project)
- 服务(service)
- 容器(container)
Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。
2.Docker-Compose安装
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
sudo chmod +x /usr/local/bin/docker-compose
3.docker-compose.yml编写
version: "3.8" # 指定 docker-compose.yml 文件的版本信息 写法格式
services: # 多个容器集合
tomcat:
image: "tomcat:8.5.66"
ports:
- "8080:8080"
myapp:
build:
context: ./ # 指定dockerfile文件所在的目录 ./ 代表当前docker-compose.yml所在的当前目录
dockerfile: Dockerfile-myapp # 指定dockerfile文件 默认是Dockerfile文件
args: # 添加构建参数,这些只能在构建过程中访问的环境变量,值可以为空。首先在Dockerfile文件中指定参数。
- "buildNo=1"
- "gitCommitHash=cdc3b19"
command: "ls -a /root" # 用于覆盖容器启动时的最后指令 类似于 <docker run imageId (覆盖的指令)>
container_name: "myapp" # 指定容器启动后的名字 类似于 <docker run --name "myapp" imageId >
ports: # 指定容器映射的端口 类似于 <docker run -p 8999:8999 -p 8888:8888 imageId >
- "8999:8999"
- "8888:8888"
environment: # 用于指定容器启动环境变量 类似于<docker run -e MYSQL_ROOT_PASSWORD=root -e myName=root imageId >
- "MYSQL_ROOT_PASSWORD=root"
- "myName=root"
env_file: # 用于指定写有环境变量的文件 类似于<docker run -e ./.env imageId > 可以防止敏感数据暴露在docker-compose.yml文件中
- ./.env
networks: # 配置容器连接的网络,引用顶级 networks 下的条目 <docker run --network myBridge imageId >
- myBridge
volumes:
- "myAppData:/root/myAppData" # 指定挂载数据卷,引用顶级 networks 下的条目 <docker run --network myBridge imageId >
# - "/root/appData:/root/myAppData" # 绝对路径指定
# 定义网络,可以多个。如果不声明,默认会创建一个网络名称为"工程名称_default"的 bridge 网络
networks:
myBridge: # 一个具体网络的条目名称
driver: bridge # 网络名称,默认为"工程名称_网络条目名称"
name: myBridge # 网络模式,默认为 bridge
volumes:
myAppData:
name: myAppData