Docker 学習 #4:Docker Composeを学ぶ

公開:2026.04.16 09:39

Docker Composeを学ぶ

前回はDockerfileを使ってみたが
Docker 学習 #2:Dockerfileを学ぶ
Docker 学習 #3:Dockerfileを学ぶ #2
Dockerfileとは別に "Docker Compose" というのも存在する。

なんだか似たような物にも見えるが、
・Dockerfile … Dockerイメージ(Dockerコンテナのテンプレート的なもの)を作るための設計図
・Docker Compose … DockerイメージよりDockerコンテナを作成・実行するための設計図
と理解した。

過去にDockerコンテナをいくつか作っていたので、これらをDocker Composeで対応してみる。
※ 対象記事:WSL #32:Docker上にPHP環境を作る

環境

Windows 11 25H2 (26200.8037)

WSLバージョン
PS C:\Users\xxx> wsl --version
WSL バージョン: 2.3.24.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26200.8037

Ubuntuバージョン
xxx@xxx:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble

Docker Compose CPIプラグインのインストール確認

Compose CLIがインストールされていることを確認する。

docker compose version

実行結果:

      root@xxx:~/docker/php# docker compose version
      Docker Compose version v5.1.2
    

基準フォルダの作成

WSL上に作業用フォルダを作成する。
~/docker/php フォルダを作業フォルダとして作成した。

また、HTMLを配置するフォルダをWindows側にて D:\docker\data\www\html\ のフォルダとして作成した。

YAMLファイル

ファイル名:compose.yaml
バージョン記載:必要なし

ネット上の記事を見ていると "docker-compose.yml"だったり、"compose.yml"だったり色々なファイル名のサンプルが出ているが、現在の推薦は "compose.yaml" とのこと。
またcompose.yamlの先頭に "version: x.x" の指定は非推薦となっているので書かなくてよい。
https://docs.docker.jp/compose/compose-file/index.html#compose-spec-compose-file

必要なファイルの抽出

php:8.3-apacheイメージに含まれているPHP.iniファイルを抽出しておく。

◆ コンテナ作成:

docker create --name tmp php:8.3-apache

実行結果:

  root@xxx:~/docker# docker create --name tmp php:8.3-apache
  Unable to find image 'php:8.3-apache' locally
  8.3-apache: Pulling from library/php
  Digest: sha256:7912dada009d971264115de9e43cb2e97878ddfd09bd19418901217b8aa3c09a
  Status: Downloaded newer image for php:8.3-apache
  ec4fa7782cccafdd022b787c40c043444b538d9fc7ba52a35d200667995c1e05
    

◆ iniファイル抽出とコンテナ削除:

docker cp tmp:/usr/local/etc/php/php.ini-development ./php.ini-debug
docker cp tmp:/usr/local/etc/php/php.ini-production ./php.ini-production
docker rm tmp

実行結果:

      root@xxx:~/docker/php# docker create --name tmp php:8.3-apache
      a44488f822ae886df5ae51662fa5d5c13e35aba089353aec8a35a2d7bfe9f059
      root@xxx:~/docker/php# docker cp tmp:/usr/local/etc/php/php.ini-development ./php.ini-debug
      Successfully copied 73.3kB (transferred 75.3kB) to /root/docker/php/php.ini-debug
      root@xxx:~/docker/php# docker cp tmp:/usr/local/etc/php/php.ini-production ./php.ini-production
      Successfully copied 73.4kB (transferred 75.3kB) to /root/docker/php/php.ini-production
      root@xxx:~/docker/php# docker rm tmp
      tmp
    

compose.yaml作成

イメージは php:8.3-apache とする。
HTMLファイルルートを WindowsのD:\docker\data\www\html\ へマッピング、
ポートは80番をホストの8081番にマッピングする。

※先頭の半角スペースは "_" で記載
services:
__php:
____image: php:8.3-apache
____volumes:
______- /mnt/d/docker/data/www/html:/var/www/html
______- ./php.ini-debug:/usr/local/etc/php/php.ini
____ports:
______- "8081:80"

ここまでの状態で動くか実行してみる。

docker compose up -d

実行結果:

root@xxx:~/docker/php# docker compose up -d
[+] up 1/1
 ✔ Container php-php-1 Started                                                                                      0.4s
  

ブラウザで localhost:8081 へ接続
またhtmlを配置していないのでエラーとなるが、動いてるっぽい。

Windowsのd:\docker\data\www\html\phpinfo.phpを作成する。

    
  

問題なし。
ついでに "display_errors" の値が "On" になっているか確認。
"On"であればphp.ini-debugが正しく読み込まれている。

production版のphp環境作成

先ほどはdebug環境のコンテナだったが、ついでにproduction版の環境も作れるようにしておく。
production-compose.yamlを作成し以下を記載

services:
__php:
____volumes:
______- ./php.ini-production:/usr/local/etc/php/php.ini

コンテナ起動:

docker compose -f compose.yaml -f production-compose.yaml up -d

実行結果:

root@xxx:~/docker/php# docker compose -f compose.yaml -f production-compose.yaml up -d
[+] up 1/1
 ✔ Container php-php-1 Started                                                                                      0.3s
  

ブラウザで localhost:8081/phpinfo.php を表示、display_errorsが "Off" であればphp.ini-productionが正常に読み込まれている。

いい感じ



0 件のコメント:

その他の記事