通过docker commit构建自定义镜像
- Linux
- 2025-10-22
- 14热度
- 0评论
基于 Ubuntu 基础镜像构建包含 ping、tracert、fping、mtr、nmap 等网络工具的自定义镜像的详细示例
文章目录
- 构建自定义镜像
- 验证自定义镜像
- 临时运行自定义镜像
- 后台运行自定义镜像
构建
首先获取官方 Ubuntu 镜像(以最新版为例)
docker pull ubuntu:latest启动一个基于 Ubuntu 镜像的容器,并进入命令行交互模式(--name 为容器命名,方便后续操作)
docker run -it --name network-tools-temp ubuntu:latest /bin/bash
# -it:交互式终端模式(确保能输入命令)
# --name network-tools-temp:给容器起一个临时名称
# /bin/bash:进入 bash 终端在容器的 bash 终端中,执行以下命令安装工具(需先更新 apt 源,否则可能找不到包)
# 更新 apt 源(必须先执行,否则可能无法安装包)
apt-get update
# 安装所需工具(逐个对应命令):
# - ping:来自 iputils-ping 包
# - tracert:Ubuntu 中对应 traceroute 命令,来自 traceroute 包
# - fping:来自 fping 包
# - mtr:来自 mtr 包
# - nmap:来自 nmap 包
apt-get install -y \
iputils-ping \
traceroute \
fping \
mtr \
nmap在容器内执行以下命令,确认工具已正常安装
# 验证 ping
ping -c 2 www.baidu.com
# 验证 traceroute(对应 tracert 功能)
traceroute www.baidu.com
# 验证 fping
fping www.baidu.com
# 验证 mtr(按 q 退出)
mtr www.baidu.com
# 验证 nmap
nmap --version
退出容器并提交为新镜像
# 退出容器终端
exit
# 用 docker commit 将修改后的容器提交为新镜像
docker commit network-tools-temp network-tools:v1验证
在 Docker 中,查看本地镜像
docker images
# 或
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
network-tools v1 72aed6a873a6 31 minutes ago 358MB执行后会显示本地所有镜像的列表,包含以下信息:
- REPOSITORY:镜像的仓库名称(如 ubuntu、network-tools)
- TAG:镜像的标签(版本标识,如 latest、v1)
- IMAGE ID:镜像的唯一 ID(简写形式)
- CREATED:镜像的创建时间
- SIZE:镜像大小
临时运行自定义镜像
- docker exec 会在运行中的容器内执行指定命令,并将输出返回给宿主机终端。
- 容器必须处于运行状态(可通过 docker ps 查看运行中的容器)
- --rm 容器执行完命令后自动删除(避免残留无用容器)
# 格式:docker run --rm 镜像名 容器内的命令 [参数]
docker run --rm network-tools:v1 traceroute www.baidu.com后台运行自定义镜像
Docker 容器的运行依赖于 “主进程”:如果主进程退出,容器会立即停止。
因此,后台运行容器时,必须指定一个不会自动退出的主进程(如 tail -f /dev/null、sleep infinity 等),确保容器持续运行。
通过这种方式,network-tools 容器会在后台常驻,随时可以通过 docker exec 调用其中的 traceroute、mtr 等工具,无需每次临时启动容器。
# 基于之前构建的 network-tools:v1 镜像,用以下命令在后台运行容器
docker run -d --name network-tools network-tools:v1 tail -f /dev/null
# 验证容器是否在后台运行
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5c45c309ba9 network-tools:v1 "tail -f /dev/null" 30 minutes ago Up 30 minutes network-tools使用后台容器中的工具
it:在执行交互式命令(如 mtr、bash)时必须添加,确保终端能接收输入
# 示例:执行 traceroute
docker exec network-tools traceroute www.baidu.com
# 示例:执行 mtr(按 q 退出,输出会显示在宿主机终端)
docker exec -it network-tools mtr www.baidu.com # 带 -it 支持交互(如 mtr 需要键盘操作)
# 示例:进入容器交互终端(临时操作)
docker exec -it network-tools /bin/bash停止 / 重启后台容器
docker stop network-tools # 停止容器
docker start network-tools # 重启已停止的容器(仍会在后台运行)
docker rm network-tools # 删除容器(需先停止)