当前位置:   article > 正文

Dockerfile加docker-compose构建编排web应用

Dockerfile加docker-compose构建编排web应用

Dockerfile加docker-compose构建编排web应用

用flask框架写一个web服务器应用,使用Dockerfile构建镜像,然后用docker-compose编排启动应用。

1. 创建一个简单的flask应用

创建flask-app目录,在目录下创建一个名为 app.py 的文件,并添加以下代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker Compose!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)
  • 1

这是一个非常简单的 Flask 应用,当你访问根路径时,它将返回 "Hello, Docker Compose!"。

2. 编写Dockerfile文件

为该 Flask 应用创建 Dockerfile。此文件将告诉 Docker 如何构建您的应用程序镜像。同目录下创建一个名为 Dockerfile 的文件,并添加以下代码:

# 使用官方的 Python 镜像作为基础
FROM python:3.9

# 将工作目录设置为 /app
WORKDIR /app

# 将当前目录的所有文件复制到 /app
COPY . /app

# 安装 Flask
RUN pip install flask

# 公开 Flask 默认的 5000 端口
EXPOSE 5000

# 启动 Flask 应用
CMD ["python""app.py"]
  • 1

3. 编写docker-compose.yml文件

创建 Docker Compose 配置以便可以启动和管理该 Flask 应用程序。同目录下创建一个名为 docker-compose.yml 的文件,并添加以下代码:

version: '3.8'

services:
  web:
    build:
      context: .
    ports:
      - "5000:5000"
  • 1

字段说明:

  • version: 指定 Docker Compose 文件的版本。3.8 是一个常用的版本,它支持许多最新的特性。如果你使用不同版本的 Docker Compose,确保此字段与其兼容。

  • services: 表示 Compose 文件中的一组服务,每个服务定义一个 Docker 容器。

    • web: 这是服务的名称。你可以使用任何描述性的名称。

      • build: 指定构建 Docker 镜像的方法。

        • context: 表示构建的上下文,即 Docker 将从哪个目录开始读取构建所需的文件。 . 指当前目录。
      • ports: 这是端口映射配置,用于将 Docker 容器内部的端口与主机上的端口连接。 -5000:5000: 表示将容器的 5000 端口映射到主机的 5000 端口。这意味着,当您访问主机的 5000 端口时,实际上是访问容器中的 5000 端口。

4. 使用 Docker Compose 启动 Flask 应用

最终目录结构如下,同一目录中创建了app.py, Dockerfile 和 docker-compose.yml 文件。

tree flask-app/
flask-app/
├── app.py
├── docker-compose.yml
└── Dockerfile
  • 1

使用 Docker Compose 来构建和运行 Flask 应用,这里切换root账号操作。

# 构建 Docker 镜像
docker-compose build

docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
flask-app-web   latest    d9ebd0ef4b34   21 minutes ago   1.01GB

#
 启动 Flask 应用
docker-compose up
  • 1

本地没有python:3.9时,docker回去镜像仓库中拉取。官方仓库拉取较慢,可以配置国内镜像源加速:

$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
      "https://hub-mirror.c.163.com/",
      "https://dockerproxy.com/"
  ]
}
EOF
$ sudo systemctl restart docker
  • 1

5. 访问应用

Docker 将会根据我们在 docker-compose.yml 文件中定义的配置启动一个容器,通过容器节点所在ip+端口访问,效果如下:

alt

注意:

关闭docker节点防火墙或者放行规则。

本文由 mdnice 多平台发布

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/512662
推荐阅读
相关标签
  

闽ICP备14008679号