Docker Compose で Dockerfile を直接指定してコンテナ作成

はじめに

先月に投稿した「Docker で PHP 7.4 と MariaDB 10.5 の LAMP + phpMyAdmin 環境を構築する方法」では、Dockerfile を用いて独自のイメージを作る方法をご紹介しました。

その際は、事前に Dockerfile をビルドしてイメージを生成し、それを docker-compose.yml で指定する形をとりました。

今回は Docker Compose で Dockerfile を直接指定してコンテナを作る方法をご紹介します。

Docker
19.03.1
Docker Compose
1.24.1
目次
  1. 下準備
  2. docker-compose.yml の書き方
  3. おわりに

1. 下準備

今回は下記のようなファイル構成にします。

/path/to/your-dir/
  ├ docker/
  │  ├ my-php_74-apache/
  │  │  └ Dockerfile
  │  └ docker-compose.yml
  └ html/
      └ index.php

下記 Dockerfile で公式イメージの php:7.4-apache に拡張モジュールを追加し、html フォルダをコンテナにマウントして、index.php の phpinfo() で動作確認を行います。

/docker/my-php_74-apache/Dockerfile
FROM php:7.4-apache

RUN apt-get update && \
  docker-php-ext-install pdo_mysql
/html/index.php
<?php phpinfo(); ?>

2. docker-compose.yml の書き方

Docker Compose で直接 Dockerfile を指定する場合は下記のように build オプションを使います。

/docker/docker-compose.yml
version: "3"

services:
  myapp-web:
    container_name: myapp-web
    build:
      context: ./my-php_74-apache
      dockerfile: Dockerfile
    ports:
      - "80:80"
    volumes:
      - "../html:/var/www/html"
$ cd /path/to/your-dir/docker
$ docker-compose up -d

動作確認としては、ブラウザで myapp-web コンテナにアクセスして、
phpinfo() の項目「Additional .ini files parsed」に「docker-php-ext-pdo_mysql.ini」があれば完了です。

余談ですが Docker toolbox on windows 使用時には、volumes でマウントするために、VirtualBox の共有フォルダ設定で /path/to/your-dir/html を追加する必要があります。

設定方法は「docker toolbox windows volumes 共有」などで検索すると、みつかると思います。

3. おわりに

docker-compose.yml の build を使うとイメージをビルドする手間がなくなるので、それを再利用しないような場合は便利だと思います。
(再利用する場合には REPOSITORY と TAG の命名をきちんとするのがオススメです)

ただし、この方法でも Dockefile から作られたイメージは残りますので、ご注意ください。

$ docker images
REPOSITORY        TAG     IMAGE ID      CREATED         SIZE
docker_myapp-web  latest  0123456789ab  10 seconds ago  432MB