Maa*_*ndt 9 docker docker-in-docker
我正在运行一个 docker-in-docker 容器,它始终使用相同的几个图像。我想将它们预先拉到我的 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
Run Code Online (Sandbox Code Playgroud)
显然,上面的 Dockerfile 不会构建,因为 docker 在构建期间没有运行,但它应该给出我想要实现的目标。
这是实现这一目标的一些方法。
这个想法是保存要使用的图像,然后在容器启动过程中导入这些图像。
例如,您可以使用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"]
Run Code Online (Sandbox Code Playgroud)
(tini需要在后台加载图像)
和entrypoint.sh脚本:
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"]
Run Code Online (Sandbox Code Playgroud)
仅供参考,有关如何保存图像的示例:
#!/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
Run Code Online (Sandbox Code Playgroud)
你不能这样做。
如果你查看docker:dindDockerfile,它包含一个声明
VOLUME /var/lib/docker
Run Code Online (Sandbox Code Playgroud)
这使得无法使用该目录树中的任何不同内容创建派生图像。(这与您无法使用预填充数据创建mysql或postgresql图像的原因相同。)
| 归档时间: |
|
| 查看次数: |
5262 次 |
| 最近记录: |