如何修改 Docker 镜像配置 / 如何自定义 Docker 镜像

Docker 镜像是 Docker 容器的基础,它包含了程序运行所需的所有文件、库和配置。对于想要使用或者定制 Docker 镜像的用户来说,了解如何修改 Docker 镜像配置是非常重要的。本文将介绍如何修改 Docker 镜像配置,以便满足个人或者项目的需求。

本次教程配置环境:

  • 主机系统:debian 12.0 操作系统
  • 安装软件:docker
  • 拉取镜像:docker pull ubuntu:22.04 (本文以此镜像为例)

首先了解一下什么是 Dockerfile ?

简单来说 Dockerfile 就是一个文本文件,里面包含了一系列指令,用于构建 Docker 镜像。配置好这个文件后,我们运行构建镜像的指令,就会根据这个文本文件里面的命令来创建新的镜像。

配置编辑 Dockerfile 文件

我们来创建一个名为 Dockerfile 的文件,以 root 用户登录终端,输入下列命令:

vi Dockerfile

然后输入下面的内容,保存退出,这样编辑后的 Dockerfile 文件就出现在 root 目录下面。

FROM ubuntu:22.04
RUN apt-get update && \
    apt-get full-upgrade -y && \
    apt-get install sudo -y && \
    apt-get install init -y && \
    apt-get install wget -y && \
    apt-get install systemd-sysv -y && \
    apt-get install curl  -y && \
    apt-get install tzdata -y && \
    apt-get install ufw -y && \
    apt-get install locales -y && \
    apt-get install procps -y

说明:以上 Dockerfile 文件内容的意思是,更新数据源列表、安装更新、安装一些常用的软件包。

Dockerfile 命令说明

FROM:选择要定制的镜像,这里的 ubuntu:22.04 就是定制需要的基础镜像。

RUN:用于执行后面跟着的命令行命令。相当于在终端操作的 shell 命令
注意:指令 RUN 每执行一次都会在 docker 上新建一层。过多无意义的层会造成镜像臃肿过大。应尽量简化。

创建新的镜像文件

运行下面的命令,就会执行 Dockerfile 里面的命令

docker build -t ubuntu:new .

等待完成后,输入 dockers images 查看镜像:我们已经得到一个新的镜像:ubuntu:new

如何修改 Docker 镜像配置 / 如何自定义 Docker 镜像插图

Dockerfile 基础命令

FROM 选择要定制的镜像,这里的 ubuntu:22.04 就是定制需要的基础镜像。

RUN 用于执行后面跟着的命令行命令。相当于在终端操作的 shell 命令,有以下俩种格式:

# shell格式:该命令以 shell 形式运行,Linux 默认为 /bin/sh -c, Windows 默认为 cmd /S /C
RUN <command>

# exec格式:由于 exec 格式会被解析成为 json 数组,所以,必须使用双引号
RUN ["executable", "param1", "param2"]

由于每次使用 RUN 指令都会生成新的层,所以建议多个 Shell 在同一个 RUN 指令中声明。例如:

RUN apt-get install wget -y
RUN apt-get install systemd-sysv -y
RUN apt-get install curl  -y

以上执行会创建 3 层镜像。可简化为以下格式:

RUN apt-get install wget -y && \
    apt-get install systemd-sysv -y && \
    apt-get install curl  -y

COPY 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。格式:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

[--chown=:]:可选参数,用户改变复制到容器内文件的拥有者和属组。

<源路径>:源文件或者源目录,这里可以是通配符表达式。例如:

COPY 123* /testdir/
COPY 123?.txt /testdir/

<目标路径>:容器内的指定路径,路径不存在的话,会自动创建。

ADD 复制指令,和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

  • 优点:在 <源文件> 为 tar 压缩文件时,压缩格式为 gzip, bzip2 及 xz 时,会自动复制并解压到 <目标路径>
  • 缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

标签

发表评论