即使使用简单的命令,docker build也非常慢

fel*_*xbr 8 arm docker

我正在我的Raspberry Pi上构建一个docker镜像,这当然需要一些时间.这里的问题是,即使是Dockerfile中非常简单的命令,如设置环境变量,chmod +x在单个文件上使用或暴露端口80也需要几分钟才能完成.

这是我的Dockerfile的摘录:

FROM resin/rpi-raspbian
MAINTAINER felixbr <mymail@redacted.com>

RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -y python python-dev python-pip python-numpy python-scipy python-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
Run Code Online (Sandbox Code Playgroud)

请记住,这是使用ARMv6基本映像,因此它可以在Raspberry Pi上运行,我正在使用为低级Raspberry Pi OS构建的docker 1.5.0.

是复制每个命令的构建层还是为什么最后几个命令每个都需要几分钟才能完成?

Vin*_*ter 6

Dockerfile将在容器中运行每条指令.这意味着对于每条指令,它将执行以下操作:

  • 从上一步创建的图像中实例化一个容器,这将创建一个新图层(R/W图层)
  • 做事(pip安装等..)
  • 提交,它将顶层复制为图像层(我很确定它正在复制图层)
  • 并删除容器(如果--rm指定了选项)(因此,删除容器读/写层)

涉及一些I/O操作.在SSD上它非常快,以及在一个好硬盘上.当你在Raspberry PI上构建它时,如果你在SD卡(或MicroSD)上构建它,SD卡的性能可能就不那么好了.这将取决于你的MicroSD类,即便如此,我认为这对卡真的不错.我尝试了一个简单的节点项目,它肯定需要几分钟而不是几秒钟,就像我在笔记本电脑上做的那样.它与硬件有关(主要是SD卡的I/O,可能是CPU的一小部分,但是......).

您可能想尝试使用连接到树莓派的外部硬盘驱动器并将docker文件夹移动到那里,以查看性能是否更好.