# Docker开源之Docker-Compose

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 解决方案
> 标签: AI, Linux, Docker
> 原文链接: http://117.50.162.249:3000/yun/articles/721

---

# Docker开源之Docker-Compose

> 来源: https://www.ucloud.cn/yun/130141.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:20

Docker开源之Docker-Compose

[

前言

]

“寒江孤影，江湖故人”。

在Docker走马江湖的青葱岁月里，面对云时代的巍然大势下，Docker曾也浪迹江湖，执三剑以扫天下，饮马江湖，仗剑天涯。今朝声名已著，江湖时传，三剑客也。

Docker三剑客之Docker-Machine

DockerMachine:docker-machine就是docker公司官方提出的用于在各种平台上快速创建具有docker服务的技术，主要是解决docker运行环境问题。

Docker三剑客之Docker-Compose

Docker-compose:是用来定义和运行多容器应用的工具，主要是解决本地docker容器编排问题。

Docker三剑客之Docker-Swarm

DockerSwarm:是Docker社区原生提供的容器集群管理工具，是解决多主机多个容器调度部署的问题。

在docker后续的发展浪潮中，docker-machine的能力范围主要用于处理陈旧系统的中docker部署及远程系统上配置docker的需求。docker-compose作为docker的一项开源项目独立维护。而docker-swarm被docker吸收嵌入到dockerengine中成为docker的子命令。本文仅以docker-compose为出发点，详细分析下其功能作用和配置特点。

[

Docker-compose概述

]

# 

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose，您可以使用YAML文件来配置应用程序的服务。然后，使用一个命令，就可以从配置中创建并启动所有服务。

Compose通过一个配置文件来管理多个Docker容器，在配置文件中，所有的容器通过services来定义，然后使用docker-compose脚本来启动，停止和重启应用，和应用中的服务以及所有依赖服务的容器，非常适合组合使用多个容器进行开发的场景。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130141/images/130141_000.png)

**使用compose基本上是一个三步过程：**

1.用dockerfile，或者镜像定义应用程序的环境，以便在任何地方复制。

2.在docker-compose.yml中定义组成应用程序的服务，以便它们可以在多带带的环境中一起运行。

3.运行dockercompose up启动并运行整个应用程序。

docker-compose将所管理的容器分为3层结构：Project 、Service 、Container。docker-compose.yml组成一个project，project中包括多个service，每个service定义了容器运行的镜像（或构建镜像），网络端口，文件挂载，参数，依赖等，每个service又可以包括同一个镜像的多个容器实例。

[

Docker-compose示例演练

]

# 

## **部署安装**

因为docker-compose的运行还是依赖docker容器的，故docker也是事先部署好的；另外还要注意的是，docker-compose的运行版本也是需要和本地运行的dockerengine的版本是统一的。

**Docker安装**

$ sudo yum install -y yum-utils

$ sudo yum-config-manager

  --add-repo

  https://download.docker.com/linux/centos/docker-ce.repo

配置dockeryum源：

$ sudo yum install docker-ce docker-ce-cli containerd.io

安装最新版dockerengine：

安装指定版本的dockerengine：

注：文件演示docker安装版本：Dockerversion 18.09.0, build 4d60db4

**Docker-compose安装：**

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86\_64 3:18.09.1-3.el7                     docker-ce-stable

docker-ce.x86\_64 3:18.09.0-3.el7                     docker-ce-stable

docker-ce.x86\_64 18.06.1.ce-3.el7                    docker-ce-stable

docker-ce.x86\_64 18.06.0.ce-3.el7                    docker-ce-stable

$ sudo yum install docker-ce-

docker-ce-cli- containerd.io

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/

docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

注意：要安装其他版本的Compose，请替换1.26.2 为要使用的Compose版本。另外github网络连接不好的情况可能下载失败，可以去github上直接下载上传到本地服务器。文中docker-compose安装版本：docker-composeversion 1.18.0, build 8dd22a9

[

示例演练

]

## 

本次示例采用的是wordpress+mysql部署一个博客项目：

Docker-compose.yml文件配置内容如下：

|  |
| --- |
| version: 3.1  services:  wordpress:    image: wordpress    restart: always    ports:      - 8080:80    environment:      WORDPRESS\_DB\_HOST: db      WORDPRESS\_DB\_USER: wp      WORDPRESS\_DB\_PASSWORD: 123456      WORDPRESS\_DB\_NAME: wordpress    volumes:      - wordpress:/var/www/html    db:    image: mysql:5.7    restart: always    environment:      MYSQL\_DATABASE: wordpress      MYSQL\_USER: wp      MYSQL\_PASSWORD: 123456      MYSQL\_RANDOM\_ROOT\_PASSWORD: 1    volumes:      - db:/var/lib/mysql    volumes:  wordpress:  db: |

Docker-compose启动wordpress博客项目，这里统称上述yml文件中描述的服务都是来完成博客项目的，其中service有两个：wordpress服务和MySQL服务。

至此我们使用docker-compose来启动该项目：

#进入docker-compose.yml文件所在目录执行命令

$ sudo docker-compose up -d

#或者启动docker-compose.yml文件来启动

$ sudo docker-compose -f /yml\_dir/docker-compose.yml  up -d

查看容器启动情况：

]# docker-compose ps

      Name                       Command               State        Ports        

-------------------------------------------------------------------------------------

wordpress\_db\_1         docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp

wordpress\_wordpress\_1  docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp

Wordpress页面配置展示效果：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130141/images/130141_001.png)

从演示的结果来看，docker-compose确实完成了我们期望的工作，在一次部署中完成对项目中所有服务的构建管控。从服务器环境上来说，compose使用项目名称的方式将环境相互隔离；并且支持环境变量，方便用户使用这些变量应用在不用的环境中，用户自定义设置变量等方面。从应用上看过了compose的功能特点，接下来我们看看从yml文件配置中看看docker-compose都完成了什么。

[

Yml文件配置概述

]

version：指定docker-compose.yml文件的写法格式

version: 3.1

services:多个服务集合，例如文件中wordpress和db都是服务：

services:

wordpress:

db：

image:指定服务所使用的镜像：

version: 3.1

services:

wordpress:

  image: wordpress

restart:always ：配置重启，docker每次启动时会启动该服务

restart:always

ports：定义宿主机端口和容器端口的映射，可使用宿主机IP+宿主机端口进行访问宿主机端口:容器端口

environment：环境变量配置，可以用数组或字典两种方式

volumes：卷挂载路径，定义宿主机的目录/文件和容器的目录/文件的映射  宿主机

ports:

- 8080:80

environment:

WORDPRESS\_DB\_HOST: db  #此项配置引用 服务 db的名称，

WORDPRESS\_DB\_USER: wp

WORDPRESS\_DB\_PASSWORD: 123456

WORDPRESS\_DB\_NAME: wordpress

volumes:#此处wordpress为数据卷

- wordpress:/var/www/html

路径:容器路径

[

Docker-compose命令概述

]

# 

docker-composepull：拉取服务里定义的镜像

docker-composeps ：列出project所有运行容器（容器名= 目录名\_service\_index index表示容器序数，从1开始）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/130141/images/130141_002.png)

docker-composebuild：构建/重新构建所有镜像

docker-composestart [serviceName]：启动已存在但停止的所有service;

（可选）[serviceName]：表示启动某一个service

docker-composeup -d（相当于build + start ）：构建（容器）并启动（容器）整个project的所有service

-d：后台进程

--scale：指定服务运行的容器个数

docker-composestop [serviceName]：停止运行的service

（可选）[serviceName]：表示停止某一个service

docker-composerm -f [serviceName]：删除已停止的所有service

（可选）[serviceName]：表示删除已停止某一个service

-f ：删除不在询问

docker-composedown -v（相当于stop + rm）：停止并移除整个project的所有services

-v：删除挂载卷和volunme的链接

docker-composelogs [serviceName]：查看服务内所有容器日志输出

（可选）[serviceName]：表示输出某一个service的日志

-f：实时输出日志

docker-composerun [serviceName] command：在某个服务上运行命令

eg:docker-compose run web ping www.baidu.com

docker-composeexec [serviceName] sh：进入到某个容器

--index:2 ：当服务内有多个容器时，需要指定第几个,默认是第一个

eg：docker-composeexec --index=2 web sh

docker-composerestart [serviceName] : 重启服务

docker-composeconfig：验证和查看compose文件

docker-compose images：列出所用的镜像

docker-cpmposescale：设置服务个数Eg：docker-compose scale web=2 worker=3

docker-composepause [serviceName]：暂停服务

docker-composeunpause [serviceName]：恢复服务

[

总结

]

# 

通过本次演练完整了体现了docker-compose在单台主机上运行多个独立环境的能力及环境变量设置等有力手段，其实compose在对数据卷的使用及只重新创建改变的容器方式也极大的提高了compose的使用便利性。但局限性也很明显就是单台服务器上部署，无法保证高可用性，故而在越来越多的集群方式的环境下，使用场景也变的单一。所以在后续的使用中，要切合场景要求，一切以现场实际为出发点，提出有效正确的方案。