Squash機能を利用する(1.13以降に追加された試験的な機能)
1. Docker Daemon プロセスを開始する前に、実験パラメータを true に設定します。docker
v20 バージョンは、/etc/docker/daemon.json
以下を変更することで有効になります。
{
"experimental": true
}
2. 作成した dockerfile は以前のものと変わりません
3. コンパイル時に--squash
パラメータを追加します。
docker build --squash -t xxx:xxx .
squash 機能は画像のサイズを圧縮し、画像の構成情報を保存しますが、この方法は実験的なものであるため、使用には注意が必要です。
より小さいベースイメージを使用する
- システム イメージは、Ubuntu、CentOs、Alpine、scratch、buybox などを使用します。
- 公式 Web サイトのイメージの多くはスリム バージョンを提供しています
が、上記の方法の欠点は、基本イメージのサイズが小さいため、必要な依存関係やツールが不足している可能性があり、徐々に補完する必要があり、多大な作業がかかることです。 。
Dockerfile命令の最適化
命令のスプライシング
Dockerfile を定義する場合、RUN
命令を複数回使用すると複数のイメージ レイヤーが生成され、イメージが肥大化します。複数の命令は 1 つに連結される必要がありますRUN
(演算子 sum によって実装されます) &&
。/
命令の最適化
RUN コマンドで実行するとapt
、コマンド自体apk
の構成オプションを使用して、イメージ レイヤーの数とイメージ サイズを削減できます。yum
- 実行
apt-get install -y
中にオプションを追加すると--no-install-recommends
、推奨される (必須ではない) 依存関係をインストールする必要がなくなります。また、実行中にapk add
オプションを追加して--no-cache
同じ効果を得ることができます。 - 実行中に
yum install -y
、次のような複数のツールが同時にインストールされますyum install -y gcc gcc-c++ make
。 - コンポーネントの取り付けとクリーニングは、次のように 1 つの命令で直列に接続する必要があります。
apt-get install zip && rm -rf /var/cache/apk/*
エクスポートおよびインポートの手順を使用する
# 启动一个容器
docker run -d --name test test:2.0
# 利用export和import将容器导出变为镜像
docker export test | docker import - test:3.0
この方法でもイメージ サイズを効果的に削減できますが、イメージ ビルド情報が失われます。