docker compose发布flask应用

一、Compose 简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。compose对于单机或者少量机器的docker管理比较友好,批量node节点的管理还是通过k8s管理比较好。Compose配置应用的步骤一般如下:

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

二、Compose安装

最简单的安装方法是配置epel源后,通过yum命令进行安装。这样也可以避免一堆环境依赖,当然除此之外,也可以从github上下载二进制包进行使用。其地址为:

这里以1.27.3版本为例,安装操作命令如下:

# curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

三、项目测试

这里以一个最简单的 flask 应用为例,测试项目的目录结构如下:

[root@localhost ~]# tree /composetest/
/composetest/
├── app.py
├── docker-compose.yml
├── Dockerfile
└── requirements.txt

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)

requirements.txt 文件的内容如下:

flask
redis

这里列出的是flask应用依赖的包。

创建的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"]

创建docker-compose.yml文件内容如下:

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

通过docker-compose up -d 启用应用即可。这时打开URL访问http://IP:5000 就可以查示Hello World! I have been seen 1 times 的内容,每刷新一次页面,对应的次数也会相应的更新。

四、compose指令

常见的compose指令可以通过–help查看,具体内容如下:

docker-compose up -d : 后台运行
docker-compose stop: 停止正在运行的服务
docker-compose down: 关闭所有容器并删除,默认保留 数据卷
docker-compose ps:列出当前运行的服务状态和相关信息
docker-compose run: 一次性命令

这里特别提示下docker-compose build命令(或docker-compose up -d –build),如果运行的app.py内容有更新,可以在启动时,带上build重新生成新的内容,更改会立即生效。

docker-compose run 指信可以查看服务器的指令,这个需要通过docker run 指令也可以正常通过shell 执行才可以,像上面的alpine这种压缩过后的image不一定有输出,例如要输出环境变量信息,可以使用如下指令:

$ docker-compose run web env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=e4b6b17f39dc
TERM=xterm
LANG=C.UTF-8
GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D
PYTHON_VERSION=3.7.4
PYTHON_PIP_VERSION=9.0.1
HOME=/root

好,本篇幅就先到这里吧,下一篇再对docker-compose的语法结构做一个总结。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注