使用 docker-compose 编排容器运行
使用 docker run 运行容器的时候经常需要加很多的参数,每次都输入这么多参数很容易出
错。另外我们经常需要同时运行若干个容器来构成一个服务,此时还是涉及到网络的联通等
操作。docker compose 可以把docker执行时的参数写成yaml文件,运行的时候只需要
docker-compose up
一下就可以了。
话不多说,下面通过一个例子来学习一下 docker-compose.yml 文件的语法。
version: "3"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"
db:
image: postgres
volumes:
- "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"
- "dbdata:/var/lib/postgresql/data"
volumes:
- dbdata
- version 指定了当前 docker-compose 文件的版本
- services 服务列表,是一个 "服务名:配置" 的字典。这里定义了三个服务: web/redis/db
- build,docker build 命令的参数,用来指定需要构建的 dockerfile
- image,如果镜像不需要自己构建,而是使用dockerhub上的基础镜像,可以直接使用 image 指令
- depends_on 指定当前的服务依赖的服务,从而确定启动顺序
- ports 开放的端口的数组,有三种形式:
- "3000" 容器中开放的端口
- "3000:3000" 开放容器中的端口到宿主机
- "127.0.0.1:3000:3000" 开放容器中的端口到宿主机并绑定IP
- environment 环境变量
- volumes 挂载的卷,可以使用named volume或者是挂载目录,建议不要使用匿名卷。如 果使用 named volume,必须在volumes下声明
docker-compose 有以下3个常用命令:
- docker-compose up [-d] SERVICE
- docker-compose run
- docker-compose stop