slimtoolkit / slim

Slim(toolkit): Don't change anything in your container image and minify it by up to 30x (and for compiled languages even more) making it secure too! (free and open source)
Apache License 2.0
19.5k stars 732 forks source link

Resultant ubuntu image is 3MB and unusable #128

Open frakman1 opened 4 years ago

frakman1 commented 4 years ago

Running on Linux Ubuntu 14.04.5 LTS

I have a customized ubuntu image that is about 1.5GB that I want to slim down. It's used for building and therefore has no exposed http ports. It has a custom user which is why I use --include-path /etc/passwd. When I use docker-slim, the resultant image is only 3MB and won't run any commands when I launch it.

$docker pull nandkrishnamoorthy/ubuntu:14.04
14.04: Pulling from nandkrishnamoorthy/ubuntu
d6fdcbe24ed5: Pull complete
1115217119d4: Pull complete
8180a23d2c44: Pull complete
ceab6b3c2a5e: Pull complete
1559b4f56d09: Pull complete
08483b473761: Pull complete
8de029296612: Pull complete
3c083b028d5b: Pull complete
39fba8c7ea40: Pull complete
46b79e97dc62: Pull complete
f7a1d17d4dcc: Pull complete
66f89b5610ce: Pull complete
507ac274d52d: Pull complete
7f52e239aed9: Pull complete
cb289a724ea5: Pull complete
0c9d2df29112: Pull complete
c8089b1e51e8: Pull complete
002d21d69292: Pull complete
5285a5c61914: Pull complete
a07d2607496e: Pull complete
9d19de82116d: Pull complete
8f411dc52146: Pull complete
32329d09225b: Pull complete
5c94144d77af: Pull complete
774ff6e756e0: Pull complete
9812ea002f95: Pull complete
0c577b89fb2b: Pull complete
6b94cbccf9af: Pull complete
7b419fd45aba: Pull complete
7fabbe1546ba: Pull complete
03985a12a491: Pull complete
073dfd8b8ad5: Pull complete
4134efa9dbd3: Pull complete
1fcb72aef864: Pull complete
db06780aae94: Pull complete
d7ca553684cf: Pull complete
Digest: sha256:e415f08cc66bcd38c1626fd13c135cf493211ad13856614811f2cd38c2533abe
Status: Downloaded newer image for nandkrishnamoorthy/ubuntu:14.04

$docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
nandkrishnamoorthy/ubuntu   14.04               da35019c441c        9 months ago        1.47GB

$sudo docker-slim --debug build --http-probe=false --include-path /etc/passwd nandkrishnamoorthy/ubuntu:14.04
time="2020-02-07T12:07:32-05:00" level=debug msg="sysinfo => system.SystemInfo{Sysname:\"Linux\", Nodename:\"frakalog\", Release:\"4.4.0-31-generic\", Version:\"#50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016\", Machine:\"x86_64\", Domainname:\"(none)\", OsName:\"Ubuntu 14.04.5 LTS, Trusty Tahr\", OsBuild:\"\"}"
docker-slim[build]: info=probe message='changing continue-after from probe to enter because http-probe is disabled'
time="2020-02-07T12:07:32-05:00" level=debug msg="docker-slim: new Docker client (default) [6]"
time="2020-02-07T12:07:32-05:00" level=debug msg="docker-slim: configured DOCKER_HOST env var"
docker-slim[build]: state=started
docker-slim[build]: info=params target=nandkrishnamoorthy/ubuntu:14.04 continue.mode=enter
time="2020-02-07T12:07:32-05:00" level=info msg="image=nandkrishnamoorthy/ubuntu:14.04 http-probe=false remove-file-artifacts=false image-overrides=map[] entrypoint=[] (false) cmd=[] (false) workdir='' env=[] expose=map[]" app=docker-slim command=build
docker-slim[version]: linux|Transformer|1.26.1|2ec04e169b12a87c5286aa09ef44eac1cea2c7a1|2019-11-28_04:37:59PM (false,false)
host:
OsName=Ubuntu 14.04.5 LTS, Trusty Tahr
OsBuild=
Version=#50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016
Release=4.4.0-31-generic
Sysname=Linux
docker:
Name=frakalog
KernelVersion=4.4.0-31-generic
OperatingSystem=Ubuntu 14.04.5 LTS
OSType=linux
ServerVersion=18.06.1-ce
Architecture=x86_64
ApiVersion=1.38
MinAPIVersion=1.12
BuildTime=2018-08-21T17:23:24.000000000+00:00
GitCommit=e68fc7a
docker-slim[build]: state=image.inspection.start
time="2020-02-07T12:07:32-05:00" level=info msg="inspecting 'fat' image metadata..." app=docker-slim command=build
time="2020-02-07T12:07:32-05:00" level=debug msg="PrepareImageStateDirs(,sha256:da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a)"
time="2020-02-07T12:07:32-05:00" level=debug msg="PrepareImageStateDirs - removing existing state location: /usr/local/bin/.docker-slim-state/images/da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a/artifacts"
time="2020-02-07T12:07:32-05:00" level=debug msg="PrepareImageStateDirs - created new image state location: /usr/local/bin/.docker-slim-state/images/da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a/artifacts"
time="2020-02-07T12:07:32-05:00" level=debug msg="localVolumePath=/usr/local/bin/.docker-slim-state/images/da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a, artifactLocation=/usr/local/bin/.docker-slim-state/images/da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a/artifacts, statePath=/usr/local/bin, stateKey=da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a" app=docker-slim command=build
docker-slim[build]: info=image id=sha256:da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a size.bytes=1473689806 size.human=1.5 GB
time="2020-02-07T12:07:32-05:00" level=info msg="processing 'fat' image info..." app=docker-slim command=build
time="2020-02-07T12:07:32-05:00" level=debug msg="\n\nIMAGE HISTORY =>\n[]docker.ImageHistory{docker.ImageHistory{ID:\"sha256:da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a\", Tags:[]string{\"nandkrishnamoorthy/ubuntu:14.04\"}, Created:1556834181, CreatedBy:\"/bin/sh -c #(nop)  CMD [\\\"/bin/sh\\\" \\\"-c\\\" \\\"\\\\\\\"/bin/bash\\\\\\\"\\\"]\", Size:0, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834181, CreatedBy:\"/bin/sh -c #(nop) WORKDIR /home/build\", Size:0, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834181, CreatedBy:\"/bin/sh -c #(nop)  ENV USER=build\", Size:0, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834181, CreatedBy:\"/bin/sh -c #(nop)  USER build\", Size:0, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834181, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c chown -R build:build /home/build/.ssh\", Size:34, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834180, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c echo -e \\\"Host *\\\\n\\\\tStrictHostKeyChecking no\\\\n\\\" > /home/build/.ssh/config\", Size:34, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834179, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c mkdir -p /home/build/.ssh\", Size:0, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834178, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c chown -R build:build /opt\", Size:205865218, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834166, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c mkdir -p /opt/toolchains\", Size:0, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834165, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash\", Size:2888847, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834163, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c echo \\\"dash dash/sh boolean false\\\" | debconf-set-selections\", Size:2886999, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834162, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c echo \\\"build ALL=(ALL) NOPASSWD: ALL\\\" | tee -a /etc/sudoers\", Size:785, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834161, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c id build 2>/dev/null || useradd --uid 1000 --create-home build\", Size:334603, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834160, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c wget -N http://chromedriver.storage.googleapis.com/$(curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE)/chromedriver_linux64.zip -P ~/   && unzip ~/chromedriver_linux64.zip -d ~/   && rm ~/chromedriver_linux64.zip   && sudo mv -f ~/chromedriver /usr/local/bin/chromedriver   && sudo chown root:root /usr/local/bin/chromedriver   && sudo chmod 0755 /usr/local/bin/chromedriver\", Size:10751616, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834158, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add -   && echo \\\"deb https://dl.google.com/linux/chrome/deb/ stable main\\\" >> /etc/apt/sources.list.d/google-chrome.list   && apt-get update -qqy   && apt-get -qqy install google-chrome-stable   && rm /etc/apt/sources.list.d/google-chrome.list   && rm -rf /var/lib/apt/lists/* /var/cache/apt/*\", Size:252128880, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556834102, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c cd /tmp/openssl-1.0.2h   && ./config --prefix=/usr --openssldir=/usr/lib/openssl -fPIC shared   && make depend   && make   && make install\", Size:34910927, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833757, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c wget -N https://openssl.org/source/openssl-1.0.2h.tar.gz -P ~/   && tar -xzf ~/openssl-1.0.2h.tar.gz -C /tmp   && rm -rf ~/openssl-1.0.2h.tar.gz\", Size:24775994, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833752, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y libjson0-dev libjson0 libcurl4-openssl-dev libtool\", Size:21495614, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833738, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c pip2 install ubi_reader artifactory\", Size:1089944, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833735, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c chmod 755 /usr/bin/jfrog\", Size:17554257, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833733, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c cd /usr/bin; curl -fL https://getcli.jfrog.io | sh\", Size:17554257, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833730, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c python3.4 -m pip install wheel selenium requests crcmod artifactory\", Size:4600024, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833723, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c python3.4 -m pip install pip --upgrade\", Size:9176927, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833718, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c python -m pip install requests crcmod\", Size:120694, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833715, CreatedBy:\"/bin/sh -c #(nop)  ENV JAVA_HOME=/docker-java-home\", Size:0, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833715, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c ln -svT \\\"/usr/lib/jvm/java-7-openjdk-$(dpkg --print-architecture)\\\" /docker-java-home\", Size:33, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833714, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y openjdk-7-jdk\", Size:133326317, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833637, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y python-lzo\", Size:4074979, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833622, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y python3.4 python3.4-dev python3-pip python3.4-venv\", Size:44706974, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833584, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y python python-dev python-pip\", Size:45959010, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833528, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c chmod a+x /usr/local/bin/repo\", Size:29142, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833526, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c curl http://storage.googleapis.com/git-repo-downloads/repo > /usr/local/bin/repo\", Size:29142, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833523, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get -y install regina-rexx lib32z1 lib32stdc++6 autoconf bc flex bison libtool libfdt-dev python-setuptools python-yaml device-tree-compiler\", Size:17102745, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833489, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y bzip2 dosfstools mtools parted syslinux tree gettext parallel bsdmainutils ca-certificates apt-transport-https dos2unix\", Size:11697299, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833467, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y openssh-client coreutils libreadline-dev rpcbind nfs-common vim jq squashfs-tools quilt mtd-utils\", Size:46919244, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833424, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y build-essential chrpath curl diffstat gcc-multilib gawk git-core libsdl1.2-dev texinfo unzip wget xterm\", Size:362087739, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833184, CreatedBy:\"|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get update && apt-get -y upgrade\", Size:13425793, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556833162, CreatedBy:\"/bin/sh -c #(nop)  ARG DEBIAN_FRONTEND=noninteractive\", Size:0, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556317329, CreatedBy:\"/bin/sh -c #(nop)  CMD [\\\"/bin/bash\\\"]\", Size:0, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556317329, CreatedBy:\"/bin/sh -c mkdir -p /run/systemd && echo 'docker' > /run/systemd/container\", Size:7, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556317328, CreatedBy:\"/bin/sh -c rm -rf /var/lib/apt/lists/*\", Size:0, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556317328, CreatedBy:\"/bin/sh -c set -xe \\t\\t&& echo '#!/bin/sh' > /usr/sbin/policy-rc.d \\t&& echo 'exit 101' >> /usr/sbin/policy-rc.d \\t&& chmod +x /usr/sbin/policy-rc.d \\t\\t&& dpkg-divert --local --rename --add /sbin/initctl \\t&& cp -a /usr/sbin/policy-rc.d /sbin/initctl \\t&& sed -i 's/^exit.*/exit 0/' /sbin/initctl \\t\\t&& echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \\t\\t&& 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 \\t&& 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 \\t&& echo 'Dir::Cache::pkgcache \\\"\\\"; Dir::Cache::srcpkgcache \\\"\\\";' >> /etc/apt/apt.conf.d/docker-clean \\t\\t&& echo 'Acquire::Languages \\\"none\\\";' > /etc/apt/apt.conf.d/docker-no-languages \\t\\t&& echo 'Acquire::GzipIndexes \\\"true\\\"; Acquire::CompressionTypes::Order:: \\\"gz\\\";' > /etc/apt/apt.conf.d/docker-gzip-indexes \\t\\t&& echo 'Apt::AutoRemove::SuggestsImportant \\\"false\\\";' > /etc/apt/apt.conf.d/docker-autoremove-suggests\", Size:194577, Comment:\"\"}, docker.ImageHistory{ID:\"<missing>\", Tags:[]string(nil), Created:1556317327, CreatedBy:\"/bin/sh -c #(nop) ADD file:574946dfc7122f93072b0dceadf9c1e51f8f1ecf3d4c09ea0b6e2b61544c955f in / \", Size:188001151, Comment:\"\"}}\n\n"
time="2020-02-07T12:07:32-05:00" level=debug msg="IMAGE INSTRUCTIONS:"
time="2020-02-07T12:07:32-05:00" level=debug msg="# new image"
time="2020-02-07T12:07:32-05:00" level=debug msg="ADD file:574946dfc7122f93072b0dceadf9c1e51f8f1ecf3d4c09ea0b6e2b61544c955f in /"
time="2020-02-07T12:07:32-05:00" level=debug msg="RUN set -xe && \\\n\techo '#!/bin/sh' > /usr/sbin/policy-rc.d && \\\n\techo 'exit 101' >> /usr/sbin/policy-rc.d && \\\n\tchmod +x /usr/sbin/policy-rc.d && \\\n\tdpkg-divert --local --rename --add /sbin/initctl && \\\n\tcp -a /usr/sbin/policy-rc.d /sbin/initctl && \\\n\tsed -i 's/^exit.*/exit 0/' /sbin/initctl && \\\n\techo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup && \\\n\techo '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 && \\\n\techo '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 && \\\n\techo 'Dir::Cache::pkgcache \"\"; Dir::Cache::srcpkgcache \"\";' >> /etc/apt/apt.conf.d/docker-clean && \\\n\techo 'Acquire::Languages \"none\";' > /etc/apt/apt.conf.d/docker-no-languages && \\\n\techo 'Acquire::GzipIndexes \"true\"; Acquire::CompressionTypes::Order:: \"gz\";' > /etc/apt/apt.conf.d/docker-gzip-indexes && \\\n\techo 'Apt::AutoRemove::SuggestsImportant \"false\";' > /etc/apt/apt.conf.d/docker-autoremove-suggests"
time="2020-02-07T12:07:32-05:00" level=debug msg="RUN rm -rf /var/lib/apt/lists/*"
time="2020-02-07T12:07:32-05:00" level=debug msg="RUN mkdir -p /run/systemd && \\\n\techo 'docker' > /run/systemd/container"
time="2020-02-07T12:07:32-05:00" level=debug msg="CMD [\"/bin/bash\"]"
time="2020-02-07T12:07:32-05:00" level=debug msg="ARG DEBIAN_FRONTEND=noninteractive"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get update && apt-get -y upgrade"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y build-essential chrpath curl diffstat gcc-multilib gawk git-core libsdl1.2-dev texinfo unzip wget xterm"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y openssh-client coreutils libreadline-dev rpcbind nfs-common vim jq squashfs-tools quilt mtd-utils"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y bzip2 dosfstools mtools parted syslinux tree gettext parallel bsdmainutils ca-certificates apt-transport-https dos2unix"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get -y install regina-rexx lib32z1 lib32stdc++6 autoconf bc flex bison libtool libfdt-dev python-setuptools python-yaml device-tree-compiler"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c curl http://storage.googleapis.com/git-repo-downloads/repo > /usr/local/bin/repo"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c chmod a+x /usr/local/bin/repo"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y python python-dev python-pip"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y python3.4 python3.4-dev python3-pip python3.4-venv"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y python-lzo"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y openjdk-7-jdk"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c ln -svT \"/usr/lib/jvm/java-7-openjdk-$(dpkg --print-architecture)\" /docker-java-home"
time="2020-02-07T12:07:32-05:00" level=debug msg="ENV JAVA_HOME=/docker-java-home"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c python -m pip install requests crcmod"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c python3.4 -m pip install pip --upgrade"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c python3.4 -m pip install wheel selenium requests crcmod artifactory"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c cd /usr/bin; curl -fL https://getcli.jfrog.io | sh"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c chmod 755 /usr/bin/jfrog"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c pip2 install ubi_reader artifactory"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c apt-get install -y libjson0-dev libjson0 libcurl4-openssl-dev libtool"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c wget -N https://openssl.org/source/openssl-1.0.2h.tar.gz -P ~/   && tar -xzf ~/openssl-1.0.2h.tar.gz -C /tmp   && rm -rf ~/openssl-1.0.2h.tar.gz"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c cd /tmp/openssl-1.0.2h   && ./config --prefix=/usr --openssldir=/usr/lib/openssl -fPIC shared   && make depend   && make   && make install"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add -   && echo \"deb https://dl.google.com/linux/chrome/deb/ stable main\" >> /etc/apt/sources.list.d/google-chrome.list   && apt-get update -qqy   && apt-get -qqy install google-chrome-stable   && rm /etc/apt/sources.list.d/google-chrome.list   && rm -rf /var/lib/apt/lists/* /var/cache/apt/*"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c wget -N http://chromedriver.storage.googleapis.com/$(curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE)/chromedriver_linux64.zip -P ~/   && unzip ~/chromedriver_linux64.zip -d ~/   && rm ~/chromedriver_linux64.zip   && sudo mv -f ~/chromedriver /usr/local/bin/chromedriver   && sudo chown root:root /usr/local/bin/chromedriver   && sudo chmod 0755 /usr/local/bin/chromedriver"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c id build 2>/dev/null || useradd --uid 1000 --create-home build"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c echo \"build ALL=(ALL) NOPASSWD: ALL\" | tee -a /etc/sudoers"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c echo \"dash dash/sh boolean false\" | debconf-set-selections"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c mkdir -p /opt/toolchains"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c chown -R build:build /opt"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c mkdir -p /home/build/.ssh"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c echo -e \"Host *\\n\\tStrictHostKeyChecking no\\n\" > /home/build/.ssh/config"
time="2020-02-07T12:07:32-05:00" level=debug msg="|1 DEBIAN_FRONTEND=noninteractive /bin/sh -c chown -R build:build /home/build/.ssh"
time="2020-02-07T12:07:32-05:00" level=debug msg="USER build"
time="2020-02-07T12:07:32-05:00" level=debug msg="ENV USER=build"
time="2020-02-07T12:07:32-05:00" level=debug msg="WORKDIR /home/build"
time="2020-02-07T12:07:32-05:00" level=debug msg="CMD [\"/bin/sh\" \"-c\" \"\\\"/bin/bash\\\"\"]"
time="2020-02-07T12:07:32-05:00" level=debug msg="# end of image: nandkrishnamoorthy/ubuntu:14.04 (id: sha256:da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a tags: nandkrishnamoorthy/ubuntu:14.04)"
time="2020-02-07T12:07:32-05:00" level=debug
docker-slim[build]: info=image.users exe='build' all='build'
docker-slim[build]: info=image.stack index=0 name='nandkrishnamoorthy/ubuntu:14.04' id='sha256:da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a'
docker-slim[build]: state=image.inspection.done
docker-slim[build]: state=container.inspection.start
time="2020-02-07T12:07:32-05:00" level=info msg="starting instrumented 'fat' container..." app=docker-slim command=build
time="2020-02-07T12:07:32-05:00" level=debug msg="ensureSensorVolume: already have volume = docker-slim-sensor.1.26.1" app=docker-slim command=build component=container.inspector
time="2020-02-07T12:07:32-05:00" level=debug msg="RunContainer: default exposed ports => map[docker.Port]struct {}{\"65501/tcp\":struct {}{}, \"65502/tcp\":struct {}{}}" app=docker-slim command=build component=container.inspector
docker-slim[build]: info=container status=created name=dockerslimk_6080_20200207170732 id=da55cb6d2b7da705aa71aadaae60bfd002eef2fcf9f5d7e9f19af64465002286
time="2020-02-07T12:07:33-05:00" level=debug msg="RunContainer: container NetworkSettings.Ports => map[docker.Port][]docker.PortBinding{\"65501/tcp\":[]docker.PortBinding{docker.PortBinding{HostIP:\"0.0.0.0\", HostPort:\"32777\"}}, \"65502/tcp\":[]docker.PortBinding{docker.PortBinding{HostIP:\"0.0.0.0\", HostPort:\"32776\"}}}" app=docker-slim command=build component=container.inspector
time="2020-02-07T12:07:33-05:00" level=debug msg="ipc.NewClient(127.0.0.1,32777,32776)"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.NewClient: connect wait timeout - 1m0s"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.NewClient: net.DialTimeout(tcp,127.0.0.1:32777,15s) [time=1581095253132799055]"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.Client.Write: remote=127.0.0.1:32777 -> local=127.0.0.1:39958 - conn.Write wc=75 err=<nil> [time=1581095253133149730]"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.Client.Read() - (0xc0001daa20)reader.ReadString => err=<nil> raw=\"[<|]{\\\"tid\\\":\\\"1581095253133068933.1d729566c74d1003\\\",\\\"type\\\":\\\"ft.control\\\"}[|>]\\n\""
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.Client.Read: got raw frame ='[<|]{\"tid\":\"1581095253133068933.1d729566c74d1003\",\"type\":\"ft.control\"}[|>]\n'"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.Client.Read: frame data => tid=1581095253133068933.1d729566c74d1003 type=ft.control body=''"
time="2020-02-07T12:07:33-05:00" level=debug msg="verifyCommandChannel: client.Read() (tid=1581095253133068933.1d729566c74d1003 type=ft.control) result.data=''"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.NewClient: connect wait timeout - 1m0s"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.NewClient: net.DialTimeout(tcp,127.0.0.1:32776,15s) [time=1581095253134485586]"
time="2020-02-07T12:07:33-05:00" level=debug msg="ipc.Client.SendCommand() cmd channel call data='{\"name\":\"cmd.monitor.start\",\"data\":{\"app_name\":\"/bin/sh\",\"app_args\":[\"-c\",\"\\\"/bin/bash\\\"\"],\"app_user\":\"build\",\"includes\":[\"/etc/passwd\"]}}'\n"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.CommandClient.Call: calling c.Write()"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.Client.Write: remote=127.0.0.1:32777 -> local=127.0.0.1:39958 - conn.Write wc=221 err=<nil> [time=1581095253134867050]"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.CommandClient.Call: calling c.Read()"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.Client.Read() - (0xc0001daa20)reader.ReadString => err=<nil> raw=\"[<|]{\\\"tid\\\":\\\"1581095253134818167.7c4d7bbb0407d1e2\\\",\\\"type\\\":\\\"ft.response\\\",\\\"body\\\":{\\\"status\\\":\\\"ok\\\"}}[|>]\\n\""
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.Client.Read: got raw frame ='[<|]{\"tid\":\"1581095253134818167.7c4d7bbb0407d1e2\",\"type\":\"ft.response\",\"body\":{\"status\":\"ok\"}}[|>]\n'"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.Client.Read: frame data => tid=1581095253134818167.7c4d7bbb0407d1e2 type=ft.response body='{\"status\":\"ok\"}'"
time="2020-02-07T12:07:33-05:00" level=debug msg="channel.CommandClient.Call: c.Read() (tid=1581095253134818167.7c4d7bbb0407d1e2 type=ft.response) result.data='{\"status\":\"ok\"}'"
time="2020-02-07T12:07:33-05:00" level=debug msg="ipc.Client.SendCommand() cmd channel call response='{\"status\":\"ok\"}'\n"
docker-slim[build]: info=cmd.startmonitor status=sent
time="2020-02-07T12:07:36-05:00" level=debug msg="channel.Client.Read() - (0xc000428300)reader.ReadString => err=<nil> raw=\"[<|]{\\\"tid\\\":\\\"1581095256136128080.52fdfc072182654f\\\",\\\"type\\\":\\\"ft.event\\\",\\\"body\\\":{\\\"name\\\":\\\"event.monitor.start.done\\\"}}[|>]\\n\""
time="2020-02-07T12:07:36-05:00" level=debug msg="channel.Client.Read: got raw frame ='[<|]{\"tid\":\"1581095256136128080.52fdfc072182654f\",\"type\":\"ft.event\",\"body\":{\"name\":\"event.monitor.start.done\"}}[|>]\n'"
time="2020-02-07T12:07:36-05:00" level=debug msg="channel.Client.Read: frame data => tid=1581095256136128080.52fdfc072182654f type=ft.event body='{\"name\":\"event.monitor.start.done\"}'"
time="2020-02-07T12:07:36-05:00" level=debug msg="ipc.Client.GetEvent(): channel.Recv() - done [tid=1581095256136128080.52fdfc072182654f evt={\"name\":\"event.monitor.start.done\"}]\n"
docker-slim[build]: info=event.startmonitor.done status=received
docker-slim[build]: info=container name=dockerslimk_6080_20200207170732 id=da55cb6d2b7da705aa71aadaae60bfd002eef2fcf9f5d7e9f19af64465002286 target.port.list=[] target.port.info=[] message='YOU CAN USE THESE PORTS TO INTERACT WITH THE CONTAINER'
time="2020-02-07T12:07:36-05:00" level=info msg="watching container monitor..." app=docker-slim command=build
docker-slim[build]: info=continue.after mode=enter message='provide the expected input to allow the container inspector to continue its execution'
docker-slim[build]: info=prompt message='USER INPUT REQUIRED, PRESS <ENTER> WHEN YOU ARE DONE USING THE CONTAINER'
time="2020-02-07T12:07:37-05:00" level=debug msg="version.Check: http status = 200 OK" app=docker-slim

docker-slim[build]: state=container.inspection.finishing
time="2020-02-07T12:07:42-05:00" level=debug msg="ipc.Client.SendCommand() cmd channel call data='{\"name\":\"cmd.monitor.stop\"}'\n"
time="2020-02-07T12:07:42-05:00" level=debug msg="channel.CommandClient.Call: calling c.Write()"
time="2020-02-07T12:07:42-05:00" level=debug msg="RunContainer: Docker event monitor stopped" app=docker-slim command=build component=container.inspector
time="2020-02-07T12:07:42-05:00" level=debug msg="channel.Client.Write: remote=127.0.0.1:32777 -> local=127.0.0.1:39958 - conn.Write wc=110 err=<nil> [time=1581095262575763214]"
time="2020-02-07T12:07:42-05:00" level=debug msg="channel.CommandClient.Call: calling c.Read()"
time="2020-02-07T12:07:42-05:00" level=debug msg="channel.Client.Read() - (0xc0001daa20)reader.ReadString => err=<nil> raw=\"[<|]{\\\"tid\\\":\\\"1581095262575600574.c64981855ad8681d\\\",\\\"type\\\":\\\"ft.response\\\",\\\"body\\\":{\\\"status\\\":\\\"ok\\\"}}[|>]\\n\""
time="2020-02-07T12:07:42-05:00" level=debug msg="channel.Client.Read: got raw frame ='[<|]{\"tid\":\"1581095262575600574.c64981855ad8681d\",\"type\":\"ft.response\",\"body\":{\"status\":\"ok\"}}[|>]\n'"
time="2020-02-07T12:07:42-05:00" level=debug msg="channel.Client.Read: frame data => tid=1581095262575600574.c64981855ad8681d type=ft.response body='{\"status\":\"ok\"}'"
time="2020-02-07T12:07:42-05:00" level=debug msg="channel.CommandClient.Call: c.Read() (tid=1581095262575600574.c64981855ad8681d type=ft.response) result.data='{\"status\":\"ok\"}'"
time="2020-02-07T12:07:42-05:00" level=debug msg="ipc.Client.SendCommand() cmd channel call response='{\"status\":\"ok\"}'\n"
time="2020-02-07T12:07:42-05:00" level=debug msg="'stop' monitor response => '&{ok}'" app=docker-slim command=build component=container.inspector
time="2020-02-07T12:07:42-05:00" level=info msg="waiting for the container to finish its work..." app=docker-slim command=build component=container.inspector
time="2020-02-07T12:07:43-05:00" level=debug msg="channel.Client.Read() - (0xc000428300)reader.ReadString => err=<nil> raw=\"[<|]{\\\"tid\\\":\\\"1581095263786180102.163f5f0f9a621d72\\\",\\\"type\\\":\\\"ft.event\\\",\\\"body\\\":{\\\"name\\\":\\\"event.monitor.stop.done\\\"}}[|>]\\n\""
time="2020-02-07T12:07:43-05:00" level=debug msg="channel.Client.Read: got raw frame ='[<|]{\"tid\":\"1581095263786180102.163f5f0f9a621d72\",\"type\":\"ft.event\",\"body\":{\"name\":\"event.monitor.stop.done\"}}[|>]\n'"
time="2020-02-07T12:07:43-05:00" level=debug msg="channel.Client.Read: frame data => tid=1581095263786180102.163f5f0f9a621d72 type=ft.event body='{\"name\":\"event.monitor.stop.done\"}'"
time="2020-02-07T12:07:43-05:00" level=debug msg="ipc.Client.GetEvent(): channel.Recv() - done [tid=1581095263786180102.163f5f0f9a621d72 evt={\"name\":\"event.monitor.stop.done\"}]\n"
time="2020-02-07T12:07:43-05:00" level=debug msg="sensor event => '&{event.monitor.stop.done <nil>}'" app=docker-slim command=build component=container.inspector
time="2020-02-07T12:07:43-05:00" level=debug msg="sensor event => '&{event.monitor.stop.done <nil>}'" app=docker-slim command=build component=container.inspector
time="2020-02-07T12:07:43-05:00" level=debug msg="ipc.Client.SendCommand() cmd channel call data='{\"name\":\"cmd.sensor.shutdown\"}'\n"
time="2020-02-07T12:07:43-05:00" level=debug msg="channel.CommandClient.Call: calling c.Write()"
time="2020-02-07T12:07:43-05:00" level=debug msg="channel.Client.Write: remote=127.0.0.1:32777 -> local=127.0.0.1:39958 - conn.Write wc=113 err=<nil> [time=1581095263786870165]"
time="2020-02-07T12:07:43-05:00" level=debug msg="channel.CommandClient.Call: calling c.Read()"
time="2020-02-07T12:07:43-05:00" level=debug msg="channel.Client.Read() - (0xc0001daa20)reader.ReadString => err=<nil> raw=\"[<|]{\\\"tid\\\":\\\"1581095263786813896.0d86d1e91e001679\\\",\\\"type\\\":\\\"ft.response\\\",\\\"body\\\":{\\\"status\\\":\\\"ok\\\"}}[|>]\\n\""
time="2020-02-07T12:07:43-05:00" level=debug msg="channel.Client.Read: got raw frame ='[<|]{\"tid\":\"1581095263786813896.0d86d1e91e001679\",\"type\":\"ft.response\",\"body\":{\"status\":\"ok\"}}[|>]\n'"
time="2020-02-07T12:07:43-05:00" level=debug msg="channel.Client.Read: frame data => tid=1581095263786813896.0d86d1e91e001679 type=ft.response body='{\"status\":\"ok\"}'"
time="2020-02-07T12:07:43-05:00" level=debug msg="channel.CommandClient.Call: c.Read() (tid=1581095263786813896.0d86d1e91e001679 type=ft.response) result.data='{\"status\":\"ok\"}'"
time="2020-02-07T12:07:43-05:00" level=debug msg="ipc.Client.SendCommand() cmd channel call response='{\"status\":\"ok\"}'\n"
time="2020-02-07T12:07:43-05:00" level=debug msg="'shutdown' sensor response => '&{ok}'" app=docker-slim command=build component=container.inspector
time="2020-02-07T12:07:43-05:00" level=info msg="shutting down 'fat' container..." app=docker-slim command=build
time="2020-02-07T12:07:44-05:00" level=debug msg="ignoring tar object: files/"
time="2020-02-07T12:07:44-05:00" level=info msg="can't stop the docker-slim container (container is not running)..." app=docker-slim command=build component=container.inspector
docker-slim[build]: state=container.inspection.artifact.processing
time="2020-02-07T12:07:44-05:00" level=info msg="processing instrumented 'fat' container info..." app=docker-slim command=build
time="2020-02-07T12:07:44-05:00" level=info msg="generating AppArmor profile..." app=docker-slim command=build component=container.inspector
time="2020-02-07T12:07:44-05:00" level=debug msg="docker-slim: saving seccomp profile to /usr/local/bin/.docker-slim-state/images/da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a/artifacts/nandkrishnamoorthy-ubuntu-seccomp.json"
docker-slim[build]: state=container.inspection.done
docker-slim[build]: state=building message='building minified image'
time="2020-02-07T12:07:44-05:00" level=debug msg="NewImageBuilder: Using new image instructions => &{Entrypoint:[] ClearEntrypoint:false Cmd:[] ClearCmd:false Workdir: Env:[] ExposedPorts:map[]}"
docker-slim[build]: state=completed
docker-slim[build]: info=results status='MINIFIED BY 422.81X [1473689806 (1.5 GB) => 3485507 (3.5 MB)]'
docker-slim[build]: info=results  image.name=nandkrishnamoorthy/ubuntu.slim image.size='3.5 MB' data=true
docker-slim[build]: info=results  artifacts.location='/usr/local/bin/.docker-slim-state/images/da35019c441c1af5f09a48db656058d33743a08a441d2a88d3decfbda4eda41a/artifacts'
docker-slim[build]: info=results  artifacts.report=creport.json
docker-slim[build]: info=results  artifacts.dockerfile.original=Dockerfile.fat
docker-slim[build]: info=results  artifacts.dockerfile.new=Dockerfile
docker-slim[build]: info=results  artifacts.seccomp=nandkrishnamoorthy-ubuntu-seccomp.json
docker-slim[build]: info=results  artifacts.apparmor=nandkrishnamoorthy-ubuntu-apparmor-profile
docker-slim[build]: state=done
docker-slim[build]: info=report file='slim.report.json'
$docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
nandkrishnamoorthy/ubuntu.slim   latest              82f3b52dcdfe        6 minutes ago       3.49MB
nandkrishnamoorthy/ubuntu        14.04               da35019c441c        9 months ago        1.47GB

In the middle of the output, it wants me to press enter to continue:

USER INPUT REQUIRED, PRESS <ENTER> WHEN YOU ARE DONE USING THE CONTAINER

Am I supposed to have the container running when I run the docker-slim command?

kcq commented 4 years ago

@frakman1 Thank you for opening the ticket! Can you tell me more about your image? What do you mean by It's used for building? What kind of builds do you do with it? What do you build? What kind of build tools do you have there? What's the ENTRYPOINT and CMD instructions for your image?

When you disable HTTP probing docker-slim will pause and wait for your input. It does that to allow you to interact with the container out of band, so docker-slim can observe what's going on with the temporary container it created. You can explicitly configure docker-slim to use a different continue mode (using the --continue-after command line parameter). Other options include timeouts and signals.

frakman1 commented 4 years ago

This image is on Dockerhub and available for you to pull and inspect at your leisure. See here for the Dockerfile details too.

By building I mean I use this image to cross compile code for an embedded system. Think Open-WRT. Its job is to provide artifacts that are used in subsequent stages of the CI/CD process. I hope that makes sense. The problem is that it is huge at about 1.5GB and I need to slim it down while still maintaining the same functionality as before. The CMD instruction is just bash in order to perform all the build/make instructions.

Note that docker run doesn't get run manually on this image and is part of the Devops framework built into Gitlab whereby I just give it the docker image's name and it pulls it and runs it using the script within a .gitlab-ci.yml file. I noticed that some of your optimizations require a different docker run syntax for the slimmed image to work. I hope that isn't the case with my image since I don't have control over that part.

frakman1 commented 4 years ago

@kcq Does the information I provided make sense? Is it possible to use docker-slim with such an application or should I give up on this?

kcq commented 4 years ago

@frakman1 Those references to your Dockerfile are super useful! Thank you for providing them! Short answer, yes, it is possible; however, it'll require extra work where we'll need to use the --include-* parameters in the docker-slim build command. We can also do a trick with a dummy/test app that would be similar (conceptually) to the embedded apps you build (mounting the sample application code, so it's not included in the final image). There's one extra enhancement that's on the todo list that will make things a bit easier (an ability to keep/include the artifacts based on the package name instead of the file or directory paths or binary names). I hope to add this soonish though I still need to figure out the exact timeline for it. In the meantime, we can try using the existing capabilities. If you can share a simple hello world for your embedded environment it'll be super helpful (for testing/verification and for the minification process too).

frakman1 commented 4 years ago

@kcq Thank you for the update. I'm excited that this is not completely a lost cause.

I'm not sure what you mean by providing a simple hello world. The docker container downloads toolchains and code from other repos and compiles them into binaries. Those operations take place after launching the container so I don't see how relevant it is in slimming it down.

What I mean is that there is no running app at the end of the day. All what is needed is a container that can run bash scripts in a full Ubuntu environment.

kcq commented 4 years ago

@frakman1 Yes, even though it's going to be a base/builder image it'll be helpful to simulate what will happen with when you use it to build an actual app. For example, the setup might look like this:

docker-slim \
  build --http-probe=false \
 --include-path "/some/path/in/your/image" \
 --include-path "/another/path/in/your/image" \
  --mount $PWD/dummyapp:/opt/app \
  --entrypoint "make -f /opt/app/Makefile" \
  nandkrishnamoorthy/ubuntu:16.04