Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。
使用 Compose 基本上分为三步:
- Dockerfile 定义应用的运行环境
- docker-compose.yml 定义组成应用的各服务
- docker-compose up 启动整个应用
安装 Compose
Compose 网站:https://docs.docker.com/compose/
curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
编写示例
version: "3"
services:
nginx:
# docker 镜像
image: nginx:${NGINX_VERSION}
# 端口映射
ports:
- "${NGINX_HTTP_HOST_PORT}:80"
# 数据挂载 宿主机:docker 此处可以写相对路径
volumes:
- ${SOURCE_DIR}:/var/www/html/:rw
# 重启策略
# no 是默认的重启策略,在任何情况下都不会重启容器。# 指定为 always 时,容器总是重新启动。restart: always
# 注意:如果服务之间是在同个 networks 之下的话就可以通过 服务名:port 来访问链接
networks:
- default
php72:
# build 用 context 指定的 dockerfile 创建
build:
context: .
# 传入 dockerfile 里面的参数
args:
PHP_VERSION: ${PHP72_VERSION}
# 链接到另一个服务中的容器 SERVICE:ALIAS
# 在当前的 web 服务的容器中可以通过链接的 db 服务的别名 database 访问 db 容器中的数据库应用
# 如果没有指定别名,则可直接使用服务名访问。links:
- db:database
# 链接到 docker-compose.yml 外部的容器
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresq
# 使用该参数,container 内的 root 拥有真正的 root 权限。# 否则,container 内的 root 只是外部的一个普通用户权限。privileged: true
# 容器名称
container_name: php72
# 启动时必须等 mysql 服务启动好
depends_on:
- mysql
cap_add:
- SYS_PTRACE
networks:
- default
mysql:
image: mysql:${MYSQL_VERSION}
ports:
- "${MYSQL_HOST_PORT}:3306"
volumes:
- ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
- ${MYSQL_DATA_DIR}:/var/lib/mysql/:rw
restart: always
networks:
- default
# 环境变量传入 dockerfile 里面的变量
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
redis:
image: redis:${REDIS_VERSION}
ports:
- "${REDIS_HOST_PORT}:6379"
volumes:
- ${REDIS_CONF_FILE}:/etc/redis.conf:ro
restart: always
entrypoint: ["redis-server", "/etc/redis.conf"]
networks:
- default
# 指定其为同个 docker 网络
# docker network ls 来查看
networks:
default:
- 变量来自同目录下的.env 文件
- php 通过统计目录的 dockerfile 来构建
常用命令
- ps:列出所有运行容器
docker-compose ps
- logs:查看服务日志输出
docker-compose logs
- port:打印绑定的公共端口,下面命令可以输出 eureka 服务 8761 端口所绑定的公共端口
docker-compose port eureka 8761
- build:构建或者重新构建服务
docker-compose build
- start:启动指定服务已存在的容器
docker-compose start eureka
- stop:停止已运行的服务的容器
docker-compose stop eureka
- rm:删除指定服务的容器
docker-compose rm eureka
- up:构建、启动容器
docker-compose up
- kill:通过发送 SIGKILL 信号来停止指定服务的容器
docker-compose kill eureka
- pull:下载服务镜像
- scale:设置指定服务运气容器的个数,以 service=num 形式指定
docker-compose scale user=3 movie=3
- run:在一个服务上执行一个命令
docker-compose run web bash
[info] 通过 docker-compose 编排的的容器是没有容器自己的 ip,因为他们共用一个或多个 network,可以通过
docker network ls
来查看,可以通过服务名