• 【云原生】Docker Compose初窥门径


    Docker Compose

    Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
    大家应该也知道我们设计的一个系统肯定是涉及多个方面的,比如说你的系统中有nginx,有redis,有数据库服务等等,那这时我们要进行部署的话,是不得一个一个去run,如果服务少的话还好说,多了的话运维的忙死,所有就诞生了compose,他能很好的帮助我们实现一键多启。高效的运行多个容器。

    安装

    首先我们进入官网查看。
    在这里插入图片描述
    在这里插入图片描述

    curl -SL https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
    但是上面这个下载速度有的慢,所以这里推荐使用下面这个
    curl -SL https://get.daocloud.io/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

    在这里插入图片描述

    下面完成后
    在这里插入图片描述

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

    然后再用docker-compose --version检查是否安装完成
    在这里插入图片描述
    然后跟着官网来,大家一定要记住,官网永远都是最全最详细的,只不过大家看见英文就觉得烦所以不肯看,但是其实大家都是从官网中学习出来的,所以我这里就和大家一起从官网出发,其实不难,compose就是一个yml文件,对所需要的服务进行编排执行罢了。
    在这里插入图片描述
    进入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

    在这里插入图片描述
    创建好了之后我们再创建一个requirements.txt的文件,熟悉python的同学应该就很清楚这个是干嘛的了。就是一个需要安装的库的声明。然后再加入以下的内容,列出需要安装的库。

    flask
    redis

    在这里插入图片描述
    这些准备工作做好之后是不就可以开始构建镜像了。接下来就开始操作吧,直接根据官方文档的进行操作,我来进行说明。

    构建镜像Dockerfile

    # 下载最基础的镜像
    FROM python:3.7-alpine
    # 设置工作路径为/code,后续方便卷挂载
    WORKDIR /code
    # 环境配置
    ENV FLASK_APP=app.py
    ENV FLASK_RUN_HOST=0.0.0.0
    # 将本地的该txt文件复制到docker引擎中并名为requirements.txt
    COPY requirements.txt requirements.txt
    # 下载里面所需的库或文件
    RUN pip install -r requirements.txt
    # 暴露端口为5000
    EXPOSE 5000
    # 将当前目录复制到镜像的workdir .目录下
    COPY . .
    # 运行flask
    CMD ["flask", "run"]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    创建docker-compose

    接下来就可以创建docker-compose.yml
    在这里插入图片描述

    version: "3.9"
    services:
      web:
      	# 构建,记住后面那个点不能少
        build: .
        # 设置本机端口8000映射至5000
        ports:
          - "8000:5000"
      redis:
      	# 找redis的镜像
        image: "redis:alpine"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    启动

    启动compose
    docker-compose up

    在这里插入图片描述
    ok启动成功我们去页面看看
    在这里插入图片描述
    成功了。
    接下来我们修改一下compose文件加一个卷挂载,让我们可以更好的修改文件。设置环境,它告诉flask run在开发模式下运行并在更改时重新加载代码。
    在这里插入图片描述

    version: "3.9"
    services:
      web:
      	# 构建,记住后面那个点不能少
        build: .
        # 设置本机端口8000映射至5000
        ports:
          - "8000:5000"
        # 挂载这样我们就能在不重启镜像的情况下修改文件
        volumes:
          - .:/code
        # 设置环境,它告诉flask run在开发模式下运行并在更改时重新加载代码。这种模式应该只在开发中使用。
        environment:
          FLASK_ENV: development
      redis:
      	# 找redis的镜像
        image: "redis:alpine"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    .:/code中间不能空开

    我们试着去修改一个app.py文件看看能不能动态修改。去到目录底下

    vim app.py

    在这里插入图片描述
    在这里插入图片描述

    页面查看。成功了
    在这里插入图片描述

    最后

    我们还可以使用docker-compose up -d来后台启动
    在这里插入图片描述
    docker-compose ps
    在这里插入图片描述
    查看 web服务可以使用哪些环境变量
    docker-compose run web env
    在这里插入图片描述
    停止服务
    docker-compose stop
    在这里插入图片描述
    完全删除容器down,删除数据卷
    docker-compose down --volumes
    在这里插入图片描述

  • 相关阅读:
    日志监控系统 loki 配置文件详解
    [微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)
    【数据结构-图】图的常用算法
    代码随想录算法训练营20期|第五十七天|动态规划part15|● 392.判断子序列 ● 115.不同的子序列
    Java运算符
    【运维笔记】Docker 部署Kibana-7.4.0(在线Docker版)
    第四届全国中医药院校大学生程序设计竞赛 : 二进制码(Python)
    依赖项的处理与层的创建与注册
    2022年湖北建筑八大员报考条件和报名时间考试时间是什么时候呢?甘建二
    购买密封测试接头时双方应如何有效的快速沟通
  • 原文地址:https://blog.csdn.net/weixin_45801664/article/details/126014473