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)

这是一个非常简单的 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"]

3. 编写docker-compose.yml文件

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

version: '3.8'

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

字段说明:

  • 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

使用 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

本地没有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

5. 访问应用

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

alt

注意:

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

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/660271.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23 重构:烟囱式、平台化、中台化的架构

上一讲里&#xff0c;我们介绍了两大类型的系统升级重构方案&#xff0c;还介绍了如何进行重构版本的上线&#xff0c;以及如何平滑地完成新老版本切换的方案。在本讲里&#xff0c;将会具体介绍如何判断系统发展到什么阶段需要重构&#xff0c;以及如何实施重构。 系统稳定性…

C语言实战项目--贪吃蛇

贪吃蛇是久负盛名的游戏之一&#xff0c;它也和俄罗斯⽅块&#xff0c;扫雷等游戏位列经典游戏的⾏列。在编程语⾔的教学中&#xff0c;我们以贪吃蛇为例&#xff0c;从设计到代码实现来提升大家的编程能⼒和逻辑能⼒。 在本篇讲解中&#xff0c;我们会看到很多陌生的知识&…

【Excel】excel计算相关性系数R、纳什效率系数NSE、Kling-Gupta系数KGE

对于采用的数据&#xff1a; B2:B10958是观测值的所在范围 C2:C10958是模型计算值的所在范围 一、相关系数R是用来衡量两个变量之间线性关系强度和方向的统计量。在水文学和气象学中&#xff0c;常用的相关系数是皮尔逊相关系数&#xff08;Pearson correlation coefficient&am…

在Primavera P6 中维护自定义活动栏

前言 自从 Henry Gantt 在 1910 年左右提出这个想法以来&#xff0c;以图形方式显示项目进度表并沿时间刻度显示条形图一直延续到当今最复杂和流行的项目进度系统中。在本文中&#xff0c;我们将仔细研究 Primavera P6 Professional 中的甘特图&#xff0c;并探索一些自定义其…

数据结构可视化(适合考研党)

废话不多说传送门 还在疑惑平衡二叉树、红黑树、B树、B树怎么插入构建的吗&#xff0c;不要慌张&#xff0c;这个网站会一步一步来演示.&#xff0c;听了咸鱼的课还不够&#xff0c;需要自己动手模拟一下各种数据结构的CRUD&#xff01;&#xff01;

恩智浦如何使用DITA

▲ 搜索“大龙谈智能内容”关注公众号▲ 作者 | John Walker - NXP销售和市场营销业务分析师 2013年4月18日 作为恩智浦半导体公司销售和市场部的业务分析师&#xff0c;我负责恩智浦半导公司产品信息的数据/内容模型、流程和工具。我来自英国&#xff0c;但自2000年以来一…

latex使用bib引用参考文献时,正文编号顺序乱序解决办法,两分钟搞定!

一、背景 用Latex写文章时&#xff0c;使用bib添加参考文献是一种最为简便的方式。但有的期刊模板&#xff0c;如机器人顶会IROS&#xff0c;会出现正文参考文献序号没按顺序排列的情况&#xff0c;如下图所示。按理说文献[4]应该是文献[2]&#xff0c;[2]应该是[3]&#xff0…

带环链表及例题

环形链表&#xff0c;链表中的尾节点指向链表中的某个节点导致形成循环的链表。 通过图可以这样表示。 我们一般采用快慢指针的方式解决带环链表的题目&#xff0c;下面直接上例题 环形链表 力扣链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 让我们判断一个…

JAVA同城服务美容美发到店服务上门服务系统源码微信小程序+微信公众号+H5+APP

随着科技的飞速发展&#xff0c;互联网和移动互联网已经渗透到我们生活的方方面面&#xff0c;同城服务美容美发到店服务上门服务系统应运而生&#xff0c;为整个行业带来了巨大的变革和无限的可能。该系统的重要性和优势不言而喻&#xff0c;对于行业发展和用户需求的影响深远…

偏自相关系数的等价定义

第k个回归系数的值 原始定义

Unity 递归实现数字不重复的排列组合

实现 private void Permutation(List<int> num, int leftIndex, List<string> strs) {if (leftIndex < num.Count){for (int rightIndex leftIndex; rightIndex < num.Count; rightIndex){Swap(num, leftIndex, rightIndex);Permutation(num, leftIndex 1…

嵌入式全栈开发学习笔记---vim编辑器

目录 进入vim编辑器 Shiftzz退出编辑器 vim的三种模式 命令模式 插入模式 yy复制一行 p粘贴一行 nyy复制多行 dd剪切一行 ndd剪切多行 x删除一个字符 nx删除多个字符 u撤销上一次操作 shiftg从第一行如果快速调到最后一行 gg回到第一行 pagedown & pageup往…