开始使用 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 命令列出正在运行的容器。
现在容器正在运行并提供一个很棒的 API(我们可以看到端口号打印到控制台),我们可以从外部访问它,即从主机,并开始向它发送查询吗?
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]
文章出处登录后可见!