Docker Compose是Docker官方的开源编排工具,它可以让用户通过编写一个简单的模板文件,快速的创建和管理基于Docker容器的应用集群。
一、安装
查看官网,有多种方式可以安装,此处使用比较简单的一种,直接使用命令行安装,并赋给执行权限:
curl -L https://github.com/docker/compose/releases/download/1.25.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
安装完成后使用 -v命令查看是否安装成功:
二、命令
可使用docker-compose -help命令查看命令的用法:
root@ubuntu:~# docker-compose -help
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name
(default: directory name)
--verbose Show more output
--log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi Do not print ANSI control characters
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to
--tls Use TLS; implied by --tlsverify
--tlscacert CA_PATH Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH Path to TLS certificate file
--tlskey TLS_KEY_PATH Path to TLS key file
--tlsverify Use TLS and verify the remote
--skip-hostname-check Don't check the daemon's hostname against the
name specified in the client certificate
--project-directory PATH Specify an alternate working directory
(default: the path of the Compose file)
--compatibility If set, Compose will attempt to convert keys
in v3 files to their non-Swarm equivalent
--env-file PATH Specify an alternate environment file
Commands:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information
Compose命令的基本格式是:
docker-compose [-f=<arg>...] [options] [command] [args...]
常用命令选项:
- -f ,–file File指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定。
- -p,–project-name Name指定项目名称,默认使用所在的目录名称为项目名。
…
三、Compose模板文件
模板文件是使用Compose的核心,涉及到的关键字也比较多。但是大部分指令与docker run相关参数的含义都是类似的。
默认的模板文件名称为docker-compose.yml,格式为YAML格式。
这里直接给出一个模板文件来看看如何使用,这个模板的作用是一次构建了后端项目使用的多个常见软件,如MySQL、Redis、Mongo等等:
version: '3' #docker-compose的版本号
services:
mysql:
image: mysql:5.6 #每个服务都必须通过image指令指定镜像或build指令(需要Dockerfile)等来构建镜像
container_name: mysql
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
environment:
MYSQL_ROOT_PASSWORD: root #设置root帐号密码
ports: #暴露端口信息,使用“宿主:容器”
- 3306:3306
volumes: #数据卷所挂载路径设置,
- /mydata/mysql/data/db:/var/lib/mysql #数据文件挂载
- /mydata/mysql/data/conf:/etc/mysql/conf.d #配置文件挂载
- /mydata/mysql/log:/var/log/mysql #日志文件挂载
redis:
image: redis:3.2
container_name: redis
command: redis-server --appendonly yes
volumes:
- /mydata/redis/data:/data #数据文件挂载
ports:
- 6379:6379
elasticsearch:
image: elasticsearch:6.4.0
container_name: elasticsearch
environment:
- "cluster.name=elasticsearch" #设置集群名称为elasticsearch
- "discovery.type=single-node" #以单一节点模式启动
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小
volumes:
- /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
- /mydata/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
ports:
- 9200:9200
kibana:
image: kibana:6.4.0
container_name: kibana
links: #链接到其他服务中的容器,使用服务名称,或“服务名称:服务别名”
- elasticsearch:es #可以用es这个域名访问elasticsearch服务
depends_on:
- elasticsearch #kibana在elasticsearch启动之后再启动
environment:
- "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址
ports:
- 5601:5601
mongo:
image: mongo:3.2
container_name: mongo
volumes:
- /mydata/mongo/db:/data/db #数据文件挂载
ports:
- 27017:27017
切换到docker-compose文件所在目录,并使用-up命令启动:
root@ubuntu:~/data# ll | grep compose
-rwxrw-rw- 1 xu xu 2703 Jul 5 19:07 docker-compose.yml*
root@ubuntu:~/data# docke-compose up
启动之后可以看到没有的image会从仓库pull下来,并启动:
或者加上 -d命令后台启动,可以看到docker-compose文件中的容器都已正常启动了: