核心思路

给已经构建好的 Docker 镜像安装软件包,主要有两种核心思路:一种是基于原有镜像构建一个新镜像,另一种是临时进入容器进行安装。

方法一:使用Dockerfile构建新镜像(推荐)

这是最符合Docker最佳实践的方法,具有可重复性、易于版本管理。

  1. 准备Dockerfile:在一个空目录中,创建一个名为 Dockerfile 的文件。假设你原有的镜像名为 my-existing-image:tag。
# 使用你已有的镜像作为基础
FROM my-existing-image:tag

# 安装你需要的软件包,这里以安装vim和curl为例
# 如果基础镜像基于Ubuntu/Debian
RUN apt-get update && apt-get install -y \
    vim \
    curl \
    && rm -rf /var/lib/apt/lists/*

# 如果基础镜像基于CentOS/RHEL/AlmaLinux
# RUN yum update -y && yum install -y \
#    vim \
#    curl \
#    && yum clean all

请注意:需要根据基础镜像使用的Linux发行版,选用正确的包管理命令(如apt-get或yum)。

  1. 构建新镜像:打开终端,进入包含Dockerfile的目录,执行构建命令。
docker build -t my-new-image:with-vim .

命令末尾的 . 表示使用当前目录下的Dockerfile。-t 参数为新镜像打上标签。

  1. 使用新镜像:构建完成后,就可以像使用其他镜像一样使用这个新的镜像了。
docker run -it my-new-image:with-vim

方法二:进入运行中的容器临时安装

这种方法非常适合快速测试和调试,但改动通常是临时的。

  1. 启动并进入容器:如果你的容器还未运行,首先启动它。使用 docker exec 命令进入一个正在运行的容器。
# 启动容器(如果未运行)
docker run -it --name my-container my-existing-image:tag bash
# 或者进入一个已在运行的容器
docker exec -it my-container bash

-it 参数为你提供一个交互式的终端。

  1. 在容器内安装包:进入容器后,你就可以像在一台普通的Linux机器上一样安装软件包了。
# 在基于Ubuntu/Debian的容器内
apt-get update
apt-get install -y vim

# 在基于CentOS/RHEL的容器内
yum update -y
yum install -y vim
  1. (可选)提交更改以保存为新镜像:如果你希望将这次临时安装的改动永久保存下来,可以将其提交为一个新的镜像。
docker commit my-container my-saved-image:with-changes

之后,就可以通过 my-saved-image:with-changes 这个新镜像来启动一个包含所有已安装包的容器了。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐