我的Docker镜像是基于Alpine Linux的,但它无法从网络中获取任何东西。因此,命令“apk add xxx”是有效的。现在我的想法是下载.apk文件并将其复制到Docker容器中。但我该如何安装该.apk文件?
以下步骤适用于我:
获取一个“在线” Alpine 机器并下载软件包。例如,“zip”和“rsync”软件包:
sudo apk update
apk fetch zip rsync
您将获得这些文件(或可能是实际版本):
zip-3.0-r8.apk
rsync-3.1.3-r3.apk
将这些文件上传到“离线” Alpine 机器。
安装 apk 软件包:
sudo apk add --allow-untrusted zip-3.0-r8.apk
sudo apk add --allow-untrusted rsync-3.1.3-r3.apk
更多信息: https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management
wget "https://circle-artifacts.com/gh/andyshinn/alpine-pkg-glibc/6/artifacts/0/home/ubuntu/alpine-pkg-glibc/packages/x86_64/glibc-2.21-r2.apk"
wget "https://circle-artifacts.com/gh/andyshinn/alpine-pkg-glibc/6/artifacts/0/home/ubuntu/alpine-pkg-glibc/packages/x86_64/glibc-bin-2.21-r2.apk"
然后,使用带有“--allow-untrusted”标志的apk文件。
apk add --allow-untrusted glibc-2.21-r2.apk glibc-bin-2.21-r2.apk
完成安装(仅在此示例中需要)
/usr/glibc/usr/bin/ldconfig /lib /usr/glibc/usr/lib
FROM alpine
RUN apk add ...
构建该镜像 docker build -t me/alpine-base
,连接到网络。
现在您需要将该镜像传输到隔离环境中。如果有可能将某些系统连接到两个网络,并在环境内运行Docker注册表,那么您可以使用docker push
将镜像发送到隔离环境中。否则,这是少数几种需要使用docker save
的情况:创建该镜像的tar文件,在隔离环境中移动该文件(通过堡垒主机、USB键等方式),并在目标系统上docker load
它。
现在您已经在目标系统上拥有了该基础镜像,因此可以在其上安装应用程序而无需调用apk
命令。
FROM me/alpine-base
WORKDIR /app
COPY . .
CMD ...
这种方法适用于任何类型的工件。如果您有像应用程序的package.json
/requirements.txt
/Gemfile
/go.mod
这样列出所有应用程序库依赖项的文件,您可以像这样提前运行下载和安装步骤,但是如果这些依赖关系发生更改,您需要记住重复此操作并手动移动更新的基础镜像。