基础概念
docker-compose项目是docker官方的开源项目, 负责实现对docker容器集群的快速编排。
docker-compose将所管理的容器分为三层, 分别是工程(project),服务(service)以及容器(containner)
docker-compose运行目录下的所有文件(docker-compose.yml文件、extends文件或环境变量等)组成一个工程,如无特殊指定,工程名即为当前目录名。
一个工程当中,可以包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。
一个服务中可以包括多个容器实例,docker-compose并没有解决负载均衡的问题。因此需要借助其他工具实现服务发现及负载均衡,比如consul。
docker-compose的工程配置文件默认为docker-compose.yml。可以通过环境变量COMPOSE_FILE -f 参数自定义配置文件,其自定义多个有依赖关系的服务及每个人服务运行的容器。
配置常用字段
字段 | 描述 |
---|---|
build | 指定Dockerfile文件名(要指定的Dockerfile文件需要在build标签的子级标签中用dockefile标签指定) |
dockerfile | 构建镜像上下文路径 |
context | 可以是dockerfile路径,或者时执行git仓库的url地址 |
images | 指定镜像(已存在) |
command | 执行命令,会覆盖容器启动后默认执行的命令(会覆盖dockefile中的CMD指令) |
container_name | 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量。 |
deploy | 指定部署和运行服务相关配置,只能在swarm模式使用 |
environment | 添加环境变量 |
networks | 加入网络,引用顶级networks下条目 |
network-mode | 设置容器的网络模式 |
ports | 暴露容器端口,与-p相同,但是端口不能低于60 |
volumes | 挂载一个宿主机目录或命令卷到容器,命令卷要在顶级volumes定义卷名称 |
volumes_from | 从另一个服务或容器挂载卷,可选参数:ro和rw(仅版本‘2’支持) |
hostname | 在容器内设置内核参数 |
links | 连接诶到另一个容器,- 服务名称[ : ] |
privileged | 用来给容器root权限,注意是不安全的,true |
restart | 重启策略,定义是否重启容器1、no,默认策略,在容器退出时不重启容器2、on-failure,在容器非正常退出时(退出状态非0),才会重启容器3、on-failure:3 在容器非正常退出时,重启容器,最多重启3次4、always,在容器退出时总是重启容器,5、unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。 |
depends_on | 此标签用于解决容器的依赖,启动先后问题。如启动应用容器,需要先启动数据库容器。php:depends_on:- apache- mysql |
##常见命令
命令 | 效果 |
---|---|
docker-compose up -d XXX | 用于启动已定义在docker-compose.yml文件中的服务容器,并以守护进程的方式在后台运行。XXX为具体服务名称:不加服务名称执行所有 |
docker-compose up --build | 命令用于重新构建并启动服务容器。 |
docker-compose stop | 关闭所有环境/模块 |
docker-compose rm | 删除所有环境/模块 |
docker-compose ps | 列出所有运行容器 |
docker-compose logs | 查看服务日志输出 |
docker-compose build | 构建或者重新构建服务 |
docker-compose start XXX | 启动指定服务已存在的容器 |
docker-compose stop XXX | 停止已运行的服务的容器 |
docker-compose rm XXX | 删除指定服务的容器 |
docker-compose kill XXX | 停止指定服务的容器 |
docker-compose run XXX bash | 在服务上执行一个命令 |
docker-compose.yml配置实例
version: '3'
services:
nginx:
container_name: my-nginx
image: nginx
ports:
- 9999:80
volumes:
- /home/nginx/html:/etc/nginx/html
- /home/nginx/conf.d:/etc/nginx/conf.d
- /home/nginx/log:/var/log/nginx
restart: always
networks:
- test-net
mysql:
container_name: my-mysql
image: mysql:8.0.27
security_opt:
- seccomp:unconfined
ports:
- 2333:3306
volumes:
- /home/mysql/conf/my.cnf:/etc/my.cnf
- /home/mysql/data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root123
networks:
test-net:
ipv4_address: 192.168.101.110
networks:
test-net:
driver: bridge
ipam:
config:
- subnet: 192.168.101.0/24
gateway: 192.168.101.1
docker和docker-compose版本对应
官网地址: https://docs.docker.com/compose/compose-file/compose-file-v3/