Dockerfileの基本的な使い方とビルド方法を簡単に解説

Dockerfileの基本的な使い方とビルド方法を簡単に解説

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

Dockerを使ってアプリケーションを構築する際、Dockerfileは必須のファイルです。Dockerfileには、どのベースイメージを使用するか、どのコマンドを実行するか、どのファイルをコピーするかなどの指示を記述することによって、再現性の高い環境を構築できます。

しかし、Dockerfileの書き方や各命令の使い方がわからず、どこから始めればよいか迷っている方も多いでしょう。特に初めてDockerに触れる方にとっては、Dockerfileの構文や命令の意味を理解することが最初のハードルとなります。

この記事では、Dockerfileの基本的な使い方から主要命令の詳細、実際に動くサンプルコードまで、具体的な例とともに詳しく解説していきます。



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から取得でき、公式イメージや認証済みイメージを選択することによって、信頼性の高い環境を構築できます。PythonNode.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やプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する