站点图标 AI技术聚合

开始使用 Docker 容器的 10 个命令

开始使用 Docker 容器的 10 个命令

高枕无忧地构建、交付和部署您的应用程序

Docker 是一个很好的工具,可以轻松开发应用程序、将它们装入容器并在任何地方部署它们。

在我作为数据科学家的工作中,每当我需要将具有多个服务(例如后端、数据库、前端等)的应用程序打包成我可以运行的映像时,我经常使用 Docker,更新、停止、共享并确定将其部署到任何云:IT 世界以前从未见过如此灵活。

在这篇文章中,我分享了一组我经常用来操作 Docker 容器的 Docker 命令。虽然这不是对 Docker 的全面介绍,但它至少应该为您提供做伟大事情的基础知识。

👉 如果您是一名数据科学家,计划转向生产并在本地笔记本之外为他的应用程序提供第二次生命,那么学习 Docker 是您的最佳选择。

我希望你们都准备好了。让我们潜入🏊

这篇文章假设您对 Docker 的基本概念有一点熟悉,例如 Docker 客户端和守护进程、图像、容器、主机、Dockerfile 等。如果您不熟悉这些术语,我强烈建议您查看官方文档的概述部分:这是一个两分钟的阅读,上衣。[0]

1 — 构建 Docker 镜像

“镜像是一个只读模板,带有创建 Docker 容器的说明。通常,一个图像基于另一个图像,并带有一些额外的自定义。例如,您可以构建一个基于 ubuntu 镜像的镜像,但会安装 Apache Web 服务器和您的应用程序,以及使您的应用程序运行所需的配置详细信息。”
— Source: Docker docs.[0]

为了学习,我们将构建和使用自定义 Docker 映像,而不是从注册表中提取一个(将注册表视为存储 Docker 映像的中心位置,类似于 Github,但用于映像)

此图像封装了 Python 3.7 环境,它拥有在端口 80 上运行 Flask API 所需的一切。

要构建这个 Docker 镜像,我们需要在 Dockerfile 中定义一系列指令:本文不会介绍 Dockerfile 命令的细节。要了解有关它们的更多信息,我建议您查看此链接。[0]

我们将使用的 Dockerfile 如下:它基本上是一组顺序指令,包含用户在命令行上调用以组装图像的所有命令。

FROM python:3.7-slim-buster

WORKDIR /usr/src/app

COPY requirements.txt ./

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 80

CMD [ "python", "app.py" ]

让我们逐行了解这个 Dockerfile 的作用:

  • 它首先拉着一个封装了轻量级的Python 3.7环境中的基站图像[0]
  • 它设置了 Flask 应用程序将在容器上运行的工作目录
  • 它将 requirements.txt 文件从主机复制到容器(即在工作目录中)
  • 它运行 pip 来安装 Python 要求
  • 它复制当前目录的内容(尤其是app.py文件到容器中)
  • 表示容器在运行时正在监听网络端口 80
  • 它在运行图像时执行 Python 代码

我们将运行的 Python 代码是一个简单的 hello-world Flask API,没什么花哨的。

from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello_world():
    return "

Hello, World!

" app.run(host="0.0.0.0", port=80)

要构建图像并使用特定名称标记它(我选择了 flask_image ),请运行以下命令:

docker build -t flask_image

一旦构建开始执行,它就会遍历 Dockerfile 中的每个步骤。

这里肯定发生了很多事情,所以我将跳过细节,以免您不知所措。但是,如果您有兴趣,我建议您查看此部分。[0]

2 — 运行 Docker 容器

“容器是图像的可运行实例。您可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,将存储附加到它,甚至可以根据其当前状态创建新映像。” — 来源:Docker 文档。[0]

构建 Docker 映像后,您可以首先检查它在文件系统上的存在。

然后,您可以运行它:这将创建一个容器。如果再次运行映像,这将创建另一个容器,依此类推。事实上,正如官方文档所指出的,容器只不过是图像的运行实例。

让我们通过运行我们的镜像来运行一个容器:

正如预期的那样,这个容器触发了一个监听 TCP 端口 80 的 Flask 服务器。

伟大的!但似乎我们无法在不杀死容器的情况下退出控制台。如果我们可以在后台运行容器,那就太好了。

3 — 在后台运行一个容器

大多数时候,您的容器需要作为服务在后台运行。这可以是我们正在使用的 API,也可以是数据库、代理服务器、React 应用程序等。

下面是你的做法:你只需添加 -d (用于分离)选项:

docker run -d flask_image

要检查容器是否确实在后台运行,您可以使用 ps Docker 命令列出正在运行的容器。

现在容器正在运行并提供一个很棒的 AP​​I(我们可以看到端口号打印到控制台),我们可以从外部访问它,即从主机,并开始向它发送查询吗?

4 – 映射容器和主机之间的端口

为了使我们的 Flask API 可以从主机访问,我们需要将当前容器的端口 (80) 映射到主机上的可用端口。让我们选择,说…… 1234

语法如下:

docker run -p 1234:80 flask_image

如果我们点击 http://localhost:1234,Chrome 表示 API 确实可以从主机访问。[0]

如果我们多次点击刷新按钮,我们可以在容器上看到 HTTP 日志。

您还可以通过添加 -d 选项在后台运行此命令:

docker run -d -p 1234:80 flask_image

现在您已经拥有了一个可从容器外部访问的正在运行的 API。

5 — 停止容器运行

假设你在后台运行一个容器,现在你想停止它。

首先,使用 ps 查找它的 id:

并在以下命令中使用它:

docker stop 11bca8ee1f8c

通过再次运行 ps,容器不再可见。

但是,您仍然可以将其视为已停止的容器(以及其他先前已停止的容器):

docker ps -a

6 — 启动一个停止的容器

给定它的 id,你可以使用 docker start 启动一个停止的容器

你只需要提供它的 id:

docker start 11bca8ee1f8c

7 — 移除一个停止的容器

一旦容器停止并且您需要将其删除,您首先需要使用 docker ps -a 获取其 ID,然后启动 docker rm 命令。

docker rm 11bca8ee1f8c

8—删除所有停止的容器

现在,如果您需要删除所有已停止的容器并且不想手动执行此操作,则可以使用 prune 命令。

docker container prune

9 — 运行一个容器并在它停止后将其移除

如果要在容器停止后自动删除它,可以在运行时使用 –rm 选项。

这是提供清理的好选择。

docker run --rm -d -p 1234:80 flask_image

10 — Rename a container

如果出于某种原因需要重命名容器,可以使用 docker rename 命令来完成。

Conclusion

我们刚刚了解了容器是什么、它们做什么以及如何使用简单(且有用)的命令来使用它们的表面。

但是,由于容器通常具有单一职责,因此它们通常与其他容器组合以形成一个完整的堆栈:这是通过 docker-compose 实现的,我们可能会在以后的文章中对此进行研究。[0]

这就是我今天的全部内容。直到下一次获得更多的编程技巧和教程。 👋

新媒体?您可以以每月 5 美元的价格订阅并解锁关于各种主题(技术、设计、创业……)的无限文章。您可以通过单击我的推荐链接来支持我[0]

文章出处登录后可见!

已经登录?立即刷新
退出移动版