DockerSlimを利用してイメージを軽量化してみた

  • 投稿者:
  • 投稿カテゴリー:docker

DockerSlimは不要なファイルを削除するなどしてイメージを軽量化する。
またコンテナが必要なシステムコールを抽出して、seccompプロファイルを作成する。

DockerSlimのインストール

# wget -d https://downloads.dockerslim.com/releases/1.35.2/dist_linux.tar.gz
# tar xzvf dist_linux.tar.gz
# cp dist_linux/docker-slim /usr/bin/
# cp dist_linux/docker-slim-sensor /usr/bin/
# docker-slim --version
docker-slim version linux|Transformer|1.35.2|186f87fbee28f404a96e2204ea2b51014f32cff4|2021-05-03_02:30:01AM

nginxイメージを軽量化してみた

133MB を 11.1MB に軽量化できた。

# docker run -d -p 80:80 nginx

# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS        PORTS                               NAMES
d58fc2e1bf5a   nginx     "/docker-entrypoint.…"   2 seconds ago   Up 1 second   0.0.0.0:80->80/tcp, :::80->80/tcp   brave_cartwright
# docker stop d58fc2e1bf5a

# docker images
REPOSITORY         TAG           IMAGE ID       CREATED         SIZE
nginx              latest        f0b8a9a54136   4 days ago      133MB

# docker-slim build nginx
...
cmd=build info=results artifacts.location='/tmp/docker-slim-state/.docker-slim-state/images/f0b8a9a541369db503ff3b9d4fa6de561b300f7363920c2bff4577c6c24c5cf6/artifacts'
cmd=build info=results artifacts.report='creport.json'
cmd=build info=results artifacts.dockerfile.reversed='Dockerfile.fat'
cmd=build info=results artifacts.dockerfile.optimized='Dockerfile'
cmd=build info=results artifacts.seccomp='nginx-seccomp.json'
cmd=build info=results artifacts.apparmor='nginx-apparmor-profile'
cmd=build state=done
...

# docker images
REPOSITORY         TAG           IMAGE ID       CREATED              SIZE
nginx.slim         latest        18b5a5a26e22   About a minute ago   11.1MB
nginx              latest        f0b8a9a54136   4 days ago           133MB

# docker run -d -p 80:80 nginx.slim

# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS        PORTS                               NAMES
7c5736658b48   nginx.slim   "/docker-entrypoint.…"   3 seconds ago   Up 1 second   0.0.0.0:80->80/tcp, :::80->80/tcp   romantic_beaver

seccompプロファイルは以下場所に保存された。

tmp/docker-slim-state/.docker-slim-state/images/f0b8a9a541369db503ff3b9d4fa6de561b300f7363920c2bff4577c6c24c5cf6/artifacts/nginx-seccomp.json