コンテンツにスキップ

docker-slim を触ってみた

docker-slim 概要

docker-slim(SlimToolkit)は Docker コンテナイメージのサイズを小さくするツール。最大 1/30 のサイズになる。 archlinux の image を使って slim を実行した例。

>> docker pull archlinux:latest
...

>> slim build --target archlinux:latest --tag archlinux:curl --http-probe=false --exec "curl checkip.amazonaws.com"
...

>> docker run archlinux:curl curl checkip.amazonaws.com
...

>> docker images
archlinux                 curl                ...        ...         17.4MB
archlinux                 latest              ...        ...         467MB
...

install

brew でインストールできる。

brew install docker-slim

usage

slim [global flags] [lint|xray|build|profile|update|version|help] [command-specific flags] <IMAGE_ID_OR_NAME>
  • xray:ターゲット コンテナー イメージの静的分析をします (イメージの Dockerfile の「リバース エンジニアリング」を含む)。コンテナー イメージの中身と、それが肥大化している原因を知りたい場合は、このコマンドを使用します。
  • lint: Dockerfiles のコンテナー命令を分析します (Docker イメージのサポートは WIP です)。
  • build:サポートされているセキュリティ プロファイルを生成するコンテナー イメージを分析、プロファイリング、および最適化します。これは最も一般的なコマンドです。
  • registry:レジストリ操作します。
  • profile:基本的なコンテナー イメージ分析と動的コンテナー分析をしますが、最適化されたイメージは生成しません。
  • run: 1 つまたは複数のコンテナーを実行します (現在はに似た単一のコンテナーを実行します docker run)
  • version:バージョン情報を表示します。
  • update: Slim を最新バージョンに更新します。
  • help: 使用可能なコマンドとグローバル フラグを表示する

実際に触ってみた

Python3 の FastAPI を使った Docker image に対して slim コマンドを実行してみた。1.2GB あったイメージサイズが 40MB まで小さくなったが、元のイメージの時は動いていたアプリがエラーで立ち上がらなくなった。http-probeあたりが怪しいと思ったが解消はできなかった。 slim 後のイメージをしっかりテストしないと運用までできないと思った。

slim build --target fastapi-app:latest --http-probe=false