官方介绍
Compose is a tool for de?ning and running multi-container Docker applications.
With Compose, you use a YAML ?le to con?gure your application’s services.
Then, with a single command, you create and start all the services from your con?guration.
To learn more about all the features of Compose, see the list of features.
所有的环境都可以使用 Compose。
Compose works in all environments: production, staging, development, testing,
as well as CI work?ows. You can learn more about each case in Common Use Cases.
介绍总结:
定义、运行多个容器。
YAML ?le 配置文件。
single command。 命令有哪些?
1.De?ne your app’s environment with a dockerfile so it can be reproduced anywhere.
Docker?le 保证我们的项目在任何地方可以运行。
2.De?ne the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
services 什么是服务。
docker-compose.yml 这个文件怎么写!
3.Run docker-compose up and Compose starts and runs your entire app.
启动项目
补充理解
Compose 是Docker官方的开源项目。需要安装!Dockerfile让程序在任何地方运行。 web服务。 redis、mysql、nginx ... 多个容器。需要run很多次
Compose则因此而生
# A docker-compose.yml looks like this:(yml文件示例)version: '2.0' services: web: build: . ports: - "5000:5000" volumes: -.:/code -logvolume01:/var/log links: -redis redis: image: redis volumes: logvolume01: {}Compose重要的概念:
1.服务services,说白了就是容器,应用(web、redis、mysql.)这些应用可以使用compose进行编排
2.就生成一个项目project,是一组关联的容器。跑起来 博客。web、mysql。
Compose 和 Swarm区别
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是:
因此,对于微服务的部署,显然 Docker Swarm 会更加适合
# 不建议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# 这个可能快点!curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
cd /usr/local/binllsudo chmod +x /usr/local/bin/docker-composedocker-compose version# 看到版本号则安装成功官方步骤地址:https://docs.docker.com/compose/gettingstarted/
流程
1、创建网络
2、执行 Docker-compose yaml
3、启动服务。
Docker-compose yaml
通过Docker Compose上构建一个简单的python web应用程序,该应用程序使用Flask框架并在redis中维护一个计数器,用来记录该web应用被访问的次数。
yum -y install python-pip # pip是python包管理工具yum -y install epel-release # 报错的话执行mkdir composetestcd composetestvim app.py# 写入:import 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)在此示例中,redis是应用程序网络上 redis 容器的主机名。我们使用 Redis 的默认端口6379
vim requirements.txt# 写入:flaskredisvim Dockerfile#写入:# syntax=docker/dockerfile:1FROM 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.txtEXPOSE 5000COPY . .CMD ["python", "app.py"]# 这告诉 Docker:# 从 Python 3.7 映像开始构建映像。# 将工作目录设置为 。/code# 设置命令使用的环境变量。flask# 安装 gcc 和其他依赖项# 复制并安装 Python 依赖项。requirements.txt# 将元数据添加到映像,以描述容器正在侦听端口 5000# 将项目中的当前目录复制到映像中的工作目录。..# 将容器的默认命令设置为 。flask runvim docker-compose.yml# 写入:version: "3.9"services: web: build: . ports: - "8000:5000" redis: image: "redis:alpine" # 此撰写文件定义了两个服务:web和redisdocker-compose upCompose 会拉取 Redis 映像,为代码构建映像,然后启动定义的服务。在这种情况下,代码在生成时静态复制到映像中
curl local:8000# 多次curl或者刷新页面会增加次数Hello World!I have been seen 2 times.如果你在 Linux、Docker Desktop for Mac 或 Docker Desktop for Windows 上本机使用 Docker,那么 Web 应用现在应该在 Docker 守护程序主机上的端口 8000 上侦听。将 Web 浏览器指向 http://localhost:8000 以查找邮件。如果无法解决此问题,您也可以尝试 http://127.0.0.1:8000。Hello Worlddocker-compose
以前都是单个docker run启动容器
docker-compose 通过docker-compose编写yaml配置文件,可以通过compose一键启动所有服务或停止。
1,Docker镜像 run => 容器
2,DockerFile构建镜像(服务打包)
3,Docker-compose启动项目(编排,多个微服务/环境)
4,Docker网络
可查看官网示例: https://docs.docker.com/compose/compose-file/#specifying-durations
# 三层# 1version: '' #版本# 2services: #服务 服务1: web # 服务配置 images build network ...... 服务2: redis ...... 服务3: redis ...... # 3#其他配置 网络/卷,全局规则volumes:networks:config: