容器在受欢迎程度和用法上不断提高,老实说,它确实解决了一个大问题,这就是为什么每个人都继续爱心和采用它们的原因。
将我们的应用程序从一个环境转移到另一个环境的最大问题之一是通过容器解决的,基本上是什么,就像名称所表明的那样,它是一个容器,从我们的应用程序依赖关系到操作系统,我们应用程序将在上面运行,一件一件。
基本上,我们可以在任何环境中运行此容器,并且我们的应用程序将运行,并且对于我们的应用程序的依赖性,即使要更新它们,并且我们的应用程序中的应用程序都过时了,仍然对我们有用。
容器的美丽不断增加,因为那些采用的容器现在不必担心,而是完全正确的,但是您明白了。
内容
-
什么是docker
-
获得Docker
-
构建我们的Web应用
-
什么是dockerfile
-
dockerfile配置
-
docker build
Docker
Docker是一个开源平台,使开发人员能够构建,部署,运行,更新和管理容器标准化的可执行组件,可将应用程序源代码与操作系统相结合(OS) )在任何环境中运行该代码所需的库和依赖项。
因此,要容忍一个应用程序,我们需要Docker,它既是我们将要使用的平台,也是一个工具。
安装Docker
当然,要使用docker,如果您还没有,我们需要在计算机上安装它。
单击下面的链接,将您带到Docker安装页面。
Install Docker Desktop | Docker Documentation
确保在其他方面仔细遵循该指令,以使Docker正确设置并准备就绪。
扩展我们的烧瓶应用程序
我们将使用烧瓶构建和容器化的Web应用程序,这将非常简单,实际上,它只是一个Hello World Web应用程序。
或者,如果您对更具挑战性的东西感兴趣,则可以遵循我的Restful API教程,该教程也是用烧瓶构建的,并尝试将其扩展到这一点。我认为这会很有趣。
继续前进,我们将创建Hello World应用程序并对其进行扩展。
烧瓶你好
我们的项目结构看起来像这样:
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello World"
if __name__ == '__main__':
app.run()
当然,就是这样。我认为代码非常简单,不需要解释。
如果您测试了此代码,则应该在浏览器中有一个Hello World。
greate,现在已经确认我们的应用程序正常工作,我们可以对代码进行一些修改。只是有点。
app.py
import os
------
......
------
if __name__ == '__main__':
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
我所做的就是修改app.run
以便在我们的容器中动态运行。
通过从可能是动态的环境变量中获取端口,我们的应用程序可以在将要运行的端口上具有更大的灵活性。
对于主机,它设置为'0.0.0.0'
,这意味着该应用程序将在所有可用的网络接口上收听。这允许从容器或服务器外部访问应用程序。
如果我们再次运行我们的应用程序,它应该可以正常工作而没有任何问题。
需求.txt
要使我们的应用程序的依赖关系与Docker一起包装,我们当然需要在容器的构建过程中获取或安装它们。
就像每个python项目一样,我们将把应用程序的要求写入要求。txt文件。
要求.txt
Flask
当然,这是我们申请的唯一要求。如果还有更多,它们将在新线路中分开。您还可以添加要安装的软件包的特定版本。
示例
Flask==2.0.0
Jinja
Tailwindpie==0.1.1
如果您使用虚拟环境,所有这些都可以更容易。您需要做的就是激活环境并运行。
pip freeze > requirements.txt
此命令将获取您已安装的所有PIP软件包,然后将它们转储到文件中。
Dockerfile
dockerfiles是包含构建Docker映像所需的说明的文本文件。它可能包括用于安装某些库,将源代码和配置文件复制到图像的说明以及设置环境变量。
您创建此文件而无需任何扩展名,即.txt或其他任何内容。对于我们的申请,我们将有:
dockerfile
# Base image
FROM python:alpine
# Creating work directory in docker
WORKDIR /usr/app
# Copying files to docker
ADD . '/usr/app'
#RUN pip install flask
RUN pip install -r requirements.txt
# Starting application
CMD ["python", "app.py"]
让我们通过每个步骤了解发生了什么:
-
FROM python:alpine
:此行以“ Alpine”版本拉动官方的Python图像。高山是基于高山Linux分布的基础Python图像的较小,轻巧的变体。这将是我们的应用程序运行的操作系统。 -
WORKDIR /usr/app
:这将Docker映像中的工作目录设置为“/usr/app”。任何后续命令将从此目录执行。 -
ADD . '/usr/app'
:此行将当前目录(dockerfile驻留的地方(即我们的项目目录)中的所有文件和目录复制到docker Image中的“/usr/app”目录中。 -
RUN pip install -r requirements.txt
:此命令安装我们的“需求.txt”文件中列出的python软件包。将项目依赖关系保持在“ unignts.txt”文件中是一种常见的做法,并且该行可确保我们的依赖项在Docker Image中获取并安装。 -
CMD ["python", "app.py"]
:这是从此图像启动容器时运行的默认命令。它指定应执行Python脚本“ app.py”。这将运行我们的脚本并启动我们的烧瓶服务器。
构建图像
最后,我们处于构建阶段,我们要做的就是:
-
导航到您的项目目录并打开命令提示符或终端。
-
如果您在VScode中,则需要做的就是打开集成的终端。您可以使用快捷方式
Crtl + Shift + `
-
运行
docker build
命令。
docker build -t flask_hello_world .
让我解释ð«。
-
-t 用名称标记图像,在我们的情况下,
-
。告诉Docker在当前目录中寻找Dockerfile。
如果您不在项目目录/文件夹中,则可以指定路径。
完成构建过程后,您可以通过运行:
来验证图像是否创建图像
docker images
在那里我们可以看到我们新创建的flask_hello_world
映像。
测试我们的Docker图像
最后,我们可以测试我们的图像。现在构建了图像,它可以在您的计算机上全球可用,即您不必在项目目录中访问图像。
要测试我们的图像,运行:
docker run -p 5000:5000 flask_hello_world
此命令当然会运行我们的容器,但是让我在继续之前解释一下。
- -p 5000:5000 此命令在我们的容器中设置应用程序以收听端口 5000
结论
最后,我们实现了我们打算做的事情,即建立和容器化Python Web应用程序。
通过封装应用程序及其依赖项,容器肯定消除了“它在我的机器上工作” dilemmað®ð®,简化了部署过程并确保一致性开发,测试和生产环境。反过来,这导致了更快的开发周期,减少了停机时间,并改善了开发和运营团队之间的协作。
快乐的编码!