[云原生专题-14]:容器 - 批量定义构建运行多个微服务- docker编排工具Compose

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[云原生专题-14]:容器 - 批量定义构建运行多个微服务- docker编排工具Compose相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122726338


目录

前言:

第1章 Docker-Compose 简介

第2章 Docker-Compose 的安装

第3章 构建一个新的微服务应用程序

3.1 构建前准备

第4章 把微服务应用程序构建成一个docker镜像

4.1 创建 Dockerfile 文件

4.2 单独构建docker镜像(仅用于测试)

第5章 创建 docker-compose.yml

第6章 使用 Compose 命令构建和运行docker应用

第7章 查看构建的docker镜像


前言:

在实际系统中,每个docker提供的微服务功能范围较小,因此一个系统中乎拥有大量的实现微服务功能的docker,因此,需要一种机制能够批量的启动这些微服务,提升效率。

Docker Compose就是能够完成这样目标的工具, 如下图所示

第1章 Docker-Compose 简介

Docker Compose | 菜鸟教程

docker Compose是一个批量定义、构建、运行多个微服务- dockek编排工具,在复杂docker部署中得到广泛的应用。

 通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

如果你还不了解 YML 文件配置,可以先阅读 YAML 入门教程

Compose 使用的四个步骤:

  • 安装Docker Compose工具

  • 使用 Dockerfile 单个定义微服务应用程序的环境。

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

  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

第2章 Docker-Compose 的安装

Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:Releases · docker/compose · GitHub

也就是说Docker-Compose并不是docker自身携带的功能,而是一个独立的工具。

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

# 工具安装
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

#将可执行权限应用于二进制文件:

$ sudo chmod +x /usr/local/bin/docker-compose

#创建软链:

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 安装后检测
$ docker-compose --version
cker-compose version 1.24.1, build 4667896b

第3章 构建一个新的微服务应用程序

3.1 构建前准备

(1)创建一个测试目录:

$ mkdir composetest
$ cd composetest

(2)在测试目录中创建一个名为 app.py 的文件,并复制粘贴以下内容

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和Flask
  • redis 是外部应用程序网络上的 redis 容器(也是一个容器)的主机名,该主机使用的端口为 6379。通过redis可以访问外部的redis 容器中的存储和查找服务。

(3)在 composetest 目录中创建另一个名为 requirements.txt 的文件,内容如下:

flask
redis

第4章 把微服务应用程序构建成一个docker镜像

4.1 创建 Dockerfile 文件

在 composetest 目录中,创建一个名为 Dockerfile 的文件,内容如下:

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
COPY . .
CMD ["flask", "run"]

Dockerfile 内容解释:

  • FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像。

  • WORKDIR /code: 将工作目录设置为 /code。

  • ENV FLASK_APP app.py
    ENV FLASK_RUN_HOST 0.0.0.0

    设置 flask 命令使用的环境变量。

  • RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速。

  • COPY requirements.txt requirements.txt
    RUN pip install -r requirements.txt

    复制 requirements.txt 并安装 Python 依赖项。

  • COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录。

  • CMD ["flask", "run"]: 容器提供默认的执行命令为:flask run。

这样就定义好了一个微服务容器。

4.2 单独构建docker镜像(仅用于测试)

[root@i-kfhwt9y5 ~]# docker build -t python-app:v1 .
[root@i-kfhwt9y5 ~]# docker images
REPOSITORY   TAG          IMAGE ID       CREATED          SIZE
<none>       <none>       432e8ef5a9b9   25 minutes ago   41.8MB
ubuntu       latest       d13c942271d6   2 weeks ago      72.8MB
python       3.7-alpine   a1034fd13493   8 weeks ago      41.8MB

第5章 创建 docker-compose.yml

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

# yaml 配置
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

该 Compose 文件定义了两个服务:web 和 redis。

  • web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像(build: .)。然后,它将容器和主机绑定到暴露的端口 5000(port "5000:5000")。此示例服务使用 Flask Web 服务器的默认端口 5000 。
  • redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像

通过docker-compose,可以构建多个相关联的docker镜像。

第6章 使用 Compose 命令构建和运行docker应用

在测试目录中,执行以下命令来启动应用程序:

docker-compose up

如果你想在后台执行该服务可以加上 -d 参数:

docker-compose up -d

第7章 查看构建的docker镜像

(1)静态镜像

[root@i-kfhwt9y5 ~]# docker images
REPOSITORY   TAG          IMAGE ID       CREATED          SIZE
<none>       <none>       432e8ef5a9b9   36 minutes ago   41.8MB
ubuntu       latest       d13c942271d6   2 weeks ago      72.8MB
redis        alpine       3900abf41552   8 weeks ago      32.4MB
python       3.7-alpine   a1034fd13493   8 weeks ago      41.8MB

(2)自动下载redis镜像

(3)自动下载python镜像

(4)自动构建了一个app镜像

(5)自动运行docker镜像

(2)动态docker

docker ps

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122726338

以上是关于[云原生专题-14]:容器 - 批量定义构建运行多个微服务- docker编排工具Compose的主要内容,如果未能解决你的问题,请参考以下文章

[云原生专题-13]:容器 - 通过docker network 构建docker微服务网络:Docker network

[云原生专题-9]:容器 - Docker的启动与关闭:runstop

云原生的基石,一文读懂容器DockerPod到底是什么!

[云原生专题-20]:容器 - docker的常见命令

6小时搞定云原生:从基础概念到上手实践

6小时搞定云原生:从基础概念到上手实践