アプリケーションをコンテナ化する
このガイドの残りの部分では、Node.js で動作するシンプルなタスク管理アプリを使って作業を進めます。Node.js に詳しくない場合でも心配いりません。このガイドでは、JavaScript の事前知識は必要ありません。
前提条件
- 最新バージョンの Docker Desktop をインストールしている。
- Git クライアント をインストールしている。
- ファイルを編集するためのIDEまたはテキストエディタを用意している。Dockerは Visual Studio Code の使用を推奨しています。
アプリを取得する
アプリケーションを実行する前に、アプリケーションのソースコードをマシンに取得する必要があります。
-
次のコマンドを使用して、getting-started-appリポジトリ をクローンします。
$ git clone https://github.com/docker/getting-started-app.git
-
クローンしたリポジトリの内容を確認します。以下のようなファイルやサブディレクトリが表示されるはずです。
├── getting-started-app/ │ ├── .dockerignore │ ├── package.json │ ├── README.md │ ├── spec/ │ ├── src/ │ └── yarn.lock
アプリのイメージをビルドする
イメージをビルドするには、Dockerfileを使用します。Dockerfileは、スクリプト形式の指示を含む拡張子のないテキストベースのファイルです。Dockerはこのスクリプトを使ってコンテナイメージをビルドします。
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
-
テキストエディタやコードエディタを使用して、Dockerfileに次の内容を追加します。
# syntax=docker/dockerfile:1 FROM node:18-alpine WORKDIR /app COPY . . RUN yarn install --production CMD ["node", "src/index.js"] EXPOSE 3000
-
以下のコマンドを使用してイメージをビルドします。
ターミナルで、
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
コマンドを使ってコンテナ内でアプリケーションを実行できます。
-
作成したイメージの名前を指定して、
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:3000
(localhost:3000
)に公開します。ポートマッピングがなければ、ホストからアプリケーションにアクセスすることはできません。 -
数秒後に、ウェブブラウザで http://localhost:3000 にアクセスします。アプリが表示されるはずです。
-
アイテムを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を作成してイメージをビルドする基本的な手順を学びました。イメージをビルドした後、コンテナを起動し、アプリが動作していることを確認しました。
関連情報:
次のステップ
次に、アプリを変更し、新しいイメージで実行中のアプリケーションを更新する方法を学びます。その過程で、いくつかの便利なコマンドについても学びます。