2015-05-01 19 views
8

Tabii benim Ahududu Pi, bir liman işçisi görüntüsünü inşa ediyorum çok yavaştır. Buradaki problem, Dockerfile'daki bir ortam değişkeninin ayarlanması gibi çok basit komutların bile tek bir dosyada chmod +x kullanılması veya 80 no.lu bağlantı noktasının tamamlanmasını tamamlamaktır.liman işçisi inşa biraz zaman alır hatta basit komutları

FROM resin/rpi-raspbian 
MAINTAINER felixbr <[email protected]> 

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 

bu bir ARMv6 temel görüntü kullanıyor, bu yüzden bir Ahududu Pi çalışabilen ve ben için inşa liman işçisi 1.5.0 kullanıyorum Unutmayın: Burada

bir benim Dockerfile ait alıntıdır hypriot ahududu pi os.

her komut için inşa katmanları kopyalama mı ya da neden son birkaç komutların her dakika tamamlamak için alır?

+0

https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/ çok yardımcı olacak değil, ama bir hattan içine tüm RUN talimatları birleştirebilir Bu biraz daha verimli olurdu. –

+0

Bunu düşündüm ve kesinlikle genel performansı artıracaktı. Bununla birlikte, problemi eşit derecede kötü olan ENV, EXPOSE, WORKDIR vb. Ile çözmüyorum. – felixbr

+0

Dizinde gereksiz dosyalar var mı? '.git' gibi bir git deposu olduğu için. Onu ve başka bir şeyi .dockerignore'a ekleyin ve bir hızlanma fark edebilirsiniz. –

cevap

6

Dockerfile her talimat bir kap içinde çalışacaktır. Bu demek her talimat için yapacak şudur:

  • yeni bir katman (biri W R /)
  • mı yaratacak önceki adımda yarattığı görüntüden gelen bir kabı örneğini şey --rm seçenek belirtilmişse
  • Ve konteyner (kaldırma (Ben katmanı kopyalıyor eminim) bir görüntü katmanı olarak üst tabakayı kopyalar hangi
  • Teslim (.. vb yüklemek pip) (Bu şekilde, kabın Read/Write katmanının çıkarılması)

Birkaç G/Ç işlemi var. Bir SSD'de, gerçekten iyi bir sabit diskte olduğu kadar hızlı. Raspberry PI'da oluşturduğunuzda, SD Kart (veya MicroSD) üzerine inşa ederseniz, SD kartın performansı muhtemelen o kadar iyi değil. Bu MicroSD sınıfına bağlı olacak ve o zaman bile kart için gerçekten iyi olduğunu sanmıyorum. Basit bir düğüm projesiyle denemeler yaptım ve dizüstü bilgisayarımda olduğu gibi birkaç saniye yerine kesinlikle birkaç dakikanızı aldım. Donanımla ilgili (çoğunlukla SD Kart için I/O, belki biraz CPU, ama ...).

Sen performans daha iyi olup olmadığını görmek için, ahududu Pi bağlı harici sabit disk kullanmak ve orada liman işçisi klasörleri taşımak deneyebilirsin.

+1

Bu, şüphemi doğrular. Docker'ın konteynırları ve görüntüleri nerede sakladığını belirtebilirseniz, harici bir sabit sürücü yardımcı olacaktır. Varsayılan:/var/lib/docker/'. COPY'den önce ENV, EXPOSE ve VOLUME gibi sabit komutları taşıdım, bu yüzden en azından çoğu zaman önbelleğe alındıklarını kabul ettiler. – felixbr

+1

Yep. Bunu makinemden birinde yapmam, docker'ı geçici olarak devre dışı bırakmak (ve hiçbir şeyin ''/var/lib/docker'' klasörüne erişmediğinden emin olmaktır, bu klasörü harici bir sürücüde (veya benim durumumda) diğer bölümler) ve bir bağlama parçası veya bir montaj (''/etc/fstab'' içinde belirtilir. –

2

Bu eski bir sorudur ama başvuru için, seçtiğiniz depolama sürücüsü muzdarip olmuş olabilir. Ubuntu/Debian

, Docker varsayılan olarak oldukça hızlı bir Aufs depolama sürücüsünü kullanır. Diğer dağıtımlarda, Docker varsayılan olarak varsayılan yapılandırmada çok yavaş olan (varsayılan olarak yapılandırılmış bir "döngü-lvm" modundan dolayı ve üretim kullanımı için uygun değil) bir devicemapper depolama sürücüsünü kullanır.

Kontrol Bu referans için kılavuz ve (döngü modu olmayan) üretimde devicemapper depolama sürücüsünü nasıl yapılandırılacağı görmek için:

İlgili konular