25、docker-compose.yml 【三剑客之二】

一、安装Docker compose

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

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

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

如果连不上安装不了用安装包

📎docker-compose1.29.2.zip

下载解压后移动为/usr/local/bin/docker-compose

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

[root@manager ~]# chmod +x /usr/local/bin/docker-compose

创建软链:

[root@manager ~]#  ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

[root@manager ~]# docker-compose --version 
Docker Compose version v2.4.1

二、开始使用 Docker Compose

第 1 步:设置

定义应用程序依赖项。

1.为项目创建一个目录:

[root@manager ~]# mkdir composetest ; cd composetest ; pwd

2.创建一个名为 app.py的文件

在这个例子中,redis是redis容灾在应用程序网络中使用的主机名,我们使用redis的默认端口:6379

[root@manager composetest]# vim app.py
[root@manager composetest]# cat 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)

3.在工程目录中创建另一个文件,命名为requirements.txt,包含以下内容。

[root@manager composetest]# vim requirements.txt
[root@manager composetest]# cat requirements.txt 
flask
redis

第 2 步:创建一个Dockerfile

在这个步骤里,我们通过编写Dockerfile来创建一个Docker镜像,这个镜像包括所有python和python运行所需要的组件。

在工程目录里,创建一个名为Dockerfile的文件,内容如下:

[root@manager composetest]# vim Dockerfile
[root@manager composetest]# cat 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
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
  • 这个Dockerfile的含义如下
  • 以python:3.7-alpine为基础镜像开始构建
  • 设置工作路径为/code
  • 为flask设置环境变量
  • 安装gcc和其他依赖
  • 复制requirements.txt到工作目录,运行python依赖
  • 开放容器的5000端口
  • 复制当前目录到工作目录
  • 设置容器默认执行命令为 flask run

第 3 步:在Compose文件中定义服务

在工程目录下创建一个名为docker-compose.yml的文件,内容如下:

[root@manager composetest]# vim docker-compose.yml
[root@manager composetest]# cat docker-compose.yml 
version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

这个compose文件定义了两个服务:webredis

Web服务

web服务使用的是由当前目录下Dockerfile构建的镜像,将主机的8000端口绑定了容器的5000端口。

Redis服务

redis服务使用公共镜像Redis。

第 4 步:使用Compose构建和运行程序

1.在工程目录中,运行docker-compose up以启动应用程序

docker-compose up -d #后台运行

[root@manager composetest]# docker-compose up

2.在浏览器中输入宿主机IP:8000可以看到APP正在运行

3.刷新页面数值会增加

4.复制一个新的终端窗口,输入docker images ls 查看本地镜像列表

5.新终端下在工程目录下运行docker-compose down可以关闭当前的应用程序。或者载程序运行的终端下按CTRL+C也能终端正在运行的程序。

第 5 步:编辑Compose文件来添加存储卷

新volumes键将主机上的项目目录(当前目录挂载到容器的/code安装到容器的,允许您动态修改代码,而无需重建映像。 这 environment键设置 FLASK_ENV环境变量,以告知flask run在开发中运行模式并在更改时重新加载代码。 这种模式应该只在开发中使用。

[root@manager composetest]# vim docker-compose.yml 
[root@manager composetest]# cat docker-compose.yml 
version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

第 6 步:重新构建并运行APP

docker-compose up
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江西理工课堂课后实训作业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值