将基本控制台应用程序(例如“zsh”或“nano”)添加到 Docker 桌面应用程序提供的基本 Linux

将基本控制台应用程序(例如“zsh”或“nano”)添加到 Docker 桌面应用程序提供的基本 Linux

我最近安装了Docker 桌面应用程序版本 4.22.0 在配备 Apple Silicon(ARM,而非 Intel)的 Mac 上的 macOS Ventura 上。我成功拉取并运行了几个容器:一个用于 MySQL 数据库服务器,一个用于 Postgres 数据库服务器。

不幸的是,当我去编辑这些服务器的一些配置文件时,我惊讶地发现缺少基本实用程序:桀骜壳和纳米文本编辑器。

在单个容器中,我确实成功执行了:

apt update 
apt install nano

这仅适用于单个容器。其他容器仍然缺乏纳米编辑。鉴于容器的目的是相互隔离,这种缺乏是可以理解的。

我希望这些实用程序出现在全部我的 Docker 桌面应用程序中的容器。

答案1

docker 镜像的整体理念是,不。没有办法。如果您想更改图像的基础层,那么您需要更改该基础层并在其之上重建图像。

这里的想法是图像层是不可变的,因此很容易推断出事物所在的版本、保证在每个点上工作的内容等等。

所以,

我发现的唯一建议是“滚动你自己的形象”

反映了这个系统应该做什么。然而,这实际上并不像您想象的那么难。你需要写的东西有四行(我下面的例子只是故意冗长!)

假设您有一个名为“foobar”的图像,您想确保它包含nanozsh。好吧,正如您所指出的,如果该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 自动获取的任何其他映像一样使用它。

相关内容