嘿!让我们来了解一下如何在Docker上托管Python。在本教程结束时,你将知道如何创建一个docker容器,将你的应用程序添加到容器中,并在不干扰系统进程的情况下保持它的运行。
一旦你都准备好了,你就可以开始了!
什么是Docker容器?
在理解容器的概念之前,让我们先讨论和理解容器的出现。
在虚拟机大行其道的年代,所有的应用程序都被托管在虚拟机上。应用程序的所有者不得不为那些未被充分利用的资源支付巨额费用,但却被他们封锁了通往应用程序的交通。这并不能维持很长时间,因为这并不方便。此外,所有与应用程序相关的配置文件都需要存储在这个单一的虚拟机上。
这就是容器出现的时候。
随着容器的出现,出现了为你的使用付费的概念。
基本上,Docker向我们介绍了容器的概念。容器将应用程序和其所有相关的配置文件打包到一个单独的隔离环境中。它将所有与系统相关的软件需求、代码和库完全折叠到一个独立的空间。
有了容器,我们只需为我们在应用程序运行期间利用的资源付费。也就是说,我们不需要封锁资源,因为容器会随着你的应用程序扩展资源的使用。
了解了容器之后,现在让我们尝试在Docker容器上托管一个简单的Python应用程序。
在Docker上运行Python的步骤
将应用程序托管到容器中的整个过程通过以下方案运行
- 创建一个Docker文件
- 构建一个镜像
- 作为一个容器运行应用程序
第1步 - 创建一个Dockerfile
Dockerfile是与计划托管的应用程序有关的配置需求的实际蓝图。我们可以包括所有需要执行的系统级命令,以使你的最终应用蓝图准备好进行处理。它可能包括一些应用程序所需的附加组件或库。
demo.py
data = list()
data = ['JournalDev','AskPython']
for x in lst:
print(x)
Dockerfile-
FROM python:3
ADD demo.py /
CMD [ "python", "./demo.py" ]
Dockerfile提供了一些指令,如下所示
- FROM - 它为即将到来的指令设置了基础镜像。在这个例子中,Python版本被设置为3作为基础镜像层。Dockerfile在执行指令时从Docker Hub中获取基础镜像,Docker Hub是一个开源的镜像库。
- ADD- 通过ADD指令,我们可以将指令以文件、目录甚至是URL的形式灌输到基础dockerfile中。
- CMD - 这个指令可以让我们声明一个位置,让我们有一个命令来运行特定的python或任何bash/sh脚本。
第2步 - 建立一个Docker镜像
在建立了Docker文件后,重要的是我们要为生产准备一个基础。也就是说,我们需要在Dockerfile中定义的所有命令中创建一个基础层,以使容器运行并表现良好。为此,我们使用以下格式的命令创建一个Docker Image。
语法-
docker build -t image-name:tag .
例子
docker build -t python-image:1.0 .
输出-
[+] Building 5.4s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 31B 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/python:3 5.0s
=> [internal] load build context 0.1s
=> => transferring context: 31B 0.0s
=> [1/2] FROM docker.io/library/python:
第3步--运行镜像(将应用程序托管在容器中)
这些镜像(以上创建)实际上是独立于任何底层配置的。另一方面,容器需要一个镜像作为基础配置来运行你的应用程序的实例。同样,我们需要点燃运行容器的过程,我们的应用程序实例将通过该容器运行。
我们利用docker run 命令来实际启动和运行Docker文件中提到的配置的容器。
例子
docker run python-image:1.0
输出
JournalDev
AskPython
我们甚至可以通过安装 Docker社区版应用程序来检查这个正在运行的容器是否存在于桌面上,如下图所示(用于示例)。
Docker社区版
总结
到此为止,我们已经走到了这个话题的尽头。如果你遇到任何问题,请随时在下面评论。
如果想了解更多与Python编程相关的文章,请继续关注我们。
在那之前,祝你学习愉快! 🙂