嘿,Docker 冒险家们!🚀 准备好扬帆进入 Docker 宇宙了吗?准备好接受简单而智能的容器建议——让 Docker 变得轻而易举!🐳
最佳实践🚩
让我们直接进入正题吧。这些是我在创建 Docker 容器时要遵循的 5 个最佳实践。
✅ 使用较小的基础图像
💡如果可能的话,永远不要使用大的基础图像。
在 Docker Hub 中选择任何镜像时,您将看到一堆带有操作系统的镜像。
如果所需的镜像有 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.md和Dockerfile)。它们不需要运行我们的容器并占用不必要的空间。
所以用.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"]
那么,这就是本文的内容。希望这对你们每一个人都有用。🤗
如果你认为本文中未提及的任何其他有用提示,请随时在下面的评论部分中分享。🔥