我正在运行一个docker-in-docker容器,它总是使用相同的几个图像。我想在我的dind容器中预先拉出它们,这样我就不必在启动时拉出它们。我怎样才能做到这一点呢?
我正在考虑建立我自己的dind形象,就像
FROM docker:18.06.1-ce-dind
RUN apk update && \
apk upgrade && \
apk add bash
RUN docker pull pre-pulled-image:1.0.0很明显,上面的Dockerfile不会构建,因为docker在构建过程中没有运行,但它应该给出一个我想要实现的想法。
发布于 2019-11-07 21:37:37
你不能这么做。
如果您查看docker:dind Dockerfile,您会发现它包含一个声明
VOLUME /var/lib/docker这使得不可能在该目录树中创建具有任何不同内容的派生图像。(这与您不能使用预填充数据创建mysql或postgresql映像的原因相同。)
发布于 2021-09-20 14:27:16
以下是实现这一点的一些方法。
这个想法是保存您想要使用的图像,然后在容器启动过程中导入这些图像。
例如,您可以使用文件夹images来存储图像。
并且您必须使用将导入图像的自定义入口点脚本。
因此,Dockerfile将为:
FROM docker:19.03-dind
RUN apk add --update --no-cache bash tini
COPY ./images /images
COPY ./entrypoint.sh /entrypoint.sh
ENTRYPOINT ["tini", "--", "/entrypoint.sh"](在后台加载图片需要使用tini)
和entrypoint.sh脚本:
#!/bin/bash
# Turn on bash's job control
set -m
# Start docker service in background
/usr/local/bin/dockerd-entrypoint.sh &
# Wait that the docker service is up
while ! docker info; do
echo "Waiting docker..."
sleep 3
done
# Import pre-installed images
for file in /images/*.tar; do
docker load <$file
done
# Bring docker service back to foreground
fg %1仅供参考,这是一个保存镜像的示例:
docker pull instrumentisto/nmap
docker save instrumentisto/nmap >images/nmap.tarhttps://stackoverflow.com/questions/58749344
复制相似问题