Advertisement
Advertisement

More Related Content

Advertisement

20210813_dockerfile.pptx

  1. Dockerfileと Dockerイメージにつ いて 1/9
  2. DockerfileとDockerイメージについて Dockerfileに、作成されるコンテナの定義や アクションを記述する docker build Docker イメージ Docker run コンテナ DockerfileやDockerイメージを渡すことで、誰 でも同じ実行環境を構築できる 2/9
  3. Dockerfileの構成について Dockerfileに書き込むコマンドは、ベースとなる「FROM」を除き、 二種類に大別できる ・Docker build時に実行される処理 ・Docker run時に実行される処理 COPY: ホストからコンテナへのファイルコピー WORKDIR: ワークディレクトリの指定 RUN: 任意のコマンドの実行 など ENV: 環境変数の設定 CMD: 任意のコマンドの実行 など 3/9
  4. Dockerイメージの構成について Dockerイメージは一つのファイルではなく、 抽象的なイメージレイヤの集合体である Docker イメージ Docker~.img FROM node:12-alpine RUN apk add –no-cache python g++ make WORKDIR /app COPY . . RUN yarn install --production CMD ["node", "src/index.js"] docker build Dockerイメージ Dockerfileに記述したコマンドがイメージレイヤを作り、 レイヤ間の親子関係を構成する 4/9
  5. Dockerイメージとイメージレイヤにつ いて FROM node:12-alpine RUN apk add –no-cache python g++ make WORKDIR /app COPY . . RUN yarn install --production CMD ["node", "src/index.js"] ・イメージレイヤはすべて読み取り専用である ・各イメージレイヤが持つファイルシステムが一つに統合される / usr lib / bin / src app / prod bin lang / usr lib Dockerイメージ src app prod bin lang Dockerイメージ利用時、ファイルシステムは1 つのみのように見える それぞれのイメージレイヤが持つ ファイルシステムが多数存在 5/9
  6. 良いDockerfileを作るには ・レイヤ統合と中間ファイルを意識し、Dockerイメージを軽量化する ・キャッシュを意識してレイヤを構成し、docker buildを高速化する 6/9
  7. レイヤを統合して中間ファイルを削減 する イメージレイヤは読み取り専用であるため、同じレイヤ内でのみ ファイルシステムの変更ができる FROM ubuntu:18.04 RUN apt-get update RUN apt-get install -y RUN rm –rf /var/lib/apt/lists/* FROM ubuntu:18.04 RUN apt-get update && ¥ apt-get install –y rm –rf /var/lib/apt/lists/* / lists ... 削除不可 / lists ... 同じレイヤのため、 削除可能 docker runを実行すると、どちらもlistsディレクトリが空のコンテナが作られるが、 イメージファイルのサイズは大きく異なる 7/9
  8. 変更レイヤを後にしてキャッシュを活 用する 2回目以降のdocker buildにおいて、COPY、ADDで扱うファイルに 変更があった場合、以降のコマンドはすべてキャッシュ無効になる 両方とも同じ程度の時間がかかった docker build 1回目 docker build ./appに変更を加え、2回目 ① ② ① ② ②のみ、高速で完了した 頻繁に変更されるファイルやディレクトリを扱うレイヤを後に記述することで、 キャッシュを用いて快適にイメージビルドができる 8/9
  9. 綺麗なDockerfileを書くための 「hadolint」 Docker公式のベストプラクティスに則り、Dockerfileを解析するツール Mac: brew install hadolint windows: scoop install hadolint でインストール後、 hadolintコマンドでDockerfileを指定して解析する VScodeに拡張機能をインストールすると、 リアルタイムでチェック可能になる 9/9
Advertisement