0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コンテナの構築の流れ

Posted at

概要

ここでは、コンテナ構築の流れを示す。

アプリのコンテナを作成するためには、イメージ名を指定して、Docker CLIからコンテナを起動する必要がある。

  1. Dockerfileを作成する
  2. Dockerイメージを構築する
  3. Dockerコンテナを起動する

Dockerコンテナの構築

Dockerfileの作成

まずは、イメージを構築するためのDockerfileを作成する。
プロジェクトのルートディレクトリに移動し、Dockerfileを用意する。

# プロジェクトのルートディレクトリに移動する。
cd project-root

# 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

Dockerイメージの構築

docker build コマンドでDockerfileを使用し、新たなイメージを構築する。

$ docker build -t getting-started .
コマンド詳細
  • -tフラグ
    • イメージにタグを付与する。
  • .
    • カレントディレクトリからDockerfileを探すように指示する。

コンテナの起動

先ほど作成したイメージ名を指定し、docker runコマンドでコンテナを起動する。

$ docker run -dp 127.0.0.1:3000:3000 getting-started
コマンド詳細
  • -pフラグについて
    • ホストとコンテナ間でポートの関連付けを作成する。
    • HOST:CONTAINERと記載する。
    • 127.0.0.1:3000:3000では、コンテナのポート3000をlocalhostの3000に公開する。

Dockerfileについて

Dockerfile リファレンス — Docker-docs-ja 24.0 ドキュメント

Dockerは、Dockerfileから自動的に命令を読み上げ、イメージを生成する。
docker buildコマンドを実行すると、順次コマンドライン命令を自動化した処理を行い、ビルド結果となるイメージが得られる。

docker buildコマンドは、Dockerfileコンテキストによって、イメージを構築する。

ここでのコンテキストとは、Docker CLIで指定したPATHまたはURLにあるファイルの一式のこと。

# 以下の場合、"."(カレントディレクトリ)を構築コンテキストとして利用する。
$ docker build .

dockerdによる、イメージ構築の流れ

  1. コンテキストの全体をdockerd(Dockerデーモン)に送信する
    コンテキスト・ディレクトリに.dockerignoreファイルを用意することで、不要なファイルやディレクトリを除外することができる。
  2. Dockerfile内に書かれている命令を実行する前に、事前にDockerfileを検証する。
    構文が間違っている場合には、エラーを返す。
  3. Dockerfile内の命令を実行する。
    1行ずつ命令を実行し、必要な場合にはビルドイメージ内にその処理結果をコミットし、最後に新しいイメージのIDを出力する。
    dockerdは、送信されたコンテキストの内容は自動的に除去する。

イメージの構築は Docker デーモンが実行する。

ポイント

  • Dockerfile内の各命令は、個別に実行される
    前の行でディレクトリの移動をしたとしても、次の行ではその影響を受けない。
  • Dockerは可能な限り構築キャッシュを利用する
    構築キャッシュとは、デフォルトでは、構築するマシン上で以前に構築された結果に基づく

Dockerfileの書式

# コメント
命令 引数

命令は、慣例的に大文字を用いる。(引数との区別のため)

Dockerは、Dockerfile内の命令を記述順に実行する。ただし、1行目はFROMから始めなくてはならない。

FROM命令の引数は、構築時の元となる親イメージを指定する。

# nodeを親イメージとして指定する。
FROM node:18-alpine

Docker CLIについて

Docker CLI (docker) — Docker-docs-ja 24.0 ドキュメント

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?