コンテンツにスキップ

docker-slim を触ってみた

docker-slim 概要

docker-slim(SlimToolkit)は Docker コンテナイメージのサイズを削減するツールだ。README によると、イメージを最大 1/30 のサイズにできる。次の例では archlinux の image にslimを実行し、curlを実行できるイメージを 467MB から 17.4MB まで縮小している。

>> 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>

各サブコマンドの説明は、SlimToolkit の README の COMMANDSによる。

  • xray: イメージの Dockerfile の「リバースエンジニアリング」を含め、対象のコンテナイメージを静的分析する。コンテナイメージの中身と肥大化の原因を知りたい場合に使用する。
  • lint: Dockerfiles のコンテナ命令を分析する (Docker イメージのサポートは WIP である)。
  • build: コンテナイメージを分析、プロファイリング、および最適化し、サポートされているセキュリティプロファイルを生成する。最も一般的なコマンドである。
  • registry: レジストリを操作する。
  • profile: 基本的なコンテナイメージ分析と動的コンテナ分析をするが、最適化されたイメージは生成しない。
  • run: 1 つまたは複数のコンテナを実行するためのコマンド。ただし 2023 年 5 月時点の README では、docker run と同様に単一のコンテナだけを実行するとされている。
  • version: バージョン情報を表示する。
  • update: slimを最新バージョンに更新する。
  • help: 使用可能なコマンドとグローバルフラグを表示する

実際に触ってみた

Python3 の FastAPI を使った Docker image に対してslimコマンドを実行してみた。1.2GB あったイメージサイズが 40MB まで小さくなったが、元のイメージで動いていたアプリケーションがエラーで立ち上がらなくなった。http-probeあたりが怪しいと思ったが解消はできなかった。 運用フェーズで利用するには、slim buildで作ったイメージを十分にテストする必要があると感じた。

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