ITや趣味など気軽に投稿しています。

【Docker】Dockerfileの作成からイメージ作成~コンテナ起動まで

Dockerでは、Dockerfile → Dockerイメージ → Dockerコンテナという3段階のプロセスを経て、仮想環境上でアプリケーションを実行します。

この記事では、Dockerfile・Dockerイメージ・Dockerコンテナの関係性を整理したうえで、実際にDockerfileを作成し、コンテナとして起動するまでの手順を解説します。

Dockerfile・イメージ・コンテナの関係

コンテナを起動するまでには、3つの要素が関わります。それぞれの役割と関係性を理解することが、Docker活用の第一歩です。

Dockerfile

Dockerfileは、コンテナの構成を定義するテキストファイルです。ベースとなるOS、インストールするソフトウェア、実行するコマンドなどをコードとして記述します。

Dockerfileはコンテナの「設計書」に相当します。この設計書をもとに、Dockerイメージが生成されます。

Dockerイメージ

Dockerイメージは、Dockerfileをdocker buildコマンドでビルドして生成される、実行可能なパッケージです。OS・ライブラリ・アプリケーションなどの情報がレイヤー構造でまとめられています。

Dockerイメージはコンテナを生成するための「テンプレート(型)」に相当します。Dockerfile単体ではコンテナとして実行できず、必ずビルドしてイメージに変換する必要があります。

Dockerコンテナ

Dockerコンテナは、Dockerイメージをdocker runコマンドで実行した際に生成されるプロセスです。

1つのイメージから複数のコンテナを生成でき、それぞれが独立したプロセスとして動作します。コンテナの停止・削除もdocker stopdocker rmコマンドで即座に操作可能です。

関係性のまとめ

以下の図は、Dockerfile → イメージ → コンテナの関係性を示しています。

DockerFile、Dockerイメージ、Dockerコンテナの関係性
要素役割操作
Dockerfileコンテナの設計書テキストエディタで作成
Dockerイメージコンテナのテンプレートdocker buildで生成
Dockerコンテナ実行中のプロセスdocker runで起動

Docker実践

ここからは、実際にDockerfileを作成し、コンテナとして起動するまでの流れを実践します。

前提条件: Dockerが使用可能な環境が必要です。ターミナルまたはコマンドプロンプトでdockerコマンドが実行できることを確認してください。WindowsでのDockerインストール手順は、【Docker】WindowsでDocker Desktop環境を構築するを参照してください。

Dockerfileの作成

任意のディレクトリにDockerfile(拡張子なし)を作成し、以下の内容を記述します。

この例では、Ubuntuベースのコンテナにcurlをインストールし、起動時に「Hello, Ubuntu Docker!」と表示します。

# Ubuntuの最新イメージを使用

FROM ubuntu:latest

# 必要なパッケージをインストール(例: curl)

RUN apt-get update && apt-get install -y curl

# コンテナ起動時に表示するメッセージ

CMD ["echo", "Hello, Ubuntu Docker!"]

各命令の意味は以下の通りです。

命令説明
FROMベースとなるDockerイメージを指定する
RUNイメージのビルド時に実行するコマンドを定義する
CMDコンテナ起動時に実行するデフォルトコマンドを定義する

Dockerイメージの作成

作成したDockerfileからDockerイメージを生成します。Dockerfileが存在するディレクトリで、以下のコマンドを実行します。

cd <<Dockerfileのディレクトリ>>
docker build -t main .

-t mainはイメージにmainというタグ名を付与するオプションです。末尾の.は、現在のディレクトリをビルドコンテキストとして使用することを意味します。

docker build -t main .

ビルドが完了すると、Dockerfileに記述された内容に基づいてパッケージのインストール等が実行されます。

作成されたDockerイメージは、以下のコマンドで確認できます。

docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
main         latest    62fb03104bed   4 minutes ago   219MB

Dockerコンテナの起動

作成したイメージからコンテナを起動します。以下のコマンドを実行すると、コンテナが作成・実行され、CMDで指定したコマンドの結果が出力されます。

docker run main
Hello, Ubuntu Docker!

作成されたコンテナの一覧は、以下のコマンドで確認できます。-aオプションにより、停止中のコンテナも含めて表示されます。

docker ps -a
CONTAINER ID   IMAGE   COMMAND                  CREATED          STATUS                      PORTS   NAMES
910054399d3e   main    "echo 'Hello, Ubuntu…"   2 seconds ago    Exited (0) 1 second ago             upbeat_elgamal

コンテナの起動・停止

作成済みのコンテナを再度起動するには、docker startコマンドを使用します。コンテナの指定は、コンテナIDまたはコンテナ名で行います。

# コンテナの再起動

docker start <<コンテナID / コンテナ名>>

# コンテナの停止

docker stop <<コンテナID / コンテナ名>>

ポイント: 上記のhello-worldのようなコマンド実行後に自動終了するコンテナには、docker stopは不要です。docker stopは、Webサーバなど継続的に動作するコンテナを停止する際に使用します。

まとめ

この記事では、Dockerfileの作成からコンテナ起動までの一連の流れを解説しました。

  • Dockerfileはコンテナの設計書。OS・ソフトウェア・実行コマンドを定義する
  • Dockerイメージdocker buildで生成されるテンプレート
  • Dockerコンテナはイメージをdocker runで実行した際に生成されるプロセス
  • 1つのイメージから複数のコンテナを起動でき、停止・削除も容易

Docker Hubには多数の公式イメージが公開されていますが、独自の要件に合わせたコンテナを構築する場合は、Dockerfileの自作が必要になります。基本的な流れを理解したうえで、用途に応じたDockerfileのカスタマイズに進めていきましょう。