Docker マルチステージビルドのチャレンジ

DockerIntermediate
オンラインで実践に進む

はじめに

Docker マルチステージビルドは、Dockerfile 内で複数のステージを使用し、最終的なDockerイメージを作成できる機能です。このチャレンジでは、Docker マルチステージビルドを活用して、より軽量で効率的なDockerイメージを作成する方法を習得します。

マルチステージビルドを用いた Dockerfile の作成

このセクションでは、マルチステージビルドを利用した Dockerfile を作成します。

タスク

  • 2つのステージを使用する新しい Dockerfile を作成してください。最初のステージでは、必要な依存関係をインストールしてビルドスクリプトを実行し、アプリケーションをビルドします。2番目のステージでは、最初のステージからコンパイル済みのコードをコピーし、本番環境用の依存関係のみをインストールして、必要なポートを公開する最終イメージを作成します。

実行する手順の例を以下に示します。

  1. myapp という名前の新しいディレクトリを作成し、その中に移動します。

    mkdir myapp
    cd myapp
    
  2. NodeJSのソースコードを https://github.com/labex-labs/nodejs-example.git からダウンロードします。

    git clone https://github.com/labex-labs/nodejs-example.git
    

    ダウンロードしたコードを myapp ディレクトリに移動します。

    mv nodejs-example/* .
    rm -rf nodejs-example
    
  3. myapp ディレクトリ内に Dockerfile という名前の新しいファイルを作成し、以下の内容を記述します。

    ## Stage 1: Build the application
    FROM node:14-alpine AS base
    WORKDIR /app
    COPY . ./
    RUN npm install
    
    ## Stage 2: Create the final image
    FROM node:14-alpine
    WORKDIR /app
    COPY --from=base /app/ .
    EXPOSE 3000
    CMD [ "npm", "start" ]
    

要件

このチャレンジを完了するには、以下の作業が必要です。

  • /home/labex/project ディレクトリ内に myapp という名前のディレクトリを作成すること。
  • NodeJSのソースコードを myapp ディレクトリにクローンすること。
  • 指定された内容で myapp ディレクトリ内に Dockerfile を作成すること。

Docker イメージのビルド

このステップでは、Dockerfile を使用してイメージを作成します。

タスク

  • myapp という名前の新しいイメージをビルドしてください。

達成すべき内容の例を以下に示します。

  1. docker build コマンドを使用して、myapp という名前の新しいイメージをビルドします。

    docker build -t myapp .
    
  2. docker images を使用して、イメージが正常にビルドされたことを確認します。

要件

このチャレンジを完了するには、以下の作業が必要です。

  • /home/labex/project/myapp ディレクトリで docker build コマンドを実行すること。
  • イメージ名を myapp にすること。

Docker コンテナの実行

このステップでは、作成したDockerイメージを使用してコンテナを実行します。

タスク

  • myapp イメージを使用してコンテナを実行してください。コンテナのポート 3000 をホストのポート 3030 にマッピングし、ブラウザからアプリケーションにアクセスしてください。

達成すべき内容の例を以下に示します。

  1. my-app という名前の新しいDockerコンテナを起動します。

    docker run --name my-app -p 3030:3000 myapp
    
  2. Webブラウザを開き、http://localhost:3030 にアクセスして、実行中のアプリケーションを確認します。

要件

このチャレンジを完了するには、以下の作業が必要です。

  • コンテナ名を my-app として実行すること。
  • コンテナ内のポート 3000 をホストのポート 3030 にマッピングすること。

まとめ

このチャレンジでは、Docker マルチステージビルドを使用して、より小さく効率的なDockerイメージを作成する方法を学びました。Dockerfile 内で複数のステージを使用することで、ビルド環境と実行環境を分離し、最終的なDockerイメージのサイズを削減できます。この知識を活かして、今後はマルチステージビルドを用いた独自のDockerイメージ構築を始めてみましょう。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習