---
title: Dockerイメージサイズの軽減について
tags: 
author: [Katsushi21](https://www.docswell.com/user/Katsushi21)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/87DDZKD57G.jpg?width=480
description: Dockerイメージサイズの軽減について by Katsushi21
published: January 18, 24
canonical: https://www.docswell.com/s/Katsushi21/ZLL244-2024-01-18-003557
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/87DDZKD57G.jpg)

1/9
Dockerイメージサイズの
軽減について


# Page. 2

![Page Image](https://bcdn.docswell.com/page/VJPXDKXD78.jpg)

Dockerイメージサイズを小さくするメリット
・イメージのbuild、pushやコンテナのbuildが早くなるので、
CI/CDに効果的
・リポジトリからのイメージのコピーが早くなるため、
障害からの復旧が早まる
2/9


# Page. 3

![Page Image](https://bcdn.docswell.com/page/2EVL1VLGJQ.jpg)

Dockerイメージのサイズについて
3/9
Dockerイメージのサイズは、大まかにイメージレイヤの数と
イメージ内のファイルシステムの容量で決まる
CMD [&quot;node&quot;, &quot;src/index.js&quot;]
app
src
RUN yarn install --production
usr
COPY . .
WORKDIR /app
/
Dockerイメージ
lib
RUN apk add –no-cache python g++
make
lang
bin
FROM node:12-alpine
Dockerfile内のコマンドが
多いほど大きい
prod
イメージ内のファイルが
多いほど大きい


# Page. 4

![Page Image](https://bcdn.docswell.com/page/57GX2L3DEL.jpg)

イメージレイヤ削減によるサイズ軽減？
RUNコマンドを一つにまとめることで、イメージレイヤを減らすと
イメージが軽くなる？
計35.92MB
今回のケースでは、イメージレイヤ数による差は見られなかった
4/9


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4EQ8PY5XJP.jpg)

.dockerignore削減によるサイズ軽減
5/9
ビルドコンテキストに.dockerignoreを配置することで、
不要なファイルがイメージ内に含まれないようにする
Ignore前の
イメージサイズ
ビルドコンテキストのルートに配置し、
相対パスでファイル名を記載する。
記載されたファイル・ディレクトリは、
COPYやADDコマンドで無視される
Volumeによるファイル同期は
問題なく行われる
ignore後の
イメージサイズ


# Page. 6

![Page Image](https://bcdn.docswell.com/page/KJ42YW92E1.jpg)

Multi staging buildによるサイズ軽減
6/9
必要なファイルのみ抽出しつつイメージビルドを行うことで、
最終的なイメージサイズを小さくする
コードビルド
コード実行
コードのビルド(バイナリ化)と
実行を一度に行う場合


# Page. 7

![Page Image](https://bcdn.docswell.com/page/LE1M6YKK7G.jpg)

Multi staging buildによる担当分割
7/9
コードをビルドするイメージとコードを実行するイメージに
分割し、最終的なイメージを小さくする
Builderから
コピーしたバイナリ
models
src
go
Builder
Go+alpine
/
alpine
app
src
middle
ware
data
base
go build
Runner
alpine
app
/
alpine
binary
builderイメージ
runnerイメージ
binary


# Page. 8

![Page Image](https://bcdn.docswell.com/page/GEW3WGDPE2.jpg)

Multi staging buildによるサイズ変化
コードの実行にのみ必要なファイルがイメージに残るため、
イメージサイズが大幅に小さくなる
Multi stagingなし
Multi stagingあり
特に、Golangは実行ファイルがバイナリであるため、
高い効果が期待される
8/9


# Page. 9

![Page Image](https://bcdn.docswell.com/page/47ZV5LG6E3.jpg)

Dockerイメージサイズを小さくするメリット
・.dockerignoreとmulti staging buildを組み合わせることで、
Dockerイメージの削減が見込める
・イメージレイヤの削減によるイメージ軽量化については要検証
・goやjavascriptなど、コードのビルドが必要な場合は、
特にMulti staging buildによるサイズ軽減が見込める
9/9


