文章目录
DockerCompese能够做什么
官方介绍
通过YAML file配置文件用来定义运行多个容器
介绍
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. To learn more about all the features of Compose, see the list of features.
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件配置应用程序的服务。然后,使用一个命令,从配置中创建并启动所有服务。要了解更多关于Compose的所有功能,请参阅功能列表。
Compose works in all environments: production, staging, development, testing, as well as CI workflows. You can learn more about each case in Common Use Cases.
在所有环境中组合工作:生产、登台、开发、测试以及CI工作流。您可以在常用用例中了解关于每个用例的更多信息。
运行的三个步骤
Using Compose is basically a three-step process:
- Define your app’s environment with a so it can be reproduced anywhere.
Dockerfile
- Define the services that make up your app in so they can be run together in an isolated environment.
docker-compose.yml
- Run and the Docker compose command starts and runs your entire app. You can alternatively run using the docker-compose binary.
docker compose up``docker-compose up
使用Compose基本上是一个三步过程:
-
用Dockerfile定义你的应用的环境,这样它就可以被复制到任何地方。
-
通过docker-compose.yml定义组成你的应用的服务,这样它们就可以在一个独立的环境中一起运行。
-
运行Docker compose 命令启动并运行整个应用程序。你也可以使用Docker -compose二进制文件运行。通过’ docker-compose up '启动
yml文件示例
A looks like this:docker-compose.yml
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
DockerFile build run可以手动开启一个容器
如果有100个容器就很麻烦
所以DockerCompese用来管理定义多个容器
Compose 是Docker官方的开源项目,需要单独安装
Compose概念
- services 服务 容器.应用 web redis mysql nginx等
- preject 项目.一组关联的容器
安装compose
#官方下载
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
#授权
chmod +x /usr/local/bin/docker-compose
# 加速下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#授权
chmod +x /usr/local/bin/docker-compose
安装成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7w79X4TH-1641034217001)(C:\Users\精神小伙\AppData\Roaming\Typora\typora-user-images\image-20211231131747632.png)]
测试一个Redis的计数器
- 应用app.py
- Dockerfile 将应用打包为镜像
- Docker-compose yaml文件 定义整个服务,和需要的环境
- 启动compose dicker-compose up
步骤 1:设置
定义应用程序依赖项。
-
为项目创建目录:
$ mkdir composetest $ cd composetest
-
创建一个在项目目录中调用的文件,并将其粘贴到:
app.py
import time import redis from flask import Flask app = 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
-
创建在项目目录中调用的另一个文件,并将其粘贴到:
requirements.txt
flask
redis
步骤 2:创建 Dockerfile
在此步骤中,您将编写一个构建 Docker 映像的 Docker 文件。该映像包含 Python 应用程序所需的所有依赖项,包括 Python 本身。
在项目目录中,创建一个名为以下内容并粘贴以下内容的文件:Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
这告诉 Docker:
- 从 Python 3.7 映像开始构建映像。
- 将工作目录设置为 。
/code
- 设置命令使用的环境变量。
flask
- 安装 gcc 和其他依赖项
- 复制并安装 Python 依赖项。
requirements.txt
- 向映像添加元数据以描述容器正在侦听端口 5000
- 将项目中的当前目录复制到映像中的 workdir。
.``.
- 将容器的缺省命令设置为 。
flask run
步骤 3:在撰写文件中定义服务
创建在项目目录中调用的文件并粘贴以下内容:docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
此撰写文件定义了两个服务:和 。web``redis
网络服务
该服务使用从 当前目录中生成的映像。然后,它将容器和主机绑定到公开的端口 。此示例服务使用 Flask Web 服务器的缺省端口。web``Dockerfile``5000``5000
Redis 服务
该服务使用从 Docker Hub 注册表中提取的公共Redis映像。redis
步骤 4:使用撰写构建和运行应用
- 从项目目录中,通过运行 启动应用程序。
docker-compose up
docker-compose up
[root@iZ70eyv5ttqkcsZ composetest]# docker-compose up
Starting composetest_web_1 ... done
Starting composetest_redis_1 ... done
Attaching to composetest_redis_1, composetest_web_1
redis_1 | 1:C 31 Dec 2021 06:24:25.704 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 31 Dec 2021 06:24:25.704 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 31 Dec 2021 06:24:25.704 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1 | 1:M 31 Dec