• 云原生之容器化:Docker三剑客之Docker Compose


    1、何谓Docker Compose?

    之前讲Docker的时候,需要先使用Dockerfile去构建镜像,再使用Docker run启动容器,并且没有编排功能。

    在企业的真正使用中,往往一个服务需要和多个其它的服务进行关联,单个服务也有可能有多个容器实例,如果需要发布,很可能会需要人员手动对每一个容器进行打包和启动的操作,非常繁琐,容易出错。

    Docker Compose简单来说,是一个用于定义和运行多个容器的工具,通过docker-compose.yml来实现对容器集群的编排工作。

    Docker Compose管理着如下三个内容:
           工程,docker-compose运行的目录即为一个工程,在微服务场景下,我们往往都是使用git submodule的方式组建工程的,因此父项目就可以成为一个docker compose的工程;
           服务,对应子项目,一个工程可以包含多个子项目;
           容器,对应服务的实例,一个服务可以有多个实例;

    Compose 使用的三个步骤:

    • 使用 Dockerfile 定义应用程序的环境。
    • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
    • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

    2、Docker Compose 安装

    1、Linux安装Docker Compose

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

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

    `sudo curl -L "https://github.com/docker/compose/releases/download/v2.8.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose`
    
    • 1

    要安装其他版本的 Compose,请替换 v2.8.0。

    Docker Compose 存放在 GitHub,不太稳定。

    你可以也通过道客执行下面的命令,高速安装 Docker Compose。

    curl -L https://get.daocloud.io/docker/compose/releases/download/v2.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    • 1

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

    sudo chmod +x /usr/local/bin/docker-compose
    
    • 1

    创建软链:

    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
    • 1

    测试是否安装成功:

    docker-compose --version
    Docker Compose version v2.8.0
    
    • 1
    • 2

    2、macOS安装Docker Compose

    Mac 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Mac 用户不需要单独安装 Compose。Docker 安装说明可以查看我之前所写的 云原生之容器化:Docker的安装与卸载

    3、Windows安装Docker Compose

    Windows 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Windows 用户不需要单独安装 Compose。Docker 安装说明可以查看我之前所写的 云原生之容器化:Docker的安装与卸载

    3、Docker Compose使用

    1、准备

    创建一个测试目录:

    mkdir composetest
    cd composetest
    
    • 1
    • 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在此示例中,redis 是应用程序网络上的 redis 容器的主机名,该主机使用的端口为 6379。

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

    flask
    redis
    
    • 1
    • 2

    2、创建 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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3、创建 docker-compose.yml

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

    # yaml 配置
    version: '3'
    services:
      web:
        build: .
        ports:
         - "5000:5000"
      redis:
        image: "redis:alpine"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

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

    4、使用 Compose 命令构建和运行您的应用

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

    docker-compose up
    
    • 1

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

    docker-compose up -d
    
    • 1
  • 相关阅读:
    用Abp实现两步验证(Two-Factor Authentication,2FA)登录(三):免登录验证
    ARM内核地址对齐访问如何理解
    C++ 炼气期之变量的生命周期和作用域
    MATLAB算法实战应用案例精讲-【图像处理】目标检测(补充篇)(附实战案例及代码实现)
    文心一言 VS CHATGPT
    Vue-依赖注入(provide-inject)
    麒麟系统开发笔记(六):安装QtCreator开发IDE中的中文输入环境Fcitx输入法
    Docker系列第05部分:实战部署应用全流程
    29 - Excel 图表与数据分析
    服务器数据恢复-RAID5常见故障的数据恢复方案
  • 原文地址:https://blog.csdn.net/flq18210105507/article/details/126125397