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 upgrade

Ubuntuリポジトリから最新のDockerをインストールします。

sudo apt-get install -y docker.io

Dockerを起動し、ブート時に自動的に起動するように設定します:

systemctl start docker  
systemctl enable docker

Dockerサービスが実行中です。

次に、以下のコマンドを使用してDockerをテストできます:

docker run hello-world

Dockerからのこんにちは。

Hello Docker

ステップ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 --version

Docker-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 - hakase

Compose環境用の新しいディレクトリを作成します。

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

Docker compose project environment

ステップ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

running docker-compose

これで、Nginx、PHP-fpm、MariaDB、およびPHPMyAdminを実行している4つのコンテナがあります。

ステップ6 - テスト

ホスト上のdocker-proxyによって使用されているポートを確認します。

netstat -plntu

all docker port mapped to host

Nginxコンテナのポート80、MariaDBコンテナのポート3306、php-fpmコンテナのポート9000、およびPHPMyAdminコンテナのポート8080が表示されます。

ウェブブラウザからポート80にアクセスすると、index.htmlファイルが表示されます。

http://serverip-address/

PHP-fpmが実行されていることを確認し、ウェブブラウザからアクセスします。

http://serverip-address/info.php

php-fpm docker container is working

MySQLシェルでMySQLコンテナにアクセスします。

docker-compose exec mysql bash  
mysql -u root -p  
TYPE MYSQL PASSWORD: hakase-labs123

新しいデータベースを作成します:

create database hakase_db;  
exit

MariaDB mysqlシェルコンテナにアクセスでき、新しいデータベース「 hakase_db 」を作成しました。

access mysql shell docker container

次に、ポート8080のPHPMyAdminにアクセスします:http://serverip-address:8080/。

PHPMyAdminのログインページが表示されます。ユーザー名「 root 」とパスワード「 hakase-labs123 」を入力します。

phpmyadmin docker container

自動的にPMA_HOST環境変数で定義されたmysqlコンテナに接続されます。

Go 」をクリックすると、mysqlコンテナに接続されたphpmyadminダッシュボードが表示されます。

phpmyadmin and mysql docker container is working

成功です!LEMPスタックがdocker-composeセットアップの下で実行されており、4つのコンテナで構成されています。

参考文献

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。