Docker-compose 实战

news/2024/12/23 22:25:30/文章来源:https://www.cnblogs.com/xfbk/p/18625186

以下是一个使用 Docker-compose 启动 Flask 应用的示例:

项目结构

  app/|-- app.py|-- requirements.txt|-- Dockerfile|-- docker-compose.yml

app.py 文件内容

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello from Flask in Docker!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

requirements.txt 文件内容

Flask

Dockerfile 文件内容

# 基于官方 Python 3.9 镜像构建
FROM python:3.7
# # 设置工作目录
WORKDIR /app
# # 复制当前目录下的所有文件到容器内的 /app 目录
COPY . /app
# # 安装应用依赖
RUN pip install -r requirements.txt
# 暴露容器内应用监听的端口
EXPOSE 5000# 定义容器启动时执行的命令
CMD ["python", "app.py"]

docker-compose.yml 文件内容

version: '3'
services:flask-app:build: .ports:- "5000:5000"

在上述 docker-compose.yml 文件中:

  • version: '3' 表示使用 Docker-compose 的版本 3 语法。
  • services 下定义了一个名为 flask-app 的服务。
  • build:. 表示基于当前目录下的 Dockerfile 构建镜像。
  • ports 部分将容器内的 5000 端口映射到主机的 5000 端口,以便在主机上可以访问容器内的 Flask 应用。

在包含 docker-compose.yml 文件的目录下,执行命令 docker-compose up -d 即可在后台启动 Flask 应用容器。之后,可以在浏览器中访问 http://localhost:5000 来查看 Flask 应用的输出 Hello from Flask in Docker! 。如果想要停止容器,可以使用命令 docker-compose down

这个警告信息来自 Docker Compose,意味着 flask-app 服务的镜像是新建的,因为之前不存在。如果你对 Dockerfile 或其依赖的文件(比如 requirements.txt)做了更改,并希望这些更改生效,你需要重新构建镜像。

以下是重新构建服务镜像的步骤:

使用 docker-compose build

在包含 docker-compose.yml 文件的目录中,运行以下命令来重新构建镜像:

docker-compose build

这个命令会根据 docker-compose.yml 文件中定义的服务重新构建所有服务的镜像。

使用 docker-compose up --build

如果你想在重新构建镜像的同时启动服务,可以使用以下命令:

docker-compose up --build

这个命令不仅会重新构建服务的镜像,还会启动服务。

注意事项

  • 确保你在运行这些命令之前已经保存了对 Dockerfile 或其他相关文件的更改。

  • 如果你只想重新构建某个特定的服务,可以通过指定服务名称来构建:

    docker-compose build flask-app
    

    或者

    docker-compose up --build flask-app
    
  • 确保 docker-compose.yml 文件和 Dockerfile 位于同一目录下,并且 Dockerfile 中的指令正确无误。

按照这些步骤操作,你可以确保 flask-app 服务使用的是最新的镜像,包含了所有最新的更改。

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

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

相关文章

Doc for DevNow

DevNow 官方文档,介绍 DevNow 的使用方法及一些扩展内容,方便大家使用前言 DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 🎉🎉 首先庆祝下 DevNow star 在不久前过百,对我来说还是蛮有成就感的,感谢大家的支…

巧用mask属性创建一个纯CSS图标库

说明mask 是CSS中的一个属性,它允许开发者在元素上设置图像作为遮罩层。这个属性的强大之处,在于它可以接受多种类型的值,包括关键字值、图像值、渐变色,甚至可以设置多个属性值。 SVG(Scalable Vector Graphics,可缩放矢量图形)是一种基于 XML 的图像格式,用于定义二维…

绕过CPU:英伟达与IBM致力推动GPU直连SSD以大幅提升性能

绕过CPU:英伟达与IBM致力推动GPU直连SSD以大幅提升性能| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission | | -------------| -------------…

如何屏蔽博客园新出的标题栏?一行代码屏蔽博客园冒出的标题栏!

如何屏蔽博客园新出的标题栏?一行代码屏蔽博客园冒出的标题栏!| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission | | -------------| -----…

【Adobe Illustrator 2025下载与安装】

1、安装包 我用夸克网盘分享了「Illustrator 2025」, 链接:下载地址 2、安装教程(安装前关闭系统防护) 1) 下载软件安装包,双击Set-up.exe安装2) 修改安装目录,点击继续3) 安装完成,点击启动4) 启动程序

geoserver 上传sld文件后,格式变为ANSI,导致的一系列问题

windows平台下,以geoserver-2.21.5默认样式dem为例,在修改其中的某个值为中文后,出现报错:UTF-8序列的字节无效先不管,点击保存后出现中文字体字符编码错误问题。 到data_dir/styles找到对应的文件,发现sld文件变为ANSI格式(原是utf-8),另存为UTF-8格式后,重新查看样…

Vscode实现应用qss样式表

qss简介 qss(Qt Style Sheets)是一种基于CSS的样式语言,用于描述用户界面元素的外观和感觉。qss可以让用户在不修改代码的情况下,轻松地自定义应用程序的外观。 其语法基本如下: objectName{property: value; }其中,objectName是要设置样式的对象名,property是要设置的属…

【嵌入式开发】链接让你的程序在内存中找到正确位置

一、空间和地址分配 二、符号解析与重定位 三、静态库链接前面已经了解了ELF目标文件的内容,本篇文章的重点在于怎么将多个目标文件链接起来形成一个可执行文件。 现在链接器的链接过程主要分两步: 1、空间和地址分配 2、符号解析与重定位 下面来看一下,这两个步骤具体干了什…

校园二手交易平台UML图

类图:时序图: 买家买商品:买家撤回:用户更新:用户登录:卖家发布:用例图:

2 升力线理论

2 升力线理论 2.1 减阻 阻力 什么是阻力?阻力是阻止主要运动(位移向量)的力。 可以用一个简单的公式描述阻力: \[\begin{equation}\overrightarrow{R_2}-\overrightarrow{R_1}\propto\vec{T}-\vec{D} \end{equation} \]这里的R是反作用力(reactive force),T是推力(thru…

python网络编程之sse

服务端:from fastapi import FastAPI from fastapi.responses import StreamingResponse from fastapi.middleware.cors import CORSMiddleware import timeapp = FastAPI()# 允许所有来源的跨域请求 app.add_middleware(CORSMiddleware,allow_origins=["*"], # 允…