CodeGym /课程 /Docker SELF /选择基础镜像

选择基础镜像

Docker SELF
第 14 级 , 课程 1
可用

7.1 基础镜像

基础镜像在创建Docker镜像中扮演重要角色,因为它们提供了构建的起点,并定义了运行你应用程序的环境。正确选择和配置基础镜像会显著影响最终镜像的性能、体积和安全性。在这节课里,我们会讨论如何选择和配置Docker的基础镜像。

基础镜像(或基础层)就是Docker镜像,它被用作创建新Docker镜像的初始层。它可能包括一个最小的操作系统、所需的工具和库,甚至可能是空的(scratch镜像)。选择基础镜像决定了你的容器中默认可用的资源和包。

选择基础镜像

在选择基础镜像时,需要考虑几个因素:

  1. 镜像大小: 较小的镜像下载更快,占用更少的磁盘空间,并且可以加速应用程序的部署。
  2. 支持与更新: 使用带有定期更新的官方镜像可以提供更高的安全性、漏洞修复以及运行的稳定性。
  3. 兼容性: 基础镜像应该包括你的应用程序需要正确运行的必要库和依赖。

流行的基础镜像

1. Alpine Linux

这是一个非常小巧的镜像,约5 MB大小。它非常适合需要最小操作系统的应用。不过开发者需要注意,Alpine中缺少许多标准库,因此有些应用可能需要额外配置。

dockerfile

FROM alpine:3.12

2. Debian/Ubuntu

这些是功能更全面的镜像,包含大量工具和库,非常适合需要更完整环境或熟悉Linux标准库的复杂应用程序。

dockerfile

FROM ubuntu:20.04 

3. Official Language Images

官方的编程语言镜像,例如Node.js、Python、Ruby等等。这些镜像已经包含了相应语言的开发和运行环境,简化了配置流程。

dockerfile

FROM node:14 

7.2 配置基础镜像

选择基础镜像后,需要根据你的应用需求对其进行配置。配置包括安装必要的包、复制应用文件和设置环境。

示例: 基于 Alpine Linux 的基础镜像配置

dockerfile


# 使用基础镜像 Alpine Linux
FROM alpine:3.12
        
# 安装必要的软件包
RUN apk add --no-cache python3 py3-pip
        
# 设置工作目录
WORKDIR /app
        
# 复制应用文件
COPY . .
        
# 安装依赖
RUN pip3 install -r requirements.txt
        
# 指定运行应用程序的命令
CMD ["python3", "app.py"]

在这个示例中,使用了基础镜像 alpine:3.12,安装了必要的包,复制了应用文件并安装了依赖。最终命令 alpine:3.12 指定了如何运行应用程序。

示例: 基于 Ubuntu 的基础镜像配置

dockerfile


# 使用基础镜像 Ubuntu
FROM ubuntu:20.04
        
# 更新并安装必要的软件包
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*
        
# 设置工作目录
WORKDIR /app
        
# 复制应用文件
COPY . .
        
# 安装依赖
RUN pip3 install -r requirements.txt
        
# 指定运行应用程序的命令
CMD ["python3", "app.py"] 

这个 Dockerfile 使用了镜像 ubuntu:20.04 并安装了 Python 和 pip。然后它复制应用文件并安装依赖,与之前的示例类似。

7.3 最佳实践

如何正确选择和配置基础镜像:

1. 选择最小镜像:从最小的镜像开始,这些镜像符合你的应用需求。这会减少最终镜像的大小并提高安全性。

2. 不安装额外的包:只安装应用真正需要的依赖。这会减小镜像大小并降低潜在漏洞的数量。

3. 清理包管理器的缓存:安装包后删除临时文件和缓存,让镜像更轻量化。

dockerfile


RUN apt-get update && apt-get install -y python3 python3-pip && rm -rf /var/lib/apt/lists/*

4. 使用多阶段构建:它允许将构建和运行阶段分开,有助于创建更轻量且更安全的镜像。

Terminal

        
# 构建阶段
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
        
# 最终阶段
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

5. 定期更新镜像:使用最新版本的基础镜像,以包含最新的安全修复和更新。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION