一、使用Docker Compose必要性及定义用容器运行一个服务,需要使用docker run 命令。但如果我要运行多个服务呢? 假设我要运行一个web服务,还要运行一个db服务,那么是用一个容器运行,还是用多个容器运行呢? 一个容器运行多个服务会造成镜像的复杂度提高,docker倾向于一个容器运行一个应用。 那么复杂的架构就会需要很多的容器,并且需要它们之间有关联(容器之间的依赖和连接)就更复杂了。 这个复杂的问题需要解决,这就涉及到了**容器编排**的问题了。 
- Compose
- 编排
- 是对多个容器进行启动和管理的方法
- 例如:LNMT,先启动MySQL,再启动Tomcat,最后启动Nginx
- 服务架构的演进
- 单体服务架构
- 分布式服务架构
- 微服务架构
- 超微服务架构
- 容器编排工具
- docker machine
- 在虚拟机中部署docker容器引擎的工具
- docker compose
- 是一个用于定义和运行多容器Docker的应用程序工具
- docker swarm
- 是Docker Host主机批量管理及资源调度管理工具
- mesos+marathon
- mesos 对计算机计算资源进行管理和调度
- marathon 服务发现及负载均衡的功能
- kubernetes
- google开源的容器编排工具
二、Docker Compose应用参考资料网址 https://docs.docker.com/compose/ 
https://yaml.org/
三、Docker Compose应用最佳实践步骤
3.1 概念- 工程(project)
- 服务 (Service)
- 容器 (Container)
3.2 步骤1.定义应用的Dockerfile文件,为了anywhere进行构建。 2.使用docker-compose.yaml定义一套服务,这套服务可以一起在一个隔离环境中运行。 3.使用docker-compose up就可以启动整套服务。
四、Docker Compose安装



# wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 # mv docker-compose-linux-x86_64 /usr/bin/docker-compose # chmod +x /usr/bin/docker-compose # docker-compose versionDocker Compose version v2.2.3
五、Docker Compose应用案例运行Python语言开发的网站
5.1 网站文件准备# mkdir flaskproject[root@localhost ~]# cd flaskproject/[root@localhost flaskproject]# [root@localhost flaskproject]# vim app.py[root@localhost flaskproject]# cat app.pyimport timeimport redisfrom flask import Flaskapp = Flask(__name__)cache = redis.Redis(host='redis', port=6379)def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5)@app.route('/')def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times./n'.format(count) [root@localhost flaskproject]# vim requirements.txt[root@localhost flaskproject]# cat requirements.txtflaskredis
5.2 Dockerfile文件准备[root@localhost flaskproject]# vim Dockerfile[root@localhost flaskproject]# cat DockerfileFROM python:3.7-alpineWORKDIR /codeENV FLASK_APP app.pyENV FLASK_RUN_HOST 0.0.0.0RUN apk add --no-cache gcc musl-dev linux-headersCOPY requirements.txt requirements.txtRUN pip install -r requirements.txtCOPY . .CMD ["flask", "run"]
5.3 Compose文件准备[root@localhost flaskproject]# vim docker-compose.yaml[root@localhost flaskproject]# cat docker-compose.yamlversion: '3'services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
5.4 使用docker-compose up启动容器[root@localhost flaskproject]# lsapp.py docker-compose.yaml Dockerfile requirements.txt [root@localhost flaskproject]# docker-compose up |