Docker在已经构建好的镜像中安装包
核心思路
给已经构建好的 Docker 镜像安装软件包,主要有两种核心思路:一种是基于原有镜像构建一个新镜像,另一种是临时进入容器进行安装。
方法一:使用Dockerfile构建新镜像(推荐)
这是最符合Docker最佳实践的方法,具有可重复性、易于版本管理。
- 准备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)。
- 构建新镜像:打开终端,进入包含Dockerfile的目录,执行构建命令。
docker build -t my-new-image:with-vim .
命令末尾的 . 表示使用当前目录下的Dockerfile。-t 参数为新镜像打上标签。
- 使用新镜像:构建完成后,就可以像使用其他镜像一样使用这个新的镜像了。
docker run -it my-new-image:with-vim
方法二:进入运行中的容器临时安装
这种方法非常适合快速测试和调试,但改动通常是临时的。
- 启动并进入容器:如果你的容器还未运行,首先启动它。使用 docker exec 命令进入一个正在运行的容器。
# 启动容器(如果未运行)
docker run -it --name my-container my-existing-image:tag bash
# 或者进入一个已在运行的容器
docker exec -it my-container bash
-it 参数为你提供一个交互式的终端。
- 在容器内安装包:进入容器后,你就可以像在一台普通的Linux机器上一样安装软件包了。
# 在基于Ubuntu/Debian的容器内
apt-get update
apt-get install -y vim# 在基于CentOS/RHEL的容器内
yum update -y
yum install -y vim
- (可选)提交更改以保存为新镜像:如果你希望将这次临时安装的改动永久保存下来,可以将其提交为一个新的镜像。
docker commit my-container my-saved-image:with-changes
之后,就可以通过 my-saved-image:with-changes 这个新镜像来启动一个包含所有已安装包的容器了。