Docker · 2 min read · Sep 24, 2025
Docker化したLEMPスタックをUbuntu上でDocker-Composeを使用して構築する
Docker-Compose は、マルチコンテナのDockerアプリケーションを定義および管理するためのコマンドラインツールです。ComposeはPythonスクリプトであり、pipコマンドを使用して簡単にインストールできます(pipはPythonパッケージリポジトリからPythonソフトウェアをインストールするためのコマンドです)。Composeを使用すると、単一のコマンドで複数のDockerコンテナを実行できます。これは、開発、テスト、およびステージング環境に最適なサービスとしてコンテナを作成することを可能にします。
このチュートリアルでは、docker-composeを使用してLEMPスタック環境(LEMP = Linux - Nginx - MySQL - PHP)を作成する手順をステップバイステップで説明します。すべてのコンポーネントを異なるDockerコンテナで実行し、Nginxコンテナ、PHPコンテナ、PHPMyAdminコンテナ、およびMySQL/MariaDBコンテナを設定します。
前提条件
- Ubuntuサーバー16.04 -64bit
- ルート権限
ステップ1 - Dockerのインストール
このステップでは、Dockerをインストールします。DockerはUbuntuリポジトリにあり、リポジトリを更新してからインストールするだけです。
Ubuntuリポジトリを更新し、アップグレードします:
sudo apt-get update
sudo apt-get upgradeUbuntuリポジトリから最新のDockerをインストールします。
sudo apt-get install -y docker.ioDockerを起動し、ブート時に自動的に起動するように設定します:
systemctl start docker
systemctl enable dockerDockerサービスが実行中です。
次に、以下のコマンドを使用してDockerをテストできます:
docker run hello-worldDockerからのこんにちは。

ステップ2 - Docker-Composeのインストール
最初のステップでは、すでにDockerをインストールしました。次に、docker-composeをインストールします。
Composeのインストールにはpython-pipが必要です。aptを使用してpythonとpython-pipをインストールします:
sudo apt-get install -y python python-pipインストールが完了したら、pipコマンドを使用してdocker-composeをインストールします。
pip install docker-compose次に、docker-composeのバージョンを確認します:
docker-compose --versionDocker-composeがインストールされました。
ステップ3 - Docker環境の作成と構成
このステップでは、docker-compose環境を構築します。非ルートユーザーを使用する必要があるため、今すぐそのユーザーを作成します。
新しいユーザー「 hakase 」を追加します(ここで好きなユーザー名を選択してください):
useradd -m -s /bin/bash hakase
passwd hakase次に、新しいユーザーを「 docker 」グループに追加し、Dockerを再起動します。
usermod -a -G docker hakase
sudo systemctl restart dockerこれで、ユーザー「 hakase 」はsudoなしでDockerを使用できます。
次に、ルートユーザーから「hakase」ユーザーにsuでログインします。
su - hakaseCompose環境用の新しいディレクトリを作成します。
mkdir lemp-compose/
cd lemp-compose/これが私たちのdocker-compose環境です。Dockerコンテナに含めるすべてのファイルはこのディレクトリ内に存在する必要があります。docker-composeを使用する際には、「 docker-compose.yml 」という名前の.ymlファイルが必要です。
「lemp-compose」ディレクトリ内に新しいディレクトリとdocker-compose.ymlファイルを作成します:
touch docker-compose.yml
mkdir -p {logs,nginx,public,db-data}- logs: Nginxログファイル用のディレクトリ。
- nginx: バーチャルホストなどのNginx設定を含みます。
- public: ウェブファイル、index.html、およびPHP情報ファイル用のディレクトリ。
- db-data: MariaDBデータディレクトリボリューム。
「 logs 」ディレクトリにerror.logとaccess.logのログファイルを作成します。
touch logs/{error,access}.log「 nginx 」ディレクトリに新しいnginxバーチャルホスト設定ファイルを作成します:
vim nginx/app.conf以下の設定を貼り付けます:
upstream php {
server phpfpm:9000;
}
server {
server_name 193.70.36.50;
error_log "/opt/bitnami/nginx/logs/myapp-error.log";
access_log "/opt/bitnami/nginx/logs/myapp-access.log";
root /myapps;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}ファイルを保存してvimを終了します。
「 public 」ディレクトリに新しいindex.htmlファイルとPHP情報ファイルを作成します。
echo 'LEMP Docker-Compose
hakase-labs' > public/index.html
echo '' > public/info.php
これで、以下のように環境ディレクトリを確認できます:
tree
ステップ4 - docker-compose.ymlファイルの設定
前のステップでは、コンテナに必要なディレクトリとファイルを作成しました。このステップでは、「 docker-compose.yml 」ファイルを編集します。docker-compose.ymlファイルでは、LEMPスタックのサービス、各コンテナのベースイメージ、およびDockerボリュームを定義します。
「 hakase 」ユーザーにログインし、vimでdocker-compose.ymlファイルを編集します:
su - hakase
cd lemp-compose/
vim docker-compose.yml- Nginxサービスの定義
以下のnginx設定を貼り付けます:
nginx:
image: 'bitnami/nginx'
ports:
- '80:80'
links:
- phpfpm
volumes:
- ./logs/access.log:/opt/bitnami/nginx/logs/myapp-access.log
- ./logs/error.log:/opt/bitnami/nginx/logs/myapp-error.log
- ./nginx/app.conf:/bitnami/nginx/conf/vhosts/app.conf
- ./public:/myappsその設定では、すでに以下を定義しています:
- nginx: サービス名
- image: ‘ bitnami/nginx ‘ Dockerイメージを使用しています
- ports: コンテナポート80をホストポート80に公開
- links: ‘ nginx ‘サービスコンテナを’ phpfpm ‘コンテナにリンク
- volumes: ローカルディレクトリをコンテナにマウントします。ログファイルディレクトリをマウントし、Nginxバーチャルホスト設定をマウントし、ウェブルートディレクトリをマウントします。
- PHP-fpmサービスの定義
Nginxブロックの下に以下の設定を貼り付けます:
phpfpm:
image: 'bitnami/php-fpm'
ports:
- '9000:9000'
volumes:
- ./public:/myappsここで定義したのは:
- phpfpm: サービス名を定義。
- image: ‘ bitnami/php-fpm ‘イメージを使用してphpfpmサービスのベースイメージを定義。
- ports: TCPポート9000でPHP-fpmを実行し、ポート9000をホストに公開。
- volumes: ウェブルートディレクトリ「 public 」をコンテナの「 myapps 」にマウントします。
- MySQLサービスの定義
3番目のブロックでは、MariaDBサービスコンテナのために以下の設定を貼り付けます:
mysql:
image: 'mariadb'
ports:
- '3306:3306'
volumes:
- ./db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=hakase-labs123ここで使用しているのは:
- mysql: サービス名として使用。
- image: コンテナは’ mariadb ‘ Dockerイメージに基づいています。
- ports: サービスコンテナはMySQL接続のためにポート3306を使用し、ホストのポート3306に公開。
- volumes: db-dataディレクトリmysql
- environment: Dockerイメージのmysqlルートパスワードのために環境変数「 MYSQL_ROOT_PASSWORD 」を設定し、コンテナのビルド時に実行されます。
- PHPMyAdminサービスの設定
最後のブロックでは、以下の設定を貼り付けます:
phpmyadmin:
image: 'phpmyadmin/phpmyadmin'
restart: always
ports:
- '8080:80'
links:
- mysql:mysql
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: hakase-labs123
PMA_HOST: mysql‘phpmyadmin’ Dockerイメージを使用し、コンテナポート80をホストの8080にマッピングし、コンテナをmariadbコンテナにリンクし、常に再起動するように設定し、Dockerイメージのいくつかの環境変数を設定します。
ファイルを保存してvimを終了します。
GitHubで完全な例を見ることができます。
ステップ5 - Docker-Composeの実行
これでdocker-composeを実行する準備が整いました。注意:docker-composeを実行するには、docker-composeプロジェクトディレクトリにいる必要があり、構成のymlファイルが存在することを確認してください。
以下のコマンドを実行してLEMPスタックを起動します:
docker-compose up -d-d: デーモンまたはバックグラウンドとして実行
新しいコンテナが作成された結果が表示されます。以下のコマンドで確認します:
docker-compose ps
これで、Nginx、PHP-fpm、MariaDB、およびPHPMyAdminを実行している4つのコンテナがあります。
ステップ6 - テスト
ホスト上のdocker-proxyによって使用されているポートを確認します。
netstat -plntu
Nginxコンテナのポート80、MariaDBコンテナのポート3306、php-fpmコンテナのポート9000、およびPHPMyAdminコンテナのポート8080が表示されます。
ウェブブラウザからポート80にアクセスすると、index.htmlファイルが表示されます。
PHP-fpmが実行されていることを確認し、ウェブブラウザからアクセスします。
http://serverip-address/info.php

MySQLシェルでMySQLコンテナにアクセスします。
docker-compose exec mysql bash
mysql -u root -p
TYPE MYSQL PASSWORD: hakase-labs123新しいデータベースを作成します:
create database hakase_db;
exitMariaDB mysqlシェルコンテナにアクセスでき、新しいデータベース「 hakase_db 」を作成しました。

次に、ポート8080のPHPMyAdminにアクセスします:http://serverip-address:8080/。
PHPMyAdminのログインページが表示されます。ユーザー名「 root 」とパスワード「 hakase-labs123 」を入力します。

自動的にPMA_HOST環境変数で定義されたmysqlコンテナに接続されます。
「 Go 」をクリックすると、mysqlコンテナに接続されたphpmyadminダッシュボードが表示されます。

成功です!LEMPスタックがdocker-composeセットアップの下で実行されており、4つのコンテナで構成されています。
参考文献
- https://hub.docker.com/r/bitnami/nginx/
- https://hub.docker.com/r/bitnami/php-fpm/
- https://hub.docker.com/_/mariadb/
- https://hub.docker.com/r/phpmyadmin/phpmyadmin/
- https://docs.docker.com/compose/
- https://github.com/yuzukiseo/hakase-labs/tree/master/lemp-compose
- https://www.howtoforge.com/tutorial/how-to-create-docker-images-with-dockerfile/
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。