Skip to content
Dockerワークショップパート1: アプリケーションをコンテナ化する

アプリケーションをコンテナ化する

このガイドの残りの部分では、Node.js で動作するシンプルなタスク管理アプリを使って作業を進めます。Node.js に詳しくない場合でも心配いりません。このガイドでは、JavaScript の事前知識は必要ありません。

前提条件

  • 最新バージョンの Docker Desktop をインストールしている。
  • Git クライアント をインストールしている。
  • ファイルを編集するためのIDEまたはテキストエディタを用意している。Dockerは Visual Studio Code の使用を推奨しています。

アプリを取得する

アプリケーションを実行する前に、アプリケーションのソースコードをマシンに取得する必要があります。

  1. 次のコマンドを使用して、getting-started-appリポジトリ をクローンします。

    $ git clone https://github.com/docker/getting-started-app.git
  2. クローンしたリポジトリの内容を確認します。以下のようなファイルやサブディレクトリが表示されるはずです。

    ├── getting-started-app/
    │ ├── .dockerignore
    │ ├── package.json
    │ ├── README.md
    │ ├── spec/
    │ ├── src/
    │ └── yarn.lock

アプリのイメージをビルドする

イメージをビルドするには、Dockerfileを使用します。Dockerfileは、スクリプト形式の指示を含む拡張子のないテキストベースのファイルです。Dockerはこのスクリプトを使ってコンテナイメージをビルドします。

  1. getting-started-app ディレクトリ(package.json ファイルと同じ場所)に移動し、Dockerfile という名前のファイルを作成します。使用しているOSに応じて、以下のコマンドを使用して Dockerfile を作成します。

ターミナルで以下のコマンドを実行します。

getting-started-app ディレクトリにいることを確認してください。/path/to/getting-started-app を、getting-started-app ディレクトリへのパスに置き換えてください。

$ cd /path/to/getting-started-app

空の Dockerfile を作成します。

$ touch Dockerfile
  1. テキストエディタやコードエディタを使用して、Dockerfileに次の内容を追加します。

    # syntax=docker/dockerfile:1
     
    FROM node:18-alpine
    WORKDIR /app
    COPY . .
    RUN yarn install --production
    CMD ["node", "src/index.js"]
    EXPOSE 3000
  2. 以下のコマンドを使用してイメージをビルドします。

    ターミナルで、getting-started-app ディレクトリにいることを確認してください。/path/to/getting-started-app を、getting-started-app ディレクトリへのパスに置き換えてください。

    $ cd /path/to/getting-started-app

    イメージをビルドします。

    $ docker build -t getting-started .

    docker build コマンドは、Dockerfileを使用して新しいイメージをビルドします。node:18-alpine イメージを指定したため、Dockerはそのイメージをダウンロードする必要がありました。

    イメージがダウンロードされた後、Dockerfileの指示に従ってアプリケーションをコピーし、yarn を使ってアプリケーションの依存関係をインストールしました。CMD ディレクティブは、このイメージからコンテナを起動するときのデフォルトコマンドを指定します。

    最後に、-t フラグはイメージにタグを付けます。これは、最終イメージの人間が読める名前だと思ってください。イメージに getting-started という名前を付けたため、このイメージを使ってコンテナを実行できます。

    docker build コマンドの最後の . は、現在のディレクトリにある Dockerfile を使用するようにDockerに指示しています。

アプリコンテナを起動する

イメージを作成したので、docker run コマンドを使ってコンテナ内でアプリケーションを実行できます。

  1. 作成したイメージの名前を指定して、docker run コマンドを使用してコンテナを実行します。

    $ docker run -dp 127.0.0.1:3000:3000 getting-started

    -d フラグ(--detach の省略形)は、コンテナをバックグラウンドで実行します。これにより、Dockerはコンテナを起動し、すぐにターミナルに戻ります。コンテナが実行されているかどうかは、Docker ダッシュボードの Containers タブで確認するか、ターミナルで docker ps を実行して確認できます。

    -p フラグ(--publish の短縮形)は、ホストとコンテナの間でポートマッピングを作成します。-p フラグは HOST:CONTAINER という形式の文字列を受け取り、HOST はホスト上のアドレス、CONTAINER はコンテナ内のポートを指します。このコマンドは、コンテナのポート3000をホストの 127.0.0.1:3000localhost:3000)に公開します。ポートマッピングがなければ、ホストからアプリケーションにアクセスすることはできません。

  2. 数秒後に、ウェブブラウザで http://localhost:3000 にアクセスします。アプリが表示されるはずです。

    Empty todo list

  3. アイテムを1つか2つ追加し、期待通りに動作するか確認してください。アイテムを完了としてマークしたり、削除したりできます。フロントエンドは、正常にバックエンドにアイテムを保存しています。

この時点で、いくつかのアイテムを含むタスク管理アプリが実行されています。

CLIやDocker Desktopを使ってコンテナを確認すると、少なくとも1つのコンテナが getting-started イメージを使用し、ポート 3000 で実行されているはずです。CLIまたはDocker Desktopのグラフィカルインターフェースを使用してコンテナを確認できます。

ターミナルで docker ps コマンドを実行して、コンテナの一覧を表示します。

$ docker ps

以下のような出力が表示されるはずです。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
df784548666d        getting-started     "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        127.0.0.1:3000->3000/tcp   priceless_mcclintock

Summary

このセクションでは、Dockerfileを作成してイメージをビルドする基本的な手順を学びました。イメージをビルドした後、コンテナを起動し、アプリが動作していることを確認しました。

関連情報:

次のステップ

次に、アプリを変更し、新しいイメージで実行中のアプリケーションを更新する方法を学びます。その過程で、いくつかの便利なコマンドについても学びます。