互联网技术 / 互联网资讯 · 2024年3月16日

使用 Docker 运行 Python 镜像的容器化核心技术教程

在前面的模块中,我们已经创建了示例应用并编写了用于构建镜像的 Dockerfile。通过执行 Docker build 命令,我们生成了镜像。现在,我们有了镜像,可以启动容器并验证应用是否正常运行。

容器是一类普通的操作系统进程,但具备独立的文件系统、独立的网络以及与主机隔离的进程树结构,因此实现了进程级别的隔离。

要在容器内运行镜像,我们使用 docker run 命令。该命令需要指定镜像名称等参数。让我们启动镜像并确认应用是否正确启动。请在终端执行以下命令。

$ docker run Python-container

执行后你可能不会立即返回命令提示符。这是因为应用在容器中以一个 REST 服务器的形式运行,循环等待请求,直到手动停止容器才会释放控制权。

接着打开一个新终端,使用 curl 命令向服务器发起请求。

$ curl localhost:5000

curl: (7) Failed to connect to localhost port 5000: Connection refused

如上所示,请求被拒绝,说明容器中的服务器尚未暴露到主机端口。这是预期行为,因为容器内部网络与主机网络是隔离的。为了让外部可以访问,需要在启动时映射端口。

要停止运行中的容器,可以在当前会话中按 ctrl-c。这会使你返回到终端提示符。

要将容器端口对外暴露,我们在命令中使用 –publish(简写 -p) 参数。该参数格式为 host_port:container_port。例如,要把容器内的 5000 端口映射到主机的 3000 端口,可传递 3000:5000 给 –publish 标志。

如果我们希望之前的请求仍然在端口 5000 上工作,可以将主机端口映射为 5000,对应容器的 5000。

$ docker run –publish 5000:5000 Python-container

现在,请重新在新终端执行 curl 命令测试。

$ curl localhost:5000

Hello, Docker!

成功!现在可以通过主机的 5000 端口访问容器内运行的应用。返回到运行容器的终端,通常会看到日志中记录了收到的请求信息。

[31/Jan/2021 23:39:31] “GET / HTTP/1.1” 200 –

如需停止容器,请再次按 Ctrl-C。