我正在我的Raspberry Pi上构建一个docker镜像,这当然需要一些时间.这里的问题是,即使是Dockerfile中非常简单的命令,比如设置环境变量,在单个文件上使用chmod x或暴露端口80需要几分钟才能完成.
这是我的Dockerfile的摘录:
FROM resin/rpi-raspbian
MAINTAINER felixbr MysqLdb MysqL-server redis-server Nginx dos2unix poppler-utils
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY . /app
WORKDIR /app
RUN cp /app/Nginx-django.cfg /etc/Nginx/sites-enabled/default
RUN chmod +x /app/start.sh
ENV DOCKERIZED="true"
CMD ./start.sh
EXPOSE 80
请记住,这是使用ARMv6基本映像,因此它可以在Raspberry Pi上运行,我正在使用为低级Raspberry Pi OS构建的docker 1.5.0.
它是为每个命令复制构建的层,还是为什么最后几个命令中的每一个都需要几分钟才能完成?
最佳答案
Dockerfile的每条指令都将在容器中运行.这意味着对于每条指令,它将执行以下操作:
>从上一步创建的图像中实例化一个容器,这将创建一个新图层(R / W图层)
>做事(pip安装等..)
>提交,它将顶层复制为图像层(我很确定它正在复制图层)
>并删除容器(如果指定了–rm选项)(因此,删除容器读/写层)
涉及一些I / O操作.在SSD上它非常快,以及在一个好的硬盘上.当您在Raspberry PI上构建它时,如果您在SD卡(或MicroSD)上构建它,SD卡的性能可能不是那么好.这将取决于你的MicroSD类,即便如此,我认为这对卡真的不错.我尝试了一个简单的节点项目,它肯定需要几分钟而不是几秒钟就像在我的笔记本电脑上一样.它与硬件有关(主要是SD卡的I / O,可能有点cpu,但是……).