banner
云野阁

云野阁

闲云野鹤,八方逍遥

Slim縮小コンテナイメージサイズ

前言#

🔜Slim🔚

GitHub - slimtoolkit/slim: Slim(toolkit):コンテナイメージの内容を変更せず、最大 30 倍(コンパイル言語の場合はさらに多く)に縮小し、安全に保つ!(無料およびオープンソース)

Slim は、コンテナイメージを変更せずに最大 30 倍まで縮小できるコンテナツールです。このツールは、さまざまなプラットフォームとアーキテクチャに対応しています。本記事では、Linux プラットフォームの X86_64 アーキテクチャにおける Slim の使用方法を主に紹介します。

GitHub では、以下のコンテナイメージの最適化前後のサイズの例が示されています:

Node.js アプリケーションイメージ:

  • ubuntu:14.04 から - 432MB => 14MB (縮小 30.85 倍)
  • debian:jessie から - 406MB => 25.1MB (縮小 16.21 倍
  • node:alpine から - 66.7MB => 34.7MB(縮小 1.92 倍
  • node:distroless から - 72.7MB => 39.7MB (縮小 1.83 倍

Python アプリケーションイメージ:

  • ubuntu:14.04 から - 438MB => 16.8MB (縮小 25.99 倍)
  • python:2.7-alpine から - 84.3MB => 23.1MB (縮小 3.65 倍
  • python:2.7.15 から - 916MB => 27.5MB (縮小 33.29 倍)
  • centos:7 から - 647MB => 23MB (縮小 28.57 倍
  • centos/python-27-centos7 から - 700MB => 24MB(縮小 29.01 倍
  • python2.7:distroless から - 60.7MB => 18.3MB (縮小 3.32 倍

Ruby アプリケーションイメージ:

  • ubuntu:14.04 から - 433MB => 13.8MB (縮小 31.31 倍)
  • ruby:2.2-alpine から - 319MB => 27MB (縮小 11.88 倍)
  • ruby:2.5.3 から - 978MB => 30MB (縮小 32.74 倍)

Go アプリケーションイメージ:

  • golang:latest から - 700MB => 1.56MB (縮小 448.76 倍)
  • ubuntu:14.04 から - 531MB => 1.87MB (縮小 284.10 倍)
  • golang:alpine から - 258MB => 1.56MB (縮小 165.61 倍)
  • centos:7 から - 615MB => 1.87MB (縮小 329.14 倍)

Rust アプリケーションイメージ:

  • rust:1.31 から - 2GB => 14MB (縮小 147.16 倍)

Java アプリケーションイメージ:

  • ubuntu:14.04 から - 743.6MB => 100.3MB

PHP アプリケーションイメージ:

  • php:7.0-cli から - 368MB => 26.6MB (縮小 13.85 倍

Haskell アプリケーションイメージ:

  • (Scotty サービス)haskell:8 から - 2.09GB => 16.6MB (縮小 125.32 倍)
  • (Scotty サービス)haskell:7 から - 1.5GB => 21MB (縮小 71 倍)

Elixir アプリケーションイメージ:

  • (Phoenix サービス)elixir:1.6 から - 1.1GB => 37MB (縮小 29.25 倍

Slim のインストールと使用#

Slim は、バイナリファイルの解凍インストール、スクリプトによるワンクリックインストール、イメージのプルインストールなど、さまざまなインストール方法を提供しています。ここでは、nginx、tomcat、httpd イメージを例に、イメージの縮小を行います。

バイナリファイルの解凍インストール#

# バイナリファイルをダウンロード
curl -L -o ds.tar.gz https://github.com/slimtoolkit/slim/releases/download/1.40.11/dist_linux.tar.gz
# ファイルを解凍し、インストーラーを移動
tar -xvf ds.tar.gz
mv  dist_linux/slim /usr/local/bin/
mv  dist_linux/slim-sensor /usr/local/bin/
# バージョンを確認
slim -v


# 縮小コマンドを実行
slim build イメージID 

スクリプトによるワンクリックインストール#

この方法は、Linux(x86 および ARM)および macOS(x86 および Apple Silicon)で使用できます。

curl -sL https://raw.githubusercontent.com/slimtoolkit/slim/master/scripts/install-slim.sh | sudo -E bash -

# 縮小コマンドを実行
slim build イメージID

イメージ縮小前のサイズ

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 39286ab8a5e1 3 weeks ago 188MB
tomcat latest c2a444ea6cd7 4 weeks ago 508MB

コマンドを実行して縮小

slim build 39286ab8a5e1
cmd=build info=param.http.probe message='using default probe'
cmd=build state=started
cmd=build info=params image-build-engine='internal' target.type='image' target.image='39286ab8a5e1' continue.mode='probe' rt.as.user='true' keep.perms='true' tags=''
cmd=build state=image.inspection.start
cmd=build info=image id='sha256:39286ab8a5e14aeaf5fdd6e2fac76e0c8d31a0c07224f0ee5e6be502f12e93f3' size.bytes='187706879' size.human='188 MB'
cmd=build info=image.stack id='sha256:39286ab8a5e14aeaf5fdd6e2fac76e0c8d31a0c07224f0ee5e6be502f12e93f3' index='0' name='nginx'
......

slim build c2a444ea6cd7
cmd=build info=param.http.probe message='using default probe'
cmd=build state=started
cmd=build info=params continue.mode='probe' rt.as.user='true' keep.perms='true' tags='' image-build-engine='internal' target.type='image' target.image='c2a444ea6cd7'
cmd=build state=image.inspection.start
cmd=build info=image size.bytes='507583233' size.human='508 MB' id='sha256'
cmd=build info=image.stack id='sha256' index='0' name='tomcat'
cmd=build info=image.exposed_ports list='8080/tcp'
cmd=build state=image.inspection.done
cmd=build state=container.inspection.start
cmd=build info=container status='created' name='slimk_5648_20240905085045' id='a62eca6f410e99620c4050b063ab6d8ebe1d0b60340e0ac47da88dce4902f97c'
......

イメージ縮小後のサイズ

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat.slim latest 97901079a904 21 seconds ago 212MB
nginx.slim latest 9131fc2c397d 3 minutes ago 13.3MB
nginx latest 39286ab8a5e1 3 weeks ago 188MB
tomcat latest c2a444ea6cd7 4 weeks ago 508MB

コンテナインストール#

# イメージをプル
docker pull dslim/slim
# 縮小コマンドを実行
docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock dslim/slim build イメージID

イメージ縮小前のサイズ

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat.slim latest 97901079a904 7 minutes ago 212MB
nginx.slim latest 9131fc2c397d 10 minutes ago 13.3MB
nginx latest 39286ab8a5e1 3 weeks ago 188MB
tomcat latest c2a444ea6cd7 4 weeks ago 508MB
httpd latest 9cb0a2315602 7 weeks ago 148MB
dslim/slim latest 6205a57fba8b 7 months ago 56.3MB

イメージ縮小コマンドを実行

docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock dslim/slim build 9cb0a2315602

cmd=build info=param.http.probe message='using default probe'
cmd=build state=started
cmd=build info=params continue.mode='probe' rt.as.user='true' keep.perms='true' tags='' image-build-engine='internal' target.type='image' target.image='9cb0a2315602'
cmd=build state=image.inspection.start
cmd=build info=image id='sha256:9cb0a231560203a9b46325ef6dfe0d21d524813acb74447fd276b9813a9fdd44' size.bytes='148177949' size.human='148 MB'
cmd=build info=image.stack index='0' name='httpd' id='sha256:9cb0a231560203a9b46325ef6dfe0d21d524813acb74447fd276b9813a9fdd44'
cmd=build info=image.exposed_ports list='80/tcp'
cmd=build state=image.inspection.done
cmd=build state=container.inspection.start
cmd=build info=container status='created' name='slimk_1_20240905090155' id='6d058318cd7729d4e3831a4aecb5d2884853bc2efbf1d6a6d233f04ade3225a5'
cmd=build info=container status='running' name='slimk_1_20240905090155' id='6d058318cd7729d4e3831a4aecb5d2884853bc2efbf1d6a6d233f04ade3225a5'
cmd=build info=container message='obtained IP address' ip='172.17.0.3'
cmd=build info=cmd.startmonitor status='sent'
cmd=build info=event.startmonitor.done status='received'
cmd=build info=container name='slimk_1_20240905090155' id='6d058318cd7729d4e3831a4aecb5d2884853bc2efbf1d6a6d233f04ade3225

......

イメージ縮小後のサイズ

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd.slim latest 692af09a91c2 57 seconds ago 8.13MB
tomcat.slim latest 97901079a904 9 minutes ago 212MB
nginx.slim latest 9131fc2c397d 12 minutes ago 13.3MB
nginx latest 39286ab8a5e1 3 weeks ago 188MB
tomcat latest c2a444ea6cd7 4 weeks ago 508MB
httpd latest 9cb0a2315602 7 weeks ago 148MB
dslim/slim latest 6205a57fba8b 7 months ago 56.3MB

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。