Docker Compose 入门
Docker Compose
简介
原来我们的操作是:DockerFile build run 进行手动操作,单个容器,如果假设我们有100个微服务,并行微服务之间还存在依赖关系。
这个时候,我们就可以使用Docker Compose来轻松高效的管理容器,定义运行多个容器。
官方介绍:
- 定义、运行多个容器
- YAML file配置环境
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。要了解有关Compose的所有特性的更多信息,请参阅特性列表。
Compose可以在所有环境中工作:生产、阶段、开发、测试,以及CI工作流。您可以在常见用例中了解关于每个用例的更多信息
使用Compose基本上有三个步骤:
- 用 Dockerfile 定义你的应用程序的环境,这样它就可以在任何地方复制。
- 在 Docker-compose 中定义组成应用程序的服务。这样它们就可以在一个独立的环境中一起运行。
- 运行 docker-compose up 和 Compose 启动并运行整个应用程序。
作用:批量容器编排
Compose是Docker官方的开源项目,需要安装!
Dockerfile 让程序在任何地方运行,web服务。Redis、MySQL、Nginx。。。多个容器
Compose的YAML文件如下所示
1 | version: '2.0' |
docker-compose up 100 个服务,也可以一键启动
Compose:重要的概念
- 服务service,容器,应用(web,redis,mysql)
- 项目project,就是一组关联的容器。
安装Docker Compose
官方文档:https://docs.docker.com/compose/install/
下载
首先我们先安装一下Docker
1 | # yum安装 |
然后下载docker-compose
1 | 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 |
授权
下载完成后,我们进入到下面的目录
1 | cd /usr/local/bin |
然后加入执行权限
1 | sudo chmod +x docker-compose |
查看是否安装成功
1 | docker-compose version |
创建文件体验
在这个页面中,您将构建一个运行在Docker撰写器上的简单Python web应用程序。该应用程序使用了烧瓶框架,并在Redis中维护了一个命中计数器。虽然示例使用Python,但是即使您不熟悉它,这里演示的概念也应该可以理解。
确保你已经安装了Docker引擎和Docker组合。你不需要安装Python或Redis,因为它们都是由Docker images提供的。
1 | # 创建文件夹 |
然后我们需要创建一个 app.py 文件
1 | import time |
然后创建一个 requirements.txt 文件,里面需要依赖包
1 | flask |
创建Docker file
在这个步骤中,您将编写一个构建Docker映像的Dockerfile。该映像包含Python应用程序需要的所有依赖项,包括Python本身。在您的项目目录中,创建一个名为Dockerfile的文件,并粘贴以下内容:
1 | FROM python:3.7-alpine |
上述代码中,是为了告诉Docker
从Python3.7版本开始构建镜像
将当前目录设置为 /code
安装python依赖项
将容器的默认命令设置为 python app.py
定义服务在Compose文件中
创建一个名为docker-compose的文件。yml在您的项目目录,并粘贴以下
1 | version: '3' |
此Compose文件定义了两个服务,web和redis,该web服务使用从Docker file当前目录中构建的镜像
将容器上的公开端口5000
这个合成文件定义了两个服务:web和redis。
Web服务
web服务使用从当前目录中的Dockerfile构建的映像。然后,它将容器和主机绑定到公开的端口5000。这个示例服务使用了Flask web服务器5000的默认端口
Redis服务
redis服务使用从Docker Hub注册中心提取的公共redis图像
使用Compose构建和运行应用程序
在项目目录中,通过运行启动应用程序 docker-compose up.
1 | docker-compose up |
运行结果如下
1 | Creating network "composetest_default" with the default driver |
最后查看服务是否启动成功

使用 docker images命令,我们发现在docker compose中的镜像都已经下载好了

网络规则
使用下面的命令,就可以查看到docker中的网络
1 | docker network ls |

通过compose构建的服务,compose帮我们维护了,都会在一个网络下面,就可以通过域名访问
我们通过以下命令来进行查看,发现启动的两个服务,就是同处于同一个网络下的
1 | docker network inspect composetest_default |

关闭docker compose
可以使用一下命令退出
1 | docker-compose down |
总结
我们可以对上述的操作,进行一下总结,就可以分为一下几个步骤
- 应用 app.py
- Docker file 将应用程序打包成镜像
- Docker-compose yaml 文件(定义整个服务,需要的环境,web、redis)完整的上线服务
- 启动compose项目(docker-compose up)
- 流程
- 创建网络
- 执行Docker-compose yaml
- 启动服务
原来我们没有用到docker-compose的时候,都是需要使用docker run,一个个的运行我们的容器
通过docker-compose,我们编写yaml文件,可以通过docker-compose一键启动服务,或者停止。
yaml规则
docker-compose.yaml规则
1 | # 三层 |
完整实例如下
1 | version: "3.8" |
依赖关系
如果我们的项目还有依赖关系,比如 web 依赖于redis,也就是说项目需要首先启动redis
1 | version: "3.8" |
快速搭建WordPress
官网搭建文档:https://docs.docker.com/compose/wordpress/
首先创建项目的文件夹
1 | # 创建文件夹 |
然后创建一个 docker-compose.yml 文件
1 | version: '3.3' # 定义版本 |
后台启动项目
1 | docker-compose -d |
到此为止,项目已经成功搭建完毕
正常的开源项目,可能还需要依赖 build后的jar包,所以我们还需要使用Dockerfile
当我们的文件准备齐全的时候,就可以一键启动项目
未来的趋势:linux、docker、k8s
掌握:docker基础、原理、网络、服务、集群、错误排查、日志。
docker-compose搭建微服务
我们可以使用下面命令 ,创建一个SpringBoot项目:https://start.spring.io/
- 编写项目微服务
- dockerfile构建镜像
- 创建docker-compose来启动项目,进行服务编排
- 丢到服务器 docker-compose启动
- 如果出现了问题:使用docker-compose up –build(重新构建)
Docker小结
- Docker镜像 -> 通过 run命令启动镜像
- Dockerfile 构建镜像(服务打包)
- docker-compose 启动项目(编排、多个微服务/ 环境)
- Docker 网络






