Docker和Python

2020-12-28 07:04:54

当我们开发多个python项目时,我们需要使用所有项目的依赖项来配置我们的开发环境。当项目开发中有很多人时,这变得更加复杂。为此,您需要创建一个与其他人隔离的开发环境。感谢docker容器,我们可以做到这一点。

pydk├───requirements.txt└───src└───server.py

现在,我们认为我们的项目可能依赖于某些外部库,例如Flask。让我们准备一个名为requirements.txt的文件,其中包含一行:Flask == 1.1.2

现在,我们可以在本地运行并继续开发该项目,但是如果我们有其他需求冲突的项目,那么我们将破坏该项目或其他项目,因此,让我们看看如何在相同的容器中隔离该项目对于所有将要开发的开发人员。

现在我们需要创建一个Dockerfile(pydk / Dockerfile),其中包含合适的指令来构建我们的容器,以便它可以执行我们的python代码。

#来自python:3.9的基本映像#容器WORKDIR / pydk中的工作目录#将依赖项文件复制到工作目录COPY requirements.txt中。 #安装依赖项RUN pip install -r requirements.txt#将本地src目录的内容复制到工作目录COPY src /中。 #在容器启动CMD [" python" ," ./ server.py" ]

现在,我们运行命令来构建映像。当docker builder启动时,您可以看到我们在dockerfile中编写的所有步骤:

$ docker build -t mypy。将构建上下文发送到Docker守护进程4.608kB步骤1/6:从python:3.93.9:从库/ python6c33745f49b4中提取:拉完整ef072fc32a84:拉完整c0afb8e68e0b:拉完整d599c07d28e6:拉完整f2ecc74db11a:拉完整26856d31ce86:拉取完整a463ae07b5f3:拉取完整54f24c50f14e:拉取完整168ee6df05fe:拉取完整摘录:sha256:39c16d1a064c0239939d4ed52923b736c25b389e6ea439d5652b8fc9564ede76状态:已下载--3.9的更新图像d1eef6fb8dbe步骤2/6:WORKDIR / pydk->在ab2f8923ad12中运行删除中间容器ab2f8923ad12 --- bad3fb87e418第3/6步:COPY requirements.txt。 ---> eade175d7095步骤4/6:运行pip install -r requirements.txt --->在de2b7fcd2c6d中运行收集Flask == 1.1.2下载Flask-1.1.2-py2.py3-none-any.whl(94 kB)收集click> = 5.1下载click-7.1.2-py2.py3-none-any.whl (82 kB)收集其危险> = 0.24下载其危险-1.1.0-py2.py3-none-any.whl(16 kB)收集Jinja2> = 2.10.1下载Jinja2-2.11.2-py2.py3-none-any .whl(125 kB)正在收集MarkupSafe> = 0.23下载MarkupSafe-1.1.1.tar.gz(19 kB)正在收集Werkzeug> = 0.15下载Werkzeug-1.0.1-py2.py3-none-any.whl(298 kB)用于收集的包裹的构建轮:MarkupSafe用于MarkupSafe的构建轮(setup.py):已启动用于MarkupSafe的构建轮(setup.py):状态为&d39; done'完成为MarkupSafe创建的滚轮:filename = MarkupSafe-1.1.1-cp39-cp39-linux_x86_64.whl size = 32240 sha256 = 6fbda6c15fe2abefc6c8f4ec2ac66c421b1cf997c1a53a532a39bbebc8083860存放在目录中:/root/.cache/pip/fc04e/e4/6/19/e00e00f6e7e7e7e7e7e7e7e7e7e7e7e4e/e/email软件包:MarkupSafe,Werkzeug,Jinja2,其危险,单击,Flask成功安装Flask-1.1.2 Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 itsdangerous-1.1.0删除中间容器de2b7fcd2c6d --- > 595ceaa19d29步骤5/6:COPY src /。 ---> 98294355a272步骤6/6:CMD [" python&#34 ;," ./ server.py" ] --->在1fb2a61f97ce中运行删除中间容器1fb2a61f97ce ---> 09fd1053a1c1成功构建09fd1053a1c1成功标记了mypy:latest

$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmypy最新09fd1053a1c1 15分钟前896MBpython 3.9 d1eef6fb8dbe 8天前885MB

$ docker run -d -p 5000:5000 mypy487c215ec0cc2b44c1612c0aadbd3f1f47c32a0b29273da3dabf77351717852c $ docker psCONTAINER ID图像命令创建的状态端口名称S487c215ec0cc mypy&#34&python; /。 28秒前向上27秒0.0.0.0:5000->5000/tcp crazy_hermann $ curl http:// localhost:5000

我们为python应用程序创建了一个小型开发环境。现在,我们可以连接到我们的映像并继续开发应用程序,而不会影响我们的本地环境。