一. Compose简介
Compose是一个定义和运行多容器的docker应用工具,负责实现对Docker容器集群的快速编排 .
组成 : 工程 服务 容器
二. Compose安装
- 下载二进制安装包
- 设置文件为可执行文件
#下载二进制安装包
curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#设置/usr/local/bin/docker-compose为可执行文件
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose -version
三. 常用命令
Compose命令的基本使用格式:
_docker-compose [-f 参数...] [options] [COMMAND] [ARGS...]_
命令选项:
-f,-file FILE指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定
-p, -project-name NAME指定项目名称,默认将使用所在目录名称作为项目名
-x-network-driver 使用Docker的可拔插网络后端特性(需要Docker 9.0及其之后的版本)
-x-network-driver DRIVER指定网络后端的驱动,默认为bridge(需要Docker9.0及其之后的版本)
-verbose 输出更多的调试信息
-v, -version打印并退出
up :
尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作.
docker-compose up [options] [–scale SERVICE=NUM…] [SERVICE…]
选项包括:
-d 在后台运行服务容器
-no-color 不使用颜色来区分不同的服务的控制输出
-no-deps 不启动服务所链接的容器
-force-recreate 强制重新创建容器,不能与-no-recreate同时使用
-no-build 不自动构建缺失的服务镜像
-abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
-t , --timeout TIMEOUT 停止容器的超时时间(默认为10s)
-remove-orphans 删除服务中没有在compose文件中定义的容器
-scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数
ps :
列出项目中目前的所有容器.
格式为:
docker-compose ps [options] [SERVICE…]
选项包括:
-q 只打印容器的ID信息
stop :
停止已经处于运动状态的容器,但不删除.
格式为:
docker-compose stop [options] [SERVICE…]
选项包括:
-t ,–timeout TIMEOUT 停止容器的超时时间(默认10s)
down :
停止并删除容器 网络 卷 镜像等数据
选项包括:
-rmi type 删除镜像,类型必须是:‘all’ : 删除compose文件中定义的所有镜像; ‘local’ : 删除镜像名为空的镜像
-v , --volumes 删除已经在compose文件中定义的匿名的附在容器上的数据卷
-remove-orphans 删除服务中没有在compose中定义的容器
restart :
重启项目中的服务
格式为:
docker-compose restart [options] [SERVICE…]
选项包括:
-t ,–timeout TIMEOUT 指定重启前停止容器的超时时间(默认10s)
rm :
删除所有(停止状态的)服务容器
格式为:
docker-compose rm [options] [SERVICE…]
选项包括:
-f , --force 强制直接删除,包括非停止状态的容器
-v 删除容器所挂在的数据卷
start :
启动已经存在的服务
格式为:
docker-compose start [options] [SERVICE…]
exec :
通过service name登录到容器中,和docker exec命令功能相同
格式为:
docker-compose exec [options] [SERVICE…]
选项包括:
-d 分离模式 , 后台运行命令
-pricileged 获取特权
-user USER 指定运行的用户
-T 禁用分配TTY,By default docker-compose exec分配-a TTY
-index=index 当一个服务拥有多个容器时,可通过索引号登陆到该服务下的任何服务
四. Compose模板文件
1. 模板文件
#compose文件的版本号
version: "2"
#服务名称
services:
web:
#镜像启动容器
images: nginx
#映射端口
ports:
- "8080:80"
#目录映射
volumes:
- /usr/local/abc:/usr/local/cba
#volumes:指定数据卷的名称
#networks: 指定应用的网络,下面可以定义应用的名字,使用的网络类型等
2. Docker Compose常用模板文件主要命令:
指令 | 功能 |
---|---|
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 client的-net参数一样 |
pid | 跟主机系统共享进程命名空间.打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程ID来相互访问和操作 |
ports | 暴露端口信息 |
sercurity_opt | 指定容器模板标签(label)机制的默认属性(如用户 角色 类型 级别等) |
ulimits | 指定容器的ulimits限制值 |
volumes | 数据卷所挂载路径设置.可以设置宿主机路径(HOST:CONRAINER)或者加上访问模式(HOST:CONTAINER:ro.) |
五.Docker-Compose应用
通过配置docker-compose模板文件(docker-compose.yml),在此配置文件中配置各个容器及其相关的依赖,实现一次启动多个容器.
- 步骤 :
- 编写容器
- 编写模板文件
- 创建并启动docker-compose项目(模板文件所在的目录,docker-compose.yml)
- 代码实现 :
#查看镜像文件
[root@muxin ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/rancher/server latest 85b3b338d0be 17 months ago 1.084 GB
docker.io/centos/mysql-57-centos7 latest 26d536c931ea 17 months ago 445.9 MB
docker.io/mongo latest f93ff881751f 17 months ago 367.6 MB
docker.io/rabbitmq management c51d1c73d028 17 months ago 148.7 MB
docker.io/elasticsearch 5.6.8 6c0bdf761f3b 19 months ago 569.8 MB
docker.io/registry latest d1fd7d86a825 21 months ago 33.26 MB
docker.io/tomcat 7-jre7 e1ac7618b15d 2 years ago 454.3 MB
docker.io/redis latest 1fb7b6c8c0d0 2 years ago 106.6 MB
docker.io/nginx latest 1e5ab59102ce 2 years ago 108.3 MB
docker.io/centos 7 196e0ce0c9fb 2 years ago 196.6 MB
docker.io/mobz/elasticsearch-head 5 b19a5c98e43b 2 years ago 823.9 MB
#redis容器 redis镜像为redis latest(最新版)
#参数1: -p : 端口映射
[root@muxin mycompose]# docker run -id --name=redis1 -p 6379:6379 redis
a477be6b21ae9d580567c9d1469f20750b4e9ffa12adda78a0e7e2523f9a6125
#mysql mysql镜像为centos/mysql-57-centos7
#参数2: -e : 环境变量 设置mysql登录密码为'root'
[root@muxin ~]# docker run -id --name=mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
0c2b191b5a0a655e0c37db41dae706496119b49361f9866570599ade03c30302
#Tomcat Tomcat镜像为tomcat , 版本号为:7-jre7 不写默认拉取最新版
#参数3: -v : 路径映射 宿主机中的webapps和VM中的webapps映射
[root@muxin ~]# docker run -id --name=tomcat1 -p 8080:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
4d8914c86060dd6d3f3a927355f90063a72ee98f046e9860b515f4a1e1145e78
#编写模板文件:
# 创建文件夹
[root@muxin ~]# mkdir /usr/local/mycompose
# 进入文件夹
[root@muxin ~]# cd /usr/local/mycompose/
# 创建docker-compose.yml文件,文件内容如下:
[root@muxin mycompose]# vi docker-compose.yml
version: '3'
services:
redis1:
image: redis
ports:
- "6379:6379"
container_name: "redis1"
networks:
- dev
mysql1:
image: centos/mysql-57-centos7
environment:
MYSQL_ROOT_PASSWORD: "root"
ports:
- "3306:3306"
container_name: "mysql1"
networks:
- dev
web1:
image: tomcat:7-jre7
ports:
- "8080:8080"
container_name: "tomcat1"
networks:
- dev
- pro
networks:
dev:
driver: bridge
pro:
driver: bridge
# 重启docker,保证端口唯一
[root@muxin mycompose]# systemctl restart docker
# docker-compose后台启动
[root@muxin mycompose]# docker-compose up -d
#注意docker-compose和docker的版本问题