CodeGym /コース /Docker SELF /イメージのビルド

イメージのビルド

Docker SELF
レベル 13 , レッスン 3
使用可能

4.1 docker buildコマンドの基本

docker buildコマンドは、DockerfileからDockerイメージを作成するための主な方法だよ。Dockerfileの指示を順番に実行して、レイヤーからイメージを構築するんだ。この講義では、docker buildコマンドがどのように動作するのか、どんなパラメータがあるのか、そして実際にどう使うのかを解説していくね。

docker buildコマンドは、Dockerfileといわゆるビルドコンテキストを使ってイメージをビルドするよ。ビルドコンテキストっていうのは、Dockerがイメージ作成に使うファイルたちのことだよ。それは、例えば自分のマシンにあるローカルフォルダだったり、GitHubのリポジトリだったりするんだ。

構文


docker build [OPTIONS] PATH | URL | -

ここで:

  • PATH: Dockerfileとビルドコンテキストを含むディレクトリへのパス。
  • URL: リモートリポジトリのURLアドレス。
  • -: 標準入力(stdin)からDockerfileを読み込む。

基本的な使い方の例

この例では、Dockerは現在のディレクトリ (.)にあるDockerfileを使って、名前がmyimageでタグがlatestのイメージを作成するよ。

ターミナル

docker build -t myimage:latest .

4.2 buildコマンドのカスタマイズ

docker buildコマンドの主なパラメータ

docker buildコマンドは、多くのオプションをサポートしていて、ビルドプロセスをカスタマイズできるよ。

1. パラメータ -t, --tag

パラメータ-tまたは--tagは、作成するイメージに名前とタグを付けるために使うよ。

ターミナル

docker build -t myimage:latest .

2. パラメータ -f, --file

パラメータ-fまたは--fileは、標準のDockerfileと異なる代替のDockerfileを指定するために使うよ。

ターミナル

docker build -f Dockerfile.dev -t myimage:dev .

3. パラメータ --build-arg

パラメータ--build-argは、Dockerfile内のARG命令で定義されたビルド引数を渡すために使うよ。

ターミナル

docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .

4. パラメータ --no-cache

パラメータ--no-cacheは、キャッシュを使用せずにビルドを実行するために使うんだ。すべてのコマンドを再実行する必要がある場合に便利だよ。

ターミナル

docker build --no-cache -t myimage:latest .

5. パラメータ --target

パラメータ--targetは、マルチステージビルドで対象のステージを指定するために使うよ。

ターミナル

docker build --target builder -t myimage:builder .

6. パラメータ --rm

パラメータ--rmは、イメージのビルドが成功した後に中間コンテナを削除するようDockerに指示するために使うよ(デフォルトで有効になっている)。

ターミナル

docker build --rm -t myimage:latest .

4.3 docker buildの例

例 1: 基本的なビルド

Node.jsのシンプルなアプリケーションを持っていて、それをデプロイするためのDockerイメージを作成したいとします。

Dockerfile:

dockerfile

FROM node:14

WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

ビルドコマンド:

Terminal

docker build -t mynodeapp:latest .

この例では、Dockerは現在のディレクトリにあるDockerfileを用いて、mynodeappという名前でタグlatestのイメージを作成します。

例 2: 引数を使用したビルド

ビルド引数を使うと、ビルド時にDockerfileに変数を渡すことができます。

Dockerfile

dockerfile

FROM node:14

ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION}
        
WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

ビルドコマンド:

Terminal

docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .

この例では、引数APP_VERSIONがDockerfileに渡され、ビルド中にアプリケーションのバージョンを設定できるようになります。

例 3: マルチステージビルド

マルチステージビルドは、必要なコンポーネントだけを含むイメージを作成するのに使用されます。これにより、最終的なイメージのサイズを小さくできます。

Dockerfile

Dockerfile


# ビルドステージ
FROM node:14 AS builder
        
WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
RUN npm run build
        
# 必要最低限のファイルで最終イメージを作成
FROM nginx:alpine
        
COPY --from=builder /app/build /usr/share/nginx/html

ビルドコマンド:

Terminal


docker build -t mywebapp:latest .

この例では、最初にbuilderという中間イメージを作成し、その中でアプリケーションをビルドします。ビルド後、アプリケーションはNginxを使用して静的コンテンツを提供する最終イメージに移動されます。

4.4 実践的なアドバイス

1. 命令の順序を最適化

Dockerのキャッシュを効率的に使うには、命令を正しく順序付けることが重要だよ。例えば、package.jsonのようなあまり変更されないファイルを最初にコピーして、依存関係の再構築を最小限に抑えよう。その後、その他のファイルをコピーしてね。

dockerfile

COPY package*.json ./
RUN npm install
COPY . .

2. .dockerignore の使用

.dockerignore ファイルを追加して、ビルドコンテキストから不要なファイルやディレクトリを除外しよう。これによりコンテキストのサイズが小さくなり、イメージのビルドが速くなるよ。

.dockerignore の例:

Text

node_modules
dist
*.log

3. マルチステージビルド

ミニマリスティックで軽量なイメージを作成するためにマルチステージビルドを採用しよう。このアプローチでは、アプリケーションの動作に本当に必要なファイルや依存関係だけを含めることができ、最終的なイメージからは不要なデータ(例えば、一時ファイルやソースコード)を除外できるよ。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION