概述:
一个应用系统包含若干个docker容器,甚至每个容器之间也有前后依赖关系,如果每个docker都要手动启停,过于繁琐,程序员要学会找工具偷懒,使用docker compose可以轻松管理应用系统中的多个容器。
docker compose将管理应用系统分为三层,工程,服务,容器。
docker compose运行目录下所有文件(docker-compose.yml)组成一个工程,工程中包含多个服务,每个服务定义了容器运行的镜像、参数、依赖。
docker compose常用指令
docker-compose ps 列出所有运行容器
docker-compose build 构建或重新构建服务
docker-compose start example 启动指定服务已存在的容器
docker-compose stop example 停止已运行的服务的容器
docker-compose rm example 删除指定服务的容器
docker-compose up 构建、启动容器
docker-compose down 删除所有容器,镜像
docker-compose环境变量
环境变量可以在.env文件中定义,格式是每一行都是KEY=VAL
或者在shell中export出来,格式是export KEY=VAL
注:这种默认的环境变量优先级略低,如果是docker-compose run直接从命令行传入相同的KEY,配置文件中的值将会被覆盖。
docker-compose.yml属性
多个容器会涉及到容器之间的通信,可以使用容器名
version: 指定docker-compose.tml文件的写法格式
services: 多个容器组合
build: 配置构建时,compose会利用它自动构建镜像
environment: 环境变量配置,可以是字典或数组两种方式
environment:
RACK_ENV: development
SHOW: 'ture'
-------------------------
environment:
- RACK_ENV=development
- SHOW=ture
env_file: 从文件中获取环境变量,可以指定文件路径,优先级低于environment指定的环境变量
env_file: .env
---------------
env_file:
- ./common.env
expose: 暴露端口,只将端口暴露给连接的服务,而不暴露给主机
expose:
- "3000"
- "8000"
image:指定服务所使用的镜像
network_mode:设置网络模式
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
ports: 对外暴露的端口定义,与expose对应
ports: # 暴露端口信息 - "宿主机端口:容器暴露端口"
- "8763:8763"
volumes:卷挂载路径
volumes:
- /lib
- /var
logs:日志输出信息
--no-color 单色输出,不显示其他颜.
-f, --follow 跟踪日志输出,就是可以实时查看日志
-t, --timestamps 显示时间戳
--tail 从日志的结尾显示,--tail=200
实例
version: '2.2'
services:
server1:
image: server1
build: ./server1
# we don't need expose it if connected within compose
# expose:
# - "8001"
ports:
- "8001:8001"
environment:
- XXX=ps
volumes:
- ${FOLDER1}:/var/lib/
server2:
image: server2
build: ./server2
ports:
- "8000:8000"
environment:
- SERVER1_NAME=server1 ##用docker name设置环境变量是访问不到http服务的
volumes:
- ${WEB_FOLDER}:/test
depends_on:
- server1