部署Docker的5个最佳实践

129 阅读3分钟

嘿,Docker 冒险家们!🚀 准备好扬帆进入 Docker 宇宙了吗?准备好接受简单而智能的容器建议——让 Docker 变得轻而易举!🐳


最佳实践🚩

让我们直接进入正题吧。这些是我在创建 Docker 容器时要遵循的 5 个最佳实践。


✅ 使用较小的基础图像

💡如果可能的话,永远不要使用大的基础图像。

在 Docker Hub 中选择任何镜像时,您将看到一堆带有操作系统的镜像。

最佳实践 1 - Docker 镜像与操作系统

如果所需的镜像有 Alpine 操作系统版本,请尽可能使用它。
Alpine 操作系统仅包含您所需的工具,与其他版本相比非常轻量级🔥。
通过这样做,您可以减少镜像本身所需的存储容量,并减少攻击面,因为它不会带有一大堆不必要的工具。 选择轻量级的 Alpine 镜像与完整的 Debian 镜像之间存在明显的性能差异。

Debian:🐢**

time docker run --rm debian sh -c "apt-get update && apt-get install curl"

real    0m27.928s
user    0m0.019s
sys 0m0.077s

Alpine:⚡**

time docker run --rm alpine sh -c "apk update && apk add curl"

real    0m5.698s
user    0m0.008s
sys 0m0.037s

✅ 始终使用.dockerignore文件

💡.dockerignore用于忽略容器不需要的文件。

不要推送不必要的构建文件夹(例如dist或 )build以及文件(例如README.mdDockerfile)。它们不需要运行我们的容器并占用不必要的空间。

所以用.dockerignore减小镜像大小。😉


✅ 使用特定的 Docker 镜像版本

💡选择基础镜像时,切勿选择最新标签。
使用特定版本。

不推荐写法❌

FROM python

你知道的,在将来,即使是最小的变化也可能意外引入错误,甚至更糟的是,破坏你的应用程序。🥲

推荐写法✅

FROM python:3.11

✅ 不要使用该root用户

💡运行容器时尽量使用最低权限的用户。

默认情况下,Dockerfile不指定用户时,使用root用户。您不想以 root 权限运行容器。❌

使用 root 访问权限运行容器使黑客更容易利用容器内的应用程序。

为了避免这种情况,创建一个特定的用户并使用它来运行所有进程。


# Setup group and user
RUN groupadd -r limiteduser && useradd -g limiteduser limiteduser
RUN chown -R limiteduser:limiteduser /app

# This switches the user from root to lowkey
USER limiteduser

✅ 使用多阶段构建

💡同样,这有助于减小镜像尺寸。

想象一下你要烤蛋糕:你收集材料、混合它们然后烘烤。
但如果你能够神奇地去除所有的搅拌碗,只保留最后的蛋糕呢?😲 这就是多阶段构建的作用!
它可以帮助按阶段构建容器,只保留必要的部分。
它允许你在构建过程中使用多个临时镜像,但只保留最后的镜像。
以下是一个示例 Dockerfile,使用了多阶段构建的方法。

# Stage 1: Build the application
FROM python:3.8 AS build
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .

# Stage 2: Create the final container
FROM python:3.8-slim
WORKDIR /app
COPY --from=build /app /app
CMD ["python", "app.py"]

那么,这就是本文的内容。希望这对你们每一个人都有用。🤗

如果你认为本文中未提及的任何其他有用提示,请随时在下面的评论部分中分享。🔥