DockerfileとDockerイメージについて

102 Views

January 18, 24

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

1/9 Dockerfileと Dockerイメージについて

2.

DockerfileとDockerイメージについて docker build Docker イメージ 2/9 Docker run Dockerfileに、作成されるコンテナの定義や アクションを記述する DockerfileやDockerイメージを渡すことで、 誰でも同じ実行環境を構築できる コンテナ

3.

Dockerfileの構成について Dockerfileに書き込むコマンドは、ベースとなる「FROM」を除き、 二種類に大別できる ・Docker build時に実行される処理 COPY: ホストからコンテナへのファイルコピー WORKDIR: ワークディレクトリの指定 RUN: 任意のコマンドの実行 など ・Docker run時に実行される処理 ENV: 環境変数の設定 CMD: 任意のコマンドの実行 など 3/9

4.

Dockerイメージの構成について 4/9 Dockerイメージは一つのファイルではなく、 抽象的なイメージレイヤの集合体である CMD ["node", "src/index.js"] RUN yarn install --production COPY . . Docker イメージ WORKDIR /app docker build RUN apk add –no-cache python g++ make FROM node:12-alpine Docker~.img Dockerイメージ Dockerfileに記述したコマンドがイメージレイヤを作り、 レイヤ間の親子関係を構成する

5.

Dockerイメージとイメージレイヤについて 5/9 ・イメージレイヤはすべて読み取り専用である ・各イメージレイヤが持つファイルシステムが一つに統合される CMD ["node", "src/index.js"] app RUN yarn install --production COPY . . / bin prod usr / app src FROM node:12-alpine / Dockerイメージ WORKDIR /app RUN apk add –no-cache python g++ make src / bin usr / lib lang lang bin prod lib それぞれのイメージレイヤが持つ ファイルシステムが多数存在 Dockerイメージ利用時、ファイルシステムは 1つのみのように見える

6.

良いDockerfileを作るには 6/9 ・レイヤ統合と中間ファイルを意識し、Dockerイメージを軽量化する ・キャッシュを意識してレイヤを構成し、docker buildを高速化する

7.

レイヤを統合して中間ファイルを削減する 7/9 イメージレイヤは読み取り専用であるため、同じレイヤ内でのみ ファイルシステムの変更ができる RUN rm –rf /var/lib/apt/lists/* / RUN apt -get install -y 削除不可 RUN apt -get update / FROM ubuntu:18.04 ... ... RUN apt -get update && ¥ apt-get install –y \ rm –rf /var/lib/apt/lists/* lists 同じレイヤのため、 削除可能 lists FROM ubuntu:18.04 docker runを実行すると、どちらもlistsディレクトリが空のコンテナが作られるが、 イメージファイルのサイズは大きく異なる

8.

変更レイヤを後にしてキャッシュを活用する 2回目以降のdocker buildにおいて、COPY、ADDで扱うファイルに 変更があった場合、以降のコマンドはすべてキャッシュ無効になる 1回目 ① ② docker build 両方とも同じ程度の時間がかかった ① ./appに変更を加え、2回目 ② docker build ②のみ、高速で完了した 頻繁に変更されるファイルやディレクトリを扱うレイヤを後に記述することで、 キャッシュを用いて快適にイメージビルドができる 8/9

9.

綺麗なDockerfileを書くための「hadolint」 Docker公式のベストプラクティスに則り、Dockerfileを解析するツール Mac: brew install hadolint windows: scoop install hadolint でインストール後、 hadolintコマンドでDockerfileを指定して解析する VScodeに拡張機能をインストールすると、 リアルタイムでチェック可能になる 9/9