手順
# サンプルnode.jsアプリのDockerイメージを作成する
~ $ git clone https://github.com/docker-slim/examples.git
# node_ubuntuのDockerfileがあるディレクトリに移動
~ $ cd examples/node_ubuntu/
# Dockerfileをビルドし,イメージを作成
~ $ docker build -t my/sample-node-app .
# 作成したイメージに対して,docker-slimを適用する
~ $ docker-slim build my/sample-node-app
サイズ削減度合いは??
~ $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my/sample-node-app.slim latest b2c7843a52fa 3 hours ago 14MB
my/sample-node-app latest 3c6ddc217be2 4 hours ago 414MB
下が元のイメージ,上が最適化した後のイメージです.
docker-slimで最適化したイメージには「.slim」が後ろに追加されるようです.
サイズは414MBから14MBまで小さくなってます.
何が起きてるのか。。
dockerfileの比較
- docker-slimを適応したイメージのdockerfileは以下のディレクトリにある
- [docker-slim directory]/.images/[YOUR_APP_IMAGE_ID]/artifacts/
Dockerfile-before
FROM ubuntu:14.04
RUN apt-get update && \
apt-get install -y curl software-properties-common python-software-properties && \
add-apt-repository ppa:chris-lea/node.js && \
apt-get update && \
apt-get install -y build-essential \
nodejs && \
mkdir -p /opt/my/service
COPY service /opt/my/service
WORKDIR /opt/my/service
RUN npm install
EXPOSE 1300
ENTRYPOINT ["node","/opt/my/service/server.js"]
Dockerfile-after
FROM scratch
LABEL docker-slim.version="darwin|Transformer|1.32.0|10b628fc3cd9f903237b9c31a6aba5ac4e6bc9c8|2020-08-24_06:14:32AM"
ENV PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ADD files.tar /
WORKDIR /opt/my/service
EXPOSE 1300/tcp
ENTRYPOINT ["node","/opt/my/service/server.js"]
FROM句が ubuntu:14.04 から scratch に変わっています.
FROM scratch はベースが無いということを意味していて,ベースOSの部分から書いているということを示しているようです.
OS部分は ADD ubuntuのファイルシステムを圧縮したものだと想定されるfiles.tarが担っているみたい.
参考リンク
- docker-slimを使ってDockerイメージのダイエット