我最近安装了Docker 桌面应用程序版本 4.22.0 在配备 Apple Silicon(ARM,而非 Intel)的 Mac 上的 macOS Ventura 上。我成功拉取并运行了几个容器:一个用于 MySQL 数据库服务器,一个用于 Postgres 数据库服务器。
不幸的是,当我去编辑这些服务器的一些配置文件时,我惊讶地发现缺少基本实用程序:桀骜壳和纳米文本编辑器。
在单个容器中,我确实成功执行了:
apt update
apt install nano
这仅适用于单个容器。其他容器仍然缺乏纳米编辑。鉴于容器的目的是相互隔离,这种缺乏是可以理解的。
我希望这些实用程序出现在全部我的 Docker 桌面应用程序中的容器。
答案1
docker 镜像的整体理念是,不。没有办法。如果您想更改图像的基础层,那么您需要更改该基础层并在其之上重建图像。
这里的想法是图像层是不可变的,因此很容易推断出事物所在的版本、保证在每个点上工作的内容等等。
所以,
我发现的唯一建议是“滚动你自己的形象”
反映了这个系统应该做什么。然而,这实际上并不像您想象的那么难。你需要写的东西有四行(我下面的例子只是故意冗长!)
假设您有一个名为“foobar”的图像,您想确保它包含nano
和zsh
。好吧,正如您所指出的,如果该foobar
映像apt
用于安装软件(即,它是某种 debian 或像 Fedora 这样的 debian 衍生版本),您可以运行apt installs -y zsh nano
并获取它们。然后您需要做的就是根据该新状态制作图像。
这相当容易。创建一个文本文件,包含以下内容
FROM foobar
# Reminder for yourself that you're the one who built this
LABEL maintainer="[email protected]"
# you get to pick a version, relatively freely.
# If you feel like it works for you as you want, I'd recommend to start using 1.something
LABEL version="0.0.1"
# The "line continuation" \ at the end of each line are important; they
# "swallow" the line break character, otherwise the RUN command will break.
#
# Set the frontend for apt to "Don't ask me any questions, please"==noninteractive;
# and be -q (uiet), answer -y (es) to everything
# and also don't install fancy stuff that you get recommended, let's keep this slim
RUN apt-get update;\
DEBIAN_FRONTEND=noninteractive apt-get install \
--no-install-recommends -q -y \
nano \
vim \
&& \
apt-get clean && apt-get autoclean
另存为“Dockerfile-improved-foobar”,然后运行
docker build -f Dockerfile-improved-foobar -t foobar-with-tools
当你现在运行时,docker images
你会看到foobar-with-tools
那里!您可以像使用从 dockerhub 自动获取的任何其他映像一样使用它。