在 Docker 中预拉图像 Docker (dind)
Pre-pull images in Docker in Docker (dind)
我是运行一个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 在构建期间不是 运行,但它应该让我知道我想要实现什么。
你不能这样做。
如果您查看 docker:dind
Dockerfile 它包含一个声明
VOLUME /var/lib/docker
这使得无法在该目录树中创建具有任何不同内容的派生图像。 (这与您无法使用预填充数据创建 mysql
或 postgresql
图像的原因相同。)
这里有一些方法可以实现。
思路是把你要用的镜像保存起来,然后在容器启动过程中导入这个镜像。
例如,您可以使用文件夹 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.tar
我是运行一个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 在构建期间不是 运行,但它应该让我知道我想要实现什么。
你不能这样做。
如果您查看 docker:dind
Dockerfile 它包含一个声明
VOLUME /var/lib/docker
这使得无法在该目录树中创建具有任何不同内容的派生图像。 (这与您无法使用预填充数据创建 mysql
或 postgresql
图像的原因相同。)
这里有一些方法可以实现。
思路是把你要用的镜像保存起来,然后在容器启动过程中导入这个镜像。
例如,您可以使用文件夹 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.tar