S++

千线一眼

导航

Docker进阶(1):浅尝Docker Compose

什么是Docker Compose

Compose是定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。要了解有关Compose所有功能的更多信息,请参阅功能列表

使用Compose

  1. 使用Dockerfile定义应用程序的环境,以便可以在任何地方复制。

  2. docker-compose.yml中定义构成应用程序的服务,以便它们可以在隔离环境中一起运行。

  3. 运行docker compose up, docker compose命令会启动并运行整个应用程序。你也可以使用docker-compose二进制文件运行docker-compose up

docker-compose.yml如下所示:

version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

有关编写文件的更多信息,请参阅编写文件参考
Compose具有管理应用程序整个生命周期的命令:

  • 启动、停止和重建服务
  • 查看运行服务的状态
  • 流化运行服务的日志输出
  • 在服务上运行一次性命令

安装Docker Compose

  1. 运行以下命令以下载Docker Compose的当前稳定版本:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose
  1. 可以选择,为bash和zsh shell安装命令补全

  2. 测试安装

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

体验Docker Compose

第一步:设置

  1. 创建并进入文件夹

 mkdir composetest
 cd composetest
  1. 创建一个app.py文件并添加以下内容

vim app.py

一个计数的例子
在这里,redis是应用程序网络上redis容器的主机名。我们使用Redis的默认端口,6379。

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)
  1. 在项目目录中创建另一个名为requirements.txt的文件

vim requirements.txt
flask
redis

第二步:创建Dockerfile

在此步骤中,您将编写构建Docker映像的Docker文件。该映像包含Python应用程序所需的所有依赖项,包括Python本身。在项目目录中,创建一个名为Dockerfile的文件,并粘贴以下内容

vim 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和其他依赖项
# 复制requirements.txt并安装Python依赖项。
# 向图像中添加元数据,以描述容器正在端口5000上监听
# 将项目中的当前目录复制到图像中的工作目录。
# 将容器的默认命令设置为flask run

第三步:在编写文件中定义服务

vim docker-compose.yml

在项目目录中创建一个名为docker-compose.yml的文件,并粘贴以下内容:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

此编写文件定义了两项服务:webredis
web服务使用从当前目录中的Dockerfile构建的映像。然后,它将容器和主机绑定到暴露的端口8000。此示例服务使用Flask Web服务器5000的默认端口。
redis服务使用从Docker Hub注册表中提取的公共Redis映像。

第四步:使用Compose

从项目目录中,通过运行docker-compose up应用程序。

docker-compose up

在浏览器中输入http://机器IP:8000/以查看应用程序正在运行。
访问
停止应用程序,要么从第二个终端的项目目录中运行docker-compose down,要么在启动应用程序的原始终端中点击CTRL+C

总结

  • 创建应用app.py
  • Dockerfile将应用打包为镜像
  • yaml文件定义完整的上线服务
  • 启动compose项目
    可以查看一下images和network都增加了些什么

yaml编写规则

yaml的编写一般分为4层,分别是版本、服务、网络和挂载
每个服务下可以根据自己的需求来进行配置

version: "3.9"
services:
  services_1:
    ……
  services_2:
    ……
  ……
networks:
volumes:

services详细配置点这里

posted on 2022-02-27 17:26  S++  阅读(366)  评论(0)    收藏  举报