Docker · 4 min read · Nov 02, 2025
Ubuntu 22.04 LTSでDockerfileを使用してDockerイメージを作成する方法

Dockerは、主に開発者やシステム管理者を対象としたオペレーティングシステムレベルの仮想化です。Dockerは、隔離された環境でアプリケーションを構築およびデプロイするのを容易にします。
Dockerfileは、Docker環境内で自動的に1つずつ実行されるコマンドと指示のコレクションを含むスクリプトです。これにより、新しいDockerイメージが作成されます。
このチュートリアルでは、Dockerfileを使用して独自のDockerイメージを作成する方法を示します。Dockerfileを使用して独自のDockerイメージを作成する方法を詳細に説明します。
前提条件
このガイドでは、1GBのRAM、25GBの空きディスクスペース、2つのCPUを備えたUbuntu 22.04を使用します。また、カスタムDockerイメージを構築するためのベースイメージとしてUbuntu 22.04を使用します。
Dockerfileコマンドの紹介
Dockerfileは、Dockerイメージを構築するためのすべてのコマンドを含むスクリプトです。Dockerfileには、’docker build’コマンドを使用してDockerイメージを作成するために使用されるすべての指示が含まれています。
最初のDockerfileを作成する前に、Dockerfileの指示に慣れておく必要があります。以下は、知っておくべきいくつかのDockerfileの指示です。
FROM
作成したい新しいイメージのベースイメージを設定します。FROM指示は新しいビルドステージを初期化し、Dockerfileの最上部に配置する必要があります。
LABEL
この指示を使用すると、バージョン、説明、メンテイナーなど、Dockerイメージに関する追加情報を追加できます。LABEL指示は、複数のラベルと複数行の値を追加できるキーと値のペアです。
RUN
この指示は、Dockerイメージのビルドプロセス中にコマンドを実行するために使用されます。Dockerイメージに必要な追加パッケージをインストールできます。
ADD
ADD指示は、ファイル、ディレクトリ、またはURLからのリモートファイルをDockerイメージにコピーするために使用されます。’src’から絶対パス’dest’にコピーします。また、ファイルのデフォルトの所有権を設定できます。
ENV
ENV指示は、ビルドステージ中に使用できる環境変数を定義し、多くの場所でインラインで置き換えることができます。
CMD
CMD指示は、コンテナを実行する際に実行されるデフォルトのコマンドを定義します。Dockerfileには1つのCMD指示のみを含める必要があり、複数のCMDがある場合は、最後のCMD指示が実行されます。
EXPOSE
この指示は、実行時に特定のネットワークポートでコンテナポートを公開します。公開されるデフォルトのプロトコルはTCPですが、TCPまたはUDPのいずれかを指定できます。
ARG
ARG指示は、ユーザーがビルド時に渡すことができる変数を定義するために使用されます。この指示を使用して、ビルド時に’–build-arg variable=value’オプションを使用してDockerの’build command’で使用できます。また、Dockerfileで複数のARGを使用できます。
ENTRYPOINT
ENTRYPOINT指示は、コンテナが実行されるときに実行される最初のデフォルトのコマンドを定義するために使用されます。ENTRYPOINT指示を使用してアプリケーションを起動するコマンドを定義します。
WORKDIR
WORKDIR指示は、Dockerイメージのデフォルトの作業ディレクトリを定義するために使用されます。RUN、CMD、ENTRYPOINT、およびADD指示はWORKDIR指示に従います。Dockerfileに複数のWORKDIR指示を追加できます。存在しない場合は、自動的に作成されます。
USER
USER指示は、イメージを実行する際のデフォルトのユーザーまたはgidを定義するために使用されます。RUN、CMD、およびENTRYPOINTはDockerfileのUSER指示に従います。
VOLUME
VOLUME指示は、コンテナとホストマシンの間でアクセス/リンクされたディレクトリを有効にするために使用されます。
それでは、最初のDockerfileを作成しましょう。
ステップ1 - Ubuntu 22.04にDockerをインストール
Dockerfileを作成する前に、Ubuntu 22.04システムにDockerをインストールします。これは、Ubuntuリポジトリにデフォルトで用意されています。
Ubuntuリポジトリのすべてのパッケージリストを更新し、以下のaptコマンドを使用してDockerをインストールします。
sudo apt update
sudo apt install docker.ioすべてのインストールが完了したら、Dockerサービスを開始し、システムの起動時に追加します。
systemctl start docker
systemctl enable docker次に、以下のコマンドを使用してDockerサービスを確認します。
systemctl status dockerDockerサービスは、Ubuntu 22.04で稼働しています。

次に、以下のdockerコマンドを実行して、インストールが正しいことを確認します。
docker run hello-world以下は、得られる結果です。
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/ご覧のとおり、DockerからHello Worldメッセージが表示され、Ubuntu 22.04でのDockerインストールが正常に完了しました。
ステップ2 - Dockerfileとその他の設定を作成
このステップでは、Dockerfileを使用してアプリケーションのカスタムDockerイメージを構築する方法を示します。PHP-FPMおよびNginxサービス用に、Ubuntu 22.04イメージに基づいた新しいカスタムDockerイメージを作成し、シンプルなphpinfoスクリプトで新しいコンテナを実行します。
まず、新しいプロジェクトディレクトリを作成し、空のDockerfileを作成します。
mkdir -p nginx-image
cd nginx-image/
touch Dockerfile次に、独自のエディタを使用して’Dockerfile’スクリプトを編集します(この例ではnanoを使用しています)。
nano Dockerfile行の先頭に、FROM指示を使用してベースイメージUbuntu 22.04イメージを追加します。
# Download base image ubuntu 22.04
FROM ubuntu:22.04次に、LABEL指示を使用してカスタムイメージに関する詳細情報を追加します。
# LABEL about the custom image
LABEL maintainer="[email protected]"
LABEL version="0.1"
LABEL description="This is a custom Docker Image for PHP-FPM and Nginx."aptパッケージのインストール中に対話式のポストインストールステップをスキップするために、環境変数’DEBIAN_FRONTEND=noninteractive’を使用します。
# Disable Prompt During Packages Installation
ARG DEBIAN_FRONTEND=noninteractive次に、パッケージをインストールする前に’appt update’コマンドを実行します。
# Update Ubuntu Software repository
RUN apt update次に、Nginx、PHP-FPM、およびsupervisorパッケージをインストールします。すべてのインストールが完了したら、カスタムイメージのサイズを減らすためにすべてのパッケージキャッシュを削除します。
# Install nginx, php-fpm and supervisord from ubuntu repository
RUN apt install -y nginx php-fpm supervisor
RUN rm -rf /var/lib/apt/lists/*
RUN apt cleanカスタムイメージに渡すことができる新しい環境変数を定義します。
# Define the ENV variable
ENV nginx_vhost /etc/nginx/sites-available/default
ENV php_conf /etc/php/8.1/fpm/php.ini
ENV nginx_conf /etc/nginx/nginx.conf
ENV supervisor_conf /etc/supervisor/supervisord.conf次に、Nginxのデフォルト設定を’nginx_vhost’変数にコピーし、php.ini設定ファイルの’cgi.fix_pathinfo=1’を’cgi.fix_pathinfo=0’に置き換え、デフォルトの’nginx_conf’変数に’daemon off’オプションを追加します。
# Enable PHP-fpm on nginx virtualhost configuration
COPY default ${nginx_vhost}
RUN sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' ${php_conf} && echo "
daemon off;" >> ${nginx_conf}カスタムsupervisord設定を’supervisor_conf’変数にコピーします。
#Copy supervisor configuration
COPY supervisord.conf ${supervisor_conf}PHP-FPMソケットファイル用の新しいディレクトリを作成し、ウェブルートディレクトリ’/var/www/html’とPHP-FPMディレクトリ’/run/php’の所有権をデフォルトユーザー’www-data’に変更します。
RUN mkdir -p /run/php
RUN chown -R www-data:www-data /var/www/html
RUN chown -R www-data:www-data /run/phpカスタムイメージのボリュームを定義し、これらのディレクトリをホストマシンにマウントできるようにします。
# Volume configuration
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]次に、’start.sh’スクリプトを追加し、CMD指示を使用してデフォルトのコンテナコマンドを定義します。
# Copy start.sh script and define default command for the container
COPY start.sh /start.sh
CMD ["./start.sh"]最後に、EXPOSE指示を使用してコンテナのデフォルトのHTTPおよびHTTPSポートを開きます。
# Expose Port for the Application
EXPOSE 80 443保存して閉じます。
以下は、私たちが作成した完全なDockerfileスクリプトです。
# Download base image ubuntu 22.04
FROM ubuntu:22.04
# LABEL about the custom image
LABEL maintainer="[email protected]"
LABEL version="0.1"
LABEL description="This is a custom Docker Image for PHP-FPM and Nginx."
# Disable Prompt During Packages Installation
ARG DEBIAN_FRONTEND=noninteractive
# Update Ubuntu Software repository
RUN apt update
RUN apt upgrade -y
# Install nginx, php-fpm and supervisord from ubuntu repository
RUN apt install -y nginx php-fpm supervisor
RUN rm -rf /var/lib/apt/lists/*
RUN apt clean
# Define the ENV variable
ENV nginx_vhost /etc/nginx/sites-available/default
ENV php_conf /etc/php/8.1/fpm/php.ini
ENV nginx_conf /etc/nginx/nginx.conf
ENV supervisor_conf /etc/supervisor/supervisord.conf
# Enable PHP-fpm on nginx virtualhost configuration
COPY default ${nginx_vhost}
RUN sed -i -e 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' ${php_conf} && echo "
daemon off;" >> ${nginx_conf}
# Copy supervisor configuration
COPY supervisord.conf ${supervisor_conf}
RUN mkdir -p /run/php
RUN chown -R www-data:www-data /var/www/html
RUN chown -R www-data:www-data /run/php
# Volume configuration
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
# Copy start.sh script and define default command for the container
COPY start.sh /start.sh
CMD ["./start.sh"]
# Expose Port for the Application
EXPOSE 80 443次に、Nginx、supervisord、およびstart.shスクリプトの追加設定を作成します。
‘default’ Nginx仮想ホスト設定には、PHP-FPM用のセクションが含まれます。実際には、カスタムイメージを使用してPHPスクリプトを変更なしで実行できます。
エディタを使用して新しいNginx ‘default’仮想ホスト設定を作成します。
nano default以下の設定を貼り付けます。
server {
listen 80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}保存して閉じます。
次に、NginxとPHP-FPMプログラムの両方を自動的に実行する’supervisord.conf’設定を作成します。
エディタを使用して’supervisord.conf’ファイルを作成します。
nano supervisord.conf以下の設定を貼り付けます。
[unix_http_server]
file=/dev/shm/supervisor.sock ; (the path to the socket file)
[supervisord]
logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
user=root ;
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///dev/shm/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf
[program:php-fpm8.1]
command=/usr/sbin/php-fpm8.1 -F
numprocs=1
autostart=true
autorestart=true
[program:nginx]
command=/usr/sbin/nginx
numprocs=1
autostart=true
autorestart=true保存して閉じます。
次に、supervisordコマンドを開始する’start.sh’スクリプトを作成します。
nano start.sh以下の設定を貼り付けます。
#!/bin/sh
/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf保存して閉じます。
‘start.sh’スクリプトを実行可能にします。
chmod +x start.shその結果、カスタムDockerイメージのすべての設定が作成されました。以下は、作成したすべての設定です。
ls -laこれで、これらの設定に基づいて新しいカスタムイメージを作成する準備が整いました。

ステップ3 - 新しいカスタムをビルドし、新しいコンテナを実行
Dockerカスタムイメージを作成するには、プロジェクトディレクトリ’nginx-image’に移動し、以下の’docker build’コマンドを実行します。
docker build -t nginx-image .このコマンドは、ベースイメージUbuntu 22.04をダウンロードし、’nginx-image’という名前の新しいカスタムイメージを作成します。
すべてのプロセスが完了したら、以下のコマンドを使用してシステム上の利用可能なDockerイメージのリストを確認します。
docker image ls以下は、得られる結果です。

ご覧のとおり、新しいカスタムDockerイメージ’nginx-image’が作成されました。
次に、’nginx-image’に基づいて新しいDockerコンテナを実行します。
ローカルマシンで、すべてのウェブファイルを保存するために使用される新しいディレクトリ’/var/webroot’を作成します。
mkdir -p /var/webroot次に、以下のdocker runコマンドを使用して’test-container’という名前の新しいコンテナを作成します。
docker run -d -v /var/webroot:/var/www/html -p 8080:80 --name test-container nginx-image注意:
- –name test-container nginx-image = ‘nginx-image’に基づいて’test-container’という名前の新しいコンテナを作成します。
- -p 8080:80 = test-containerコンテナはホストマシンのポート8080で実行されます。
- -v /var/webroot:/var/www/html = ホストマシンの/var/webrootディレクトリがコンテナの/var/www/htmlディレクトリを上書きします。
その後、以下のコマンドを使用してシステム上のすべての実行中のコンテナを確認します。
docker ps以下は、得られる結果です。

その結果、’nginx-image’に基づく新しいコンテナ’test-container’がポート8080を公開して稼働しています。
ステップ4 - テスト
コンテナが正しく実行されていることを確認するために、ホストマシンの’/webroot’ルートディレクトリに新しいindex.htmlおよびphpinfoファイルを作成します。’/var/webroot’ディレクトリはコンテナの’/var/www/html’ディレクトリにマウントされています。
以下のコマンドを使用して’/webroot’ディレクトリにindex.htmlファイルを作成します。
echo 'Nginx and PHP-FPM 8.1 inside Docker Container with Ubuntu 22.04 Base Image
' > /var/webroot/index.html次に、curlコマンドを使用してポート8080でコンテナにアクセスします。
curl server-ip:8080
curl -I server-ip:8080その結果、私たちが作成したデフォルトのindex.htmlページが表示されます。

次に、PHP-FPMサービスが実行されていることを確認するために、’/webroot’ディレクトリに新しいPHPファイル’info.php’を作成します。
以下のコマンドを使用して’info.php’ファイルを作成します。
echo '' > /var/webroot/info.php次に、ウェブブラウザを開き、サーバーのIPアドレスにポート’8080’を付けて’info.php’ファイルのパスを入力します。
http://server-ip:8080/info.php
これで、以下のようなphpinfoページが表示されます。

ご覧のとおり、’test-container’がPHPスクリプトを正常に読み込んでいます。
その結果、私たちは新しいカスタムDockerイメージを作成し、それに基づいて新しいコンテナをエラーなしで実行することに成功しました。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。