介绍
compose也是docker官方的一个开源项目, (https://github.com/docker/compose),通过配置YMAL文件,可以实现对同一宿主机上的的多个容器进行统一管理
Docker-Compose的概念有:工程(project),服务(service)以及容器(container)。
Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。
一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。对于一个服务可以运行多个容器实例
注意:服务即对应了docker-compose.yml中定义,通过该定义可生成多个容器,但服务本身并非存在的实体
安装
# 下载
wget https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64
# 改名
mv docker-compose-Linux-x86_64 docker-compose
# 赋予该文件可执行权限
chmod +x docker-compose
如果需要在任何位置都可以使用docker-compose
, 可以将该文件移动到/usr/local/bin
或$PATH
环境变量所包含的目录下。
常用命令
docker-compose 基本命令格式如下
docker-compose [参数...] [options] [COMMAND] [ARGS...]
以下是有关参数说明:
-f,–file FILE指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定。
-p,–project-name NAME指定项目名称,默认将使用所在目录名称作为项目名。
-x-network-driver 使用Docker的可拔插网络后端特性(需要Docker 1.9 及以后版本)
-x-network-driver DRIVER指定网络后端的驱动,默认为bridge(需要Docker 1.9 及以后版本)
-verbose输出更多调试信息
-v,–version打印版本并退出
以下有常见命令:
build 构建项目中的服务容器
help 获得一个命令的帮助
kill 通过发送SIGKILL信号来强制停止服务容器
config 验证和查看compose文件配置
create 为服务创建容器。只是单纯的create,还需要使用start启动compose
down 停止并删除容器,网络,镜像和数据卷
exec 在运行的容器中执行一个命令
logs 查看服务容器的输出
pause 暂停一个服务容器
port 打印某个容器端口所映射的公共端口
ps 列出项目中目前的所有容器
pull 拉取服务依赖的镜像
push 推送服务镜像
restart 重启项目中的服务
rm 删除所有(停止状态的)服务容器
run 在指定服务上执行一个命令
scale 设置指定服务运行的容器个数
start 启动已经存在的服务容器
stop 停止已经处于运行状态的容器,但不删除它
top 显示运行的进程
unpause 恢复处于暂停状态中的服务
up 自动完成包括构建镜像、创建服务、启动服务并关闭关联服务相关容器的一些列操作
version 打印版本信息
下面将列举其中用的比较多的:
up
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
对于某个项目,该命令完成了构建镜像,根据服务创建服务容器,并关联服务相关容器的系列操作。
加上-d代表后台运行
ps
列出项目中目前的所有容器
docker-compose ps [options] [SERVICE...]
stop
停止项目中处于运行状态的容器
docker-compose stop [options] [SERVICE...]
down
停止项目中运行的容器并删除,加上-v
表示删除已经在compose文件中定义的和匿名的附在容器上的数据卷
docker-compose down [options]
rm
删除所有服务容器,加上-v
删除容器所挂载的数据卷
docker-compose rm [options] [SERVICE...]
run
在指定服务上执行一个命令
格式:docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE
[COMMAND] [ARGS...]
样例:docker-compose run ubuntu ping www.baidu.com
config
验证并查看compose文件配置。
docker-compose config [options]
加上-q
代表只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
docker-compose.yml配置
常见配置
build 指定服务镜像Dockerfile所在路径
cap_add,cap_drop 指定容器的内核能力(capacity)分配
command 覆盖容器启动后默认执行的命令
cgroup_parent 指定父cgroup组,意味着将基础该组的资源限制
container_name 指定容器名称。默认将会使用'项目名称_服务名称_序号'这样的格式
devices 指定设置映射关系
dns 自定义DNS服务器。可以是一个值,也可以是一个列表
dns_search 配置DNS搜索域。可以是一个值,也可以是一个列表
dockerfile 指定额外编译镜像的Dockerfile文件,可以通过该指令来指定
env_file 从文件中获取环境变量,可以为单独的文件路径或列表
environment 设置环境变量,可以使用数组或字典两种格式
expose 暴露端口
external_links 链接到docker-compose.yml外部的容器,甚至可以是非Compose管理的外部容器
extra_hosts 指定额外的host名称映射信息
image 指定为镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取这个镜像
labels 指定服务镜像Dockerfile所在路径
links 链接到其他服务中的容器
log_driver 指定日志驱动类型,类似于Docker中的–log-driver参数。目前支持三种日志驱动类型:log_driver:“json-file”、log_driver:“syslog”、log_driver:“none”
log_opt 日志驱动的相关参数
net 设置网络模式。参数类似于docker clinet的–net参数一样
pid 跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程ID来相互访问和操作
ports 暴露端口信息
security_opt 指定容器模板标签(label)机制的默认属性(如用户、角色、类型、级别等)
ulimits 指定容器的ulimits限制值
volumes 数据卷所挂载路径设置。可以设置宿主机路径(HOST:CONTAINER)或加上访问模式(HOST:CONTAINER:ro)
示例:
version: '3'
services:
my_redis:
image: redis
ports:
- "6379:6379"
container_name: "redis"
networks:
- dev
my_mysql:
image: centos/mysql-57-centos7
environment:
MYSQL_ROOT_PASSWORD: "root"
ports:
- "3306:3306"
container_name: "mysql"
networks:
- dev
my_app:
image: tomcat
ports:
- "9090:8080"
container_name: "web"
networks:
- dev
- pro
networks:
dev:
driver: bridge
pro:
driver: bridge