ブログで開発の動機は説明されています。
Reversing Docker Images into Dockerfiles
https://samaritan.ai/blog/reversing-docker-images-into-dockerfiles/
インストール
mac os10.13のgo version go1.11 darwin/amd64でビルドした。
Go言語がないなら先に導入しておく。
go get -u github.com/P3GLEG/Whaler
cd ~/go/src/github.com/P3GLEG/Whaler
go build .
> Whaler -h
$ Whaler -h
Usage of Whaler:
-f string
File containing images to analyze seperated by line
-filter
Filters filenames that create noise such as node_modules. Check ignore.go file for more details (default true)
-sV string
Set the docker client ID to a specific version -sV=1.36
-v Print all details about the image
-x Save layers to current directory
実行方法
分析するにはdokcerコンテナイメージ名を指定する。
Whaler image名
ubuntuコンテナイメージを使い試してみる。まずイメージを検索する。
sudo docker search ubuntu
$ sudo docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 8426 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 224 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 171 [OK]
consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 130 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 95 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 90 [OK]
neurodebian NeuroDebian provides neuroscience research s… 54 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 44 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components=m… 39 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images w… 23 [OK]
tutum/ubuntu Simple Ubuntu docker images with SSH access 18
i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 14
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 13 [OK]
ppc64le/ubuntu Ubuntu is a Debian-based Linux operating sys… 12
eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 6 [OK]
codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 4 [OK]
darksheer/ubuntu Base Ubuntu Image -- Updated hourly 4 [OK]
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 3 [OK]
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 2
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK]
ossobv/ubuntu Custom ubuntu image from scratch (based on o… 0
smartentry/ubuntu ubuntu with smartentry 0 [OK]
1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK]
paasmule/bosh-tools-ubuntu Ubuntu based bosh-cli 0 [OK]
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0
docker社が用意したイメージ、STARSが8426のubuntuをダウンロードする。
sudo docker pull ubuntu:16.04
イメージ名とイメージIDを確認。
docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-kazumax latest 77672f0a2762 35 hours ago 2.45GB
ubuntu 16.04 b9e15a5d1e1a 2 weeks ago 115MB
jeltje/varscan2 latest 6df55adfc7d5 5 weeks ago 725MB
ubuntu 14.04 971bb384a50a 2 months ago 188MB
centos latest 49f7960eb7e4 3 months ago 200MB
lavenderca/muver latest fd0c2415cdde 4 months ago 1.24GB
metabat/metabat latest d9259b96b365 5 months ago 60.1MB
nileshtawari/chronqc chronqc_1.0.4 a2bb7bfc794c 9 months ago 890MB
eitanbanks/manta-1.0.3 latest 61cd9a5d5f6f 19 months ago 288MB
molecular/breakdancer latest 28543e51bb72 23 months ago 658MB
ubuntu16.04コンテナイメージを分析する。
Whaler -sV=1.36 b9e15a5d1e1a
$ Whaler -sV=1.36 b9e15a5d1e1a
Analyzing b9e15a5d1e1a
Docker Version: 17.06.2-ce
GraphDriver: overlay2
Environment Variables
|PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Image user
|User is root
Potential secrets:
Dockerfile:
RUN set -xe \
&& echo '#!/bin/sh' > /usr/sbin/policy-rc.d \
&& echo 'exit 101' >> /usr/sbin/policy-rc.d \
&& chmod +x /usr/sbin/policy-rc.d \
&& dpkg-divert --local --rename --add /sbin/initctl \
&& cp -a /usr/sbin/policy-rc.d /sbin/initctl \
&& sed -i 's/^exit.*/exit 0/' /sbin/initctl \
&& echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \
&& echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \
&& echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \
&& echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \
&& echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \
&& echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes \
&& echo 'Apt::AutoRemove::SuggestsImportant "false";' > /etc/apt/apt.conf.d/docker-autoremove-suggests
RUN rm -rf /var/lib/apt/lists/*
RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list
RUN mkdir -p /run/systemd \
&& echo 'docker' > /run/systemd/container
CMD ["/bin/bash"]
インフォマティクスのツールには、公共のDocker Hubにイメージは共有されていても、Dockerfile(イメージビルドの時に実行した内容が記載される)が別に公開されてないイメージもたくさんあります。特に、よく使われるツールで、開発者以外の方が登録したイメージに多い印象です。仮想環境といえど、そもそもそのようなイメージは使うべきではないという議論はさておき、例えば妙にファイルサイズが大きなイメージ、ツールがどこに入っているかわからないイメージなどは気になりますね。そういったイメージもビルド手順みれば一目瞭然です。例えば使わないツールが親切心でapt-getされていて、それで容量が肥大しているなら、除いてカスタムビルドするだけでかなりディスクスペースを節約できます(立ち上げて修正し、eixtしてコミットし直してもいいと思いますが)。 活用して下さい。
引用
GitHub - P3GLEG/Whaler: Program to reverse Docker images into Dockerfiles