Docker Compose的简单介绍 Docker compose是一个用于定义和运行多容器docker应用的编排方式,可以使用它来管理应用服务。使用一条简单的命令,你就可以创建和启动你配置中的
Docker Compose的简单介绍
Docker compose是一个用于定义和运行多容器docker应用的编排方式,可以使用它来管理应用服务。使用一条简单的命令,你就可以创建和启动你配置中的所有服务。compose的配置文件是docker-compose.yml,Docker-compose是Docker compose的运行工具,在Docker 1.13以前,Docker的编排都使用Docker-compose工具,而在Docker 1.13以后,将Docker-compose的功能集成到Docker stack中,直接可以通过Docker stack部署分布式应用。
Docker compose的文件格式如下:
version: '2' //版本号services: //下面包含两个服务,分别是web和redis web: build: . //使用Dockerfile创建镜像,指定是Dockerfile文件所在目录 ports: - "5000:5000" //映射端口 volumes: - .:/code //将宿主机当前目录挂载到容器/code目录中 - logvolume01:/var/log //将数据卷挂载到容器中 links: - redis redis: image: redis volumes: logvolume01: {}
version是版本号
services是应用服务,下面包含两个服务,分别是web和redis
web服务下:
build 使用Dockerfile创建镜像,Dockerfile文件目录为当前目录
ports 端口映射,容器的5000端口映射宿主机的5000端口
volumes 挂载,第一个是将当前目录挂载到容器的/code目录,第二个则是将数据卷logvolume01挂载到容器的/var/log目录
links 链接
redis服务下:
image 使用redis镜像
volumes是数据卷
2.Docker compose的安装
官方下载脚本(不推荐)
curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Daocloud脚本
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
下载完文件后对文件添加可执行权限
chmod +x /usr/local/bin/docker-compose
检查compose是否安装成功
[root@localhost ~]# docker-compose --helpDefine and run multi-container applications with Docker.Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker-compose -h|--helpOptions: -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 -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 (for example if your docker host is an IP address) --project-directory PATH Specify an alternate working directory (default: the path of the compose 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
3.docker compose的简单使用
docker compose的命令就不进行解析了,需要了解的可以通过
docker-compose --help
或者查询具体命令用法
docker-compose up --help
就可以得到帮助
下面举一个简单的docker compose的小例子
version: '2'services: elasticsearch: image: elasticsearch ports: - "9200:9200" - "9300:9300" environment: ES_JAVA_OPTS: "-Xmx256m -Xms256m" kibana: image: kibana environment: ELASTICSEARCH_URL: http://elasticsearch:9200/ ports: - "5601:5601" links: - elasticsearch
docker-compose.yml文件有严格的格式校验,编写的时候尽量不要使用tab键,不要添加注释等
下面解释一下这个compose文件。这是一个单机ELK日志收集模块的编排工具,定义了EK服务模块,作为日志的存储和显示。
version: '2' #docker-compose的版本号目前有 v1,v2,v3版本,其中v3版本需要docker1.13(and higher)版本支持
services: elasticsearch: image: elasticsearch #使用elasticsearch:latest镜像 ports: - "9200:9200" #将elasticsearch服务的端口映射到宿主机上 - "9300:9300" environment: ES_JAVA_OPTS: "-Xmx256m -Xms256m" #设置elasticsearch服务的java虚拟机内存使用 kibana: image: kibana #使用kibana:latest镜像 environment: ELASTICSEARCH_URL: http://elasticsearch:9200/ #指定查询日志信息的elasticsearch的路径 ports: - "5601:5601" links: - elasticsearch #连接elasticsearch,kibana容器可以使用docker内部dns将elasticsearch转为对应容器ip
切换目录到docker-compose.yml文件所在文件夹
启动服务
[lt_docker_user1@localhost log]$ docker-compose up -dWARNING: The Docker Engine you're using is running in swarm mode.Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.To deploy your application across the swarm, use `docker stack deploy`.Creating log_elasticsearch_1Creating log_kibana_1
停止服务
[lt_docker_user1@localhost log]$ docker-compose stopStopping log_kibana_1 ... doneStopping log_elasticsearch_1 ... done
删除服务
[lt_docker_user1@localhost log]$ docker-compose rmGoing to remove log_kibana_1, log_elasticsearch_1Are you sure? [yN] yRemoving log_kibana_1 ... doneRemoving log_elasticsearch_1 ... done
其他的命令就不在介绍,自行探索https://docs.docker.com/compose/reference/overview/
docker-compose插件功能在docker 1.13版本中集成到docker stack命令中,支持分布式部署。
docker-compose文件的编写格式和参数可以参考官方文档:
v2版本:https://docs.docker.com/compose/compose-file/compose-file-v2/
v3版本:https://docs.docker.com/compose/compose-file/