Bu kolay değildir, ancak python
'dan küçük bir destekle wget
veya curl
aracılığıyla yapılabilir. Hiçbir url
verildiğinde
wget
çalışmayacak (Tüm üç araçları genellikle. Bir
*nix
sistemde mevcut olmalıdır) ve
curl file://localhost/home/user/program.zip -o /tmp/
bir Dockerfile
'ın RUN
talimatı içinden çalışmaz. Bu nedenle, wget
ve curl
'un program.zip
adresinden erişip indirebileceği bir sunucuya ihtiyacımız olacak.
Bunu yapmak için http
isteğimize hizmet eden biraz python
sunucu kurduk. Bunun için python
'dan http.server
modülünü kullanacağız. (python
veya python 3
'u kullanabilirsiniz. Her ikisiyle de çalışır.).
python -m http.server --bind 192.168.178.20 8000
python
sunucu başlatıldığında dizindeki tüm dosyaları hizmet edecektir. Eğer sunucuyu başlatmak emin olmalısınız Yani ya dizinde resminizin inşa sırasında indirmek istediğiniz dosyanın bulunur veya oluşturma Programınızı içeren geçici bir dizin. Gösterim amaçları doğrultusunda en biz daha sonra bizim Dockerfile
yılında wget
aracılığıyla indirecektir dosyasını foo.txt
yapalım:
echo "foo bar" > foo.txt
http sunucusu başlayarak önemli olduğunu, biz LAN üzerinde yerel makinenin IP adresini belirtin. Dahası, Liman 8000. Bu şu çıktıyı görmelisiniz yapmış olan açılacaktır:
python3 -m http.server --bind 192.168.178.20 8000
Serving HTTP on 192.168.178.20 port 8000 ...
Şimdi bu nasıl çalıştığını göstermek için bir
Dockerfile
kurmak.(Biz dosya
foo.txt
/tmp
indirilebilir gerektiğini varsayıyoruz):
FROM debian:latest
RUN apt-get update -qq \
&& apt-get install -y wget
RUN cd /tmp \
&& wget http://192.168.178.20:8000/foo.txt
Şimdi bizim python
sunucuda şu çıktıyı göreceksiniz oluşturma sırasında
docker build -t test .
ile bina yapmaya başla:
172.17.0.21 - - [01/Nov/2014 23:32:37] "GET /foo.txt HTTP/1.1" 200 -
ve görüntünün çıktı oluşturulmasına olacaktır:
Gerçekten başlayan ve sadece inşa görüntüden bir kabı girerek çalışıp çalışmadığını
Step 2 : RUN cd /tmp && wget http://192.168.178.20:8000/foo.txt
---> Running in 49c10e0057d5
--2014-11-01 22:56:15-- http://192.168.178.20:8000/foo.txt
Connecting to 192.168.178.20:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25872 (25K) [text/plain]
Saving to: `foo.txt'
0K .......... .......... ..... 100% 129M=0s
2014-11-01 22:56:15 (129 MB/s) - `foo.txt' saved [25872/25872]
---> 5228517c8641
Removing intermediate container 49c10e0057d5
Successfully built 5228517c8641
Daha sonra kontrol edebilirsiniz: Daha sonra foo.txt
için /tmp
yılında bakabilirsiniz
docker run -i -t --rm test bash
.
Artık herhangi bir dosyayı image
'a yeni bir katman oluşturmadan ekleyebiliriz. Eğer Yapabileceğimiz söz konusu belirtildiği gibi yaklaşık 5 gb programı eklemek istediğiniz varsayarsak:
FROM debian:latest
RUN apt-get update -qq \
&& apt-get install -y wget
RUN cd /tmp \
&& wget http://conventiont:8000/program.zip \
&& unzip program.zip \
&& cd program \
&& make \
&& make install \
&& cd /tmp \
&& rm -f program.zip \
&& rm -rf program
biz cruft 10 gb sol olmayacak Bu şekilde.
Yerel makinenizde önceden sıkıştırmanız mümkün değil mi? Ve sonra ihtiyacınız olan şeyleri ekleyin? – Nick
Evet, ancak aynı zamanda sıkıştırılmamış klasörü hala 5 gb üzerinde olacak şekilde silmek istiyorum. Ama ne istediğimi yapmanın bir yolunu buldum. Cevap yolunda. –
ve dosyayı oluşturan ve kaldıran bir make.sh dosyası? – Rondo