Dockerを使ってアプリケーションを構築する際、Dockerfileは必須のファイルです。Dockerfileには、どのベースイメージを使用するか、どのコマンドを実行するか、どのファイルをコピーするかなどの指示を記述することによって、再現性の高い環境を構築できます。
しかし、Dockerfileの書き方や各命令の使い方がわからず、どこから始めればよいか迷っている方も多いでしょう。特に初めてDockerに触れる方にとっては、Dockerfileの構文や命令の意味を理解することが最初のハードルとなります。
この記事では、Dockerfileの基本的な使い方から主要命令の詳細、実際に動くサンプルコードまで、具体的な例とともに詳しく解説していきます。
目次
- Dockerfileとは
- Dockerfileの基本的な使い方
- Dockerfileの基本的な書き方
- docker buildコマンドでイメージをビルドする
- docker runコマンドでコンテナを起動する
- Dockerfileの主要命令の使い方
- FROM命令でベースイメージを指定する
- RUN命令でコマンドを実行する
- COPY命令でファイルをコピーする
- CMD命令で起動コマンドを設定する
- DockerfileでApacheサーバーを構築する方法
- 各ファイルの構成
- Dockerfile
- index.html
- コピペでApacheサーバーを起動させるサンプルコード
- Apacheサーバーを起動するまでの手順
- Dockerfile
- index.html
Dockerfileとは
Dockerfileとは、Dockerイメージを構築するための設定ファイルです。このファイルには、ベースとなるイメージの指定、必要なパッケージのインストール、ファイルのコピー、実行するコマンドなどを記述することによって、自動的にイメージを作成できます。
Dockerfileを使用する最大のメリットは、環境構築の手順をコードとして管理できる点にあります。手動でコマンドを実行する必要がなく、Dockerfileを共有するだけで誰でも同じ環境を再現できるため、チーム開発や本番環境へのデプロイが容易になるでしょう。
Dockerfileは通常、プロジェクトのルートディレクトリに配置され、ファイル名はDockerfileとします。拡張子は不要で、この命名規則に従うことによって、docker buildコマンドが自動的にファイルを認識できます。
Dockerfileの基本的な使い方
Dockerfileを使用することによって、Dockerイメージを自動的にビルドし、一貫性のある環境を構築できます。ここでは、Dockerfileの基本的な使い方として、以下3つの項目を解説します。
- Dockerfileの基本的な書き方
- docker buildコマンドでイメージをビルドする
- docker runコマンドでコンテナを起動する
それぞれの項目は、Dockerfileを使いこなすために必要な知識であり、順番に理解することによって、スムーズにDocker環境を構築できるようになります。実際のコマンドやコード例を交えながら説明していくので、手を動かしながら学習を進めてください。
それでは各項目について、詳しく解説していきます。
Dockerfileの基本的な書き方
Dockerfileの基本的な書き方は、命令とパラメータを1行ずつ記述する形式です。各行は命令で始まり、その後にスペースを挟んでパラメータを記述することによって、Dockerがどのような処理を実行するかを指示できます。
基本的な書き方は、以下の通りです。
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
CMD ["nginx", "-g", "daemon off;"]
上記のコードでは、FROM命令でベースイメージを指定、RUN命令でパッケージをインストール、COPY命令でファイルをコピー、CMD命令で起動コマンドを設定しています。各命令は大文字で記述するのが慣例で、可読性を高めるために空行を入れることも推奨されます。
docker buildコマンドでイメージをビルドする
docker buildコマンドは、Dockerfileからイメージを作成するためのコマンドです。このコマンドを実行することによって、Dockerfileに記述された命令が順番に処理され、最終的に1つのイメージが生成されます。
基本的な使い方は、以下の通りです。
docker build -t my-app:1.0 .
上記のコマンドでは、-tオプションでイメージ名とタグを指定し、最後の.でDockerfileが存在するディレクトリ(カレントディレクトリ)を指定しています。このコマンドを実行すると、Dockerfileの各命令が順番に実行され、my-app:1.0という名前のイメージが作成されるでしょう。
ビルドが完了したら、docker imagesコマンドで作成されたイメージを確認できます。イメージのサイズや作成日時などの情報が表示され、正常にビルドされたことを確認可能です。
docker runコマンドでコンテナを起動する
docker runコマンドは、作成したイメージからコンテナを起動するためのコマンドです。コンテナとは、イメージを実行可能な状態にしたもので、実際にアプリケーションが動作する環境となります。
基本的な使い方は、以下の通りです。
docker run -d -p 8080:80 my-app:1.0
上記のコマンドでは、-dオプションでバックグラウンド実行を指定し、-pオプションでポートマッピング(ホストの8080ポートとコンテナの80ポートを接続)を設定しています。このコマンドを実行すると、my-app:1.0イメージからコンテナが起動され、http://localhost:8080でアクセスできるようになるでしょう。
起動したコンテナは、docker psコマンドで確認できます。コンテナIDやステータス、使用しているポートなどの情報が表示され、正常に起動していることを確認可能です。
【PR】プログラミングや生成AIを無料で学べる「コードキャンプフリー」
Dockerfileの主要命令の使い方
Dockerfileには様々な命令が用意されていますが、特に重要な命令を理解することによって、ほとんどのユースケースに対応できます。ここでは、Dockerfileの主要命令の使い方として、以下の4つを解説します。
- FROM命令でベースイメージを指定する
- RUN命令でコマンドを実行する
- COPY命令でファイルをコピーする
- CMD命令で起動コマンドを設定する
それぞれの命令には明確な役割があり、適切に組み合わせることによって、効率的なDockerイメージを構築できます。各命令の構文と実際の使用例を確認しながら、どのような場面で使用するかを理解してください。
それでは各項目について、詳しく解説していきます。
FROM命令でベースイメージを指定する
FROM命令はDockerfileの最初に記述する命令で、どのイメージをベースにするかを指定します。ベースイメージとは、OSやランタイム環境があらかじめ用意されたイメージのことで、このイメージの上に必要なソフトウェアを追加していく形でカスタマイズできます。
基本的な書き方は、以下の通りです。
FROM ubuntu:22.04
上記のコードでは、Ubuntu 22.04をベースイメージとして指定しています。イメージ名の後にコロンでバージョンを指定することによって、特定のバージョンを使用できるでしょう。バージョンを省略するとlatestタグが自動的に適用されますが、本番環境では明示的にバージョンを指定することが推奨されます。
ベースイメージはDocker Hubから取得でき、公式イメージや認証済みイメージを選択することによって、信頼性の高い環境を構築できます。PythonやNode.js、Nginxなど、様々な用途に応じたイメージが公開されているため、目的に合ったものを選択してください。
RUN命令でコマンドを実行する
RUN命令は、イメージのビルド時にコマンドを実行するための命令です。パッケージのインストールやファイルの作成、設定の変更などを行うことによって、ベースイメージをカスタマイズできます。
基本的な書き方は、以下の通りです。
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y \
nginx \
curl \
vim
上記のコードでは、apt-getコマンドでパッケージリストを更新し、nginx、curl、vimの3つのパッケージをインストールしています。複数のコマンドを&&で連結することによって、1つのRUN命令にまとめることができ、イメージのレイヤー数を削減できるでしょう。
長いコマンドを記述する場合は、バックスラッシュ(\)を使用して改行することが推奨されます。この方法により、コードの可読性が向上し、メンテナンスが容易になります。
COPY命令でファイルをコピーする
COPY命令は、ホスト側のファイルやディレクトリをイメージ内にコピーするための命令です。アプリケーションのソースコードや設定ファイル、静的ファイルなどをイメージに含めることによって、必要なファイルをすべて含んだ完全な環境を構築できます。
基本的な書き方は、以下の通りです。
FROM nginx:latest
COPY index.html /usr/share/nginx/html/
COPY config/nginx.conf /etc/nginx/nginx.conf
上記のコードでは、ホスト側のindex.htmlをNginxのドキュメントルートにコピーし、config/nginx.confをNginxの設定ファイルとしてコピーしています。第1引数にコピー元のパス、第2引数にコピー先のパスを指定することによって、ファイルを配置する場所を制御できるでしょう。
COPY命令では、ワイルドカード(*)を使用して複数のファイルを一度にコピーすることも可能です。たとえば、COPY *.html /usr/share/nginx/html/と記述すると、カレントディレクトリ内のすべてのHTMLファイルをコピーできます。
CMD命令で起動コマンドを設定する
CMD命令は、コンテナ起動時に実行されるデフォルトのコマンドを指定するための命令です。アプリケーションの起動コマンドやサービスの実行コマンドを設定することによって、docker runコマンドでコンテナを起動した際に自動的にアプリケーションが起動されます。
基本的な書き方は、以下の通りです。
FROM nginx:latest
COPY index.html /usr/share/nginx/html/
CMD ["nginx", "-g", "daemon off;"]
上記のコードでは、JSON配列形式(exec形式)でCMD命令を記述しています。この形式では、コマンドと引数をそれぞれ文字列として配列に格納することによって、シェルを介さずに直接コマンドを実行できるでしょう。シェル形式(CMD nginx -g daemon off;)も使用できますが、exec形式の方がシグナルの処理が適切に行われるため推奨されます。
Dockerfileには1つのCMD命令のみを記述でき、複数記述した場合は最後の命令のみが有効になります。docker runコマンドでコマンドを指定した場合、Dockerfileで設定したCMDは上書きされる点に注意が必要です。
DockerfileでApacheサーバーを構築する方法
実際にDockerfileを使用してApacheサーバーを構築することによって、具体的な使い方を理解できます。ここでは、DockerfileでApacheサーバーを構築する方法として、以下3つの項目を解説します。
- 各ファイルの構成
- Dockerfile
- index.html
それぞれのファイルには明確な役割があり、適切に作成することによって、Webサーバーとして機能するコンテナを構築できます。実際のコード例を確認しながら、ファイルの配置場所や記述内容を理解してください。
それでは各項目について、詳しく解説していきます。
【PR】『Python』を学べる企業・個人向けのプログラミングコース
各ファイルの構成
Apacheサーバーを構築するために必要なファイル構成は、非常にシンプルです。プロジェクトのルートディレクトリに、Dockerfileと表示したいHTMLファイルを配置することによって、基本的なWebサーバー環境を構築できます。
ファイル構成は、以下の通りです。
project/
├── Dockerfile
└── index.html
この構成では、Dockerfileにサーバーの構築手順を記述し、index.htmlには表示するコンテンツを記述します。必要に応じてCSSファイルやJavaScriptファイルを追加することも可能ですが、最小構成ではこの2つのファイルのみで動作するでしょう。
ファイルを配置したら、Dockerfileが存在するディレクトリでdocker buildコマンドを実行することによって、イメージをビルドできます。この時、index.htmlはDockerfileのCOPY命令によってイメージ内にコピーされ、Apacheが配信するファイルとなります。
Dockerfile
ApacheサーバーのDockerfileでは、Ubuntu22.04をベースイメージとして、Apache2をインストール、HTMLファイルをコピー、サーバーを起動する設定を記述します。必要最小限の設定で、動作するWebサーバーを構築可能です。
Dockerfileのコードは、以下の通りです。
FROM ubuntu:22.04
RUN apt-get update && \
apt-get install -y apache2 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
COPY index.html /var/www/html/
EXPOSE 80
CMD ["apachectl", "-D", "FOREGROUND"]
上記のコードでは、まずFROM命令でUbuntu 22.04をベースイメージとして指定しています。次にRUN命令でapt-getコマンドを使用してApache2をインストールし、不要なキャッシュを削除することによって、イメージサイズを削減しています。COPY命令でindex.htmlをApacheのドキュメントルートにコピー、EXPOSE命令で80番ポートを公開、CMD命令でApacheをフォアグラウンドで起動するように設定しています。
index.html
index.htmlは、Apacheサーバーが配信するHTMLファイルです。このファイルの内容がブラウザに表示されるため、自由にカスタマイズすることによって、独自のWebページを作成できます。
index.htmlのコードは、以下の通りです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Apache on Docker</title>
</head>
<body>
<h1>Hello from Apache on Docker!</h1>
<p>このページはDockerコンテナ内のApacheサーバーから配信されています。</p>
</body>
</html>
上記のコードでは、シンプルなHTMLページを作成しています。このファイルをDockerfileのCOPY命令で/var/www/html/にコピーすることによって、Apacheが自動的にこのファイルを配信するようになります。ブラウザでhttp://localhost:8080にアクセスすると、この内容が表示されます。
コピペでApacheサーバーを起動させるサンプルコード
全てのセクションで解説した内容をまとめ、コピペでApacheサーバーを実装できるようにしました。Apacheサーバーを試しに構築してみたい方は、ぜひご活用ください。
Apacheサーバーを起動するまでの手順
以下は、Apacheサーバーを起動するまでの一連の流れをまとめた表です。
| 手順 | コマンド | 説明 |
|---|---|---|
| 1. ディレクトリ移動 | cd [ファイル保存先のパス] | Dockerfileとindex.htmlが保存されているディレクトリに移動する |
| 2. イメージのビルド | docker build -t my-apache . | Dockerfileからイメージをビルドして、my-apacheという名前を付ける |
| 3. コンテナの起動 | docker run -d -p 8080:80 my-apache | バックグラウンドでコンテナを起動し、ポート8080で公開する |
| 4. ブラウザでアクセス | http://localhost:8080 | ブラウザでURLにアクセスして、HTMLページが表示されることを確認する |
上記の手順を順番に実行することによって、Dockerコンテナ内でApacheサーバーが起動され、ブラウザでHTMLページを確認できます。コンテナを停止する場合は、docker psでコンテナIDを確認した後、docker stop [コンテナID]コマンドを実行してください。
Dockerfile
以下の箇所を、実際のプロジェクトに合わせて変更してください。
- ベースイメージのバージョン: ubuntu:22.04を使用したいバージョンに変更
- HTMLファイル名: index.htmlを実際のファイル名に変更
- 公開ポート番号: 80を使用したいポート番号に変更
FROM ubuntu:22.04
# Apache2のインストールとクリーンアップ
RUN apt-get update && \
apt-get install -y apache2 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# HTMLファイルをApacheのドキュメントルートにコピー
COPY index.html /var/www/html/
# 80番ポートを公開
EXPOSE 80
# Apacheをフォアグラウンドで起動
CMD ["apachectl", "-D", "FOREGROUND"]
index.html
以下の箇所を、実際のプロジェクトに合わせて変更してください。
- タイトル: Apache on Dockerを実際のページタイトルに変更
- 見出しテキスト: Hello from Apache on Docker!を実際の見出しに変更
- 本文テキスト: 説明文を実際の内容に変更
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Apache on Docker</title>
</head>
<body>
<h1>Hello from Apache on Docker!</h1>
<p>このページはDockerコンテナ内のApacheサーバーから配信されています。</p>
</body>
</html>
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
PHPのコメントの書き方とDocCommentの使い方を簡単に解説
【初心者向け】データベースの基本的な作り方を簡単に解説
【PHP】PDOでMySQLに接続する方法を簡単に解説
【WordPress】絞り込み検索機能を自作する方法をサンプルコードと併せて解説
【PHP】コードの動作確認をローカル・オンラインで行う方法
MacでWordPressのローカル環境を構築する方法を解説
PHPで日本語の曜日を表示する方法を簡単に解説
【Mac用】miテキストエディタのインストール方法や使い方を解説
Photoshopで文字入れする方法と入力テキストの編集方法
ITやプログラミングに関するニュース
株式会社テンダがウェビナー登壇、AIとDX導入後の定着化ノウハウを解説
株式会社ペイロールが労務管理効率化セミナーを開催、本社人事のコア業務促進を支援
株式会社インフォ・クリエイツが無料ウェビナー開催、Webアクセシビリティの体制構築を解説
株式会社これからがオンラインイベント登壇、AIとSNSを活用した新卒採用戦略セミナーを開催
LRM株式会社がフィッシング対策協議会セミナーに参加、セキュリオのデモ体験を提供
Umee Technologiesが無料ウェビナー開催、AI活用の盲点と戦略立案のポイントを解説
株式会社M&Aナビがウェビナー開催、吸血型M&Aを防ぐための取り組みを解説
エムスリーがウェビナーを開催、サイバーエージェントCHOがエンゲージメント向上策を解説
株式会社ビザスクがウェビナー開催、三井化学のDX事例から経営と現場の変革を学ぶ
Fracta Japanが無料オンラインセミナー開催、ホワイトペーパーで水道業界の未来を解説




