Docker görüntüsünün nasıl oluşturulduğunu anlamak için
docker history --no-trunc
komutu kullanın.
Bir görüntüden bir liman işçisi dosyası oluşturabilirsiniz, ancak görüntünün nasıl oluşturulduğunu tam olarak anlamak istediğiniz her şeyi içermeyecektir. Makul olarak çıkarabileceğiniz şey, dockerfile'ın MAINTAINER, ENV, EXPOSE, VOLUME, WORKDIR, ENTRYPOINT, CMD ve ONBUILD parçalarıdır.
Aşağıdaki komut dosyasının sizin için çalışması gerekir:
#!/bin/bash
docker history --no-trunc "$1" | \
sed -n -e 's,.*/bin/sh -c #(nop) \(MAINTAINER .*[^ ]\) *0 B,\1,p' | \
head -1
docker inspect --format='{{range $e := .Config.Env}}
ENV {{$e}}
{{end}}{{range $e,$v := .Config.ExposedPorts}}
EXPOSE {{$e}}
{{end}}{{range $e,$v := .Config.Volumes}}
VOLUME {{$e}}
{{end}}{{with .Config.User}}USER {{.}}{{end}}
{{with .Config.WorkingDir}}WORKDIR {{.}}{{end}}
{{with .Config.Entrypoint}}ENTRYPOINT {{json .}}{{end}}
{{with .Config.Cmd}}CMD {{json .}}{{end}}
{{with .Config.OnBuild}}ONBUILD {{json .}}{{end}}' "$1"
Bu resim olarak çalışan kapsayıcılar yeniden oluşturmak için bir komut dosyası parçası olarak kullanın:
https://github.com/docbill/docker-scripts/blob/master/docker-rebase
Dockerfile, esas olarak bir görüntüyü yeniden paketleyebilmek istiyorsanız kullanışlıdır.
Akılda tutulması gereken şey, bir docker görüntüsü aslında gerçek veya sanal bir makinenin tar yedeklemesi olabilir. Bu şekilde birkaç liman işçisi görüntü yaptım. Yapı geçmişi bile, görüntüyü oluşturmanın ilk adımı olarak büyük bir katran dosyasını içe aktarmamı gösteriyor ...