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. 下準備
今回は下記のようなファイル構成にします。
/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() で動作確認を行います。
FROM php:7.4-apache
RUN apt-get update && \
docker-php-ext-install pdo_mysql
<?php phpinfo(); ?>
- php Tags - Docker Hub
- https://hub.docker.com/_/php?tab=tags&name=7.4-apache
2. docker-compose.yml の書き方
Docker Compose で直接 Dockerfile を指定する場合は下記のように build オプションを使います。
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
- build (Compose file version 3 reference | Docker Documentation)
- https://docs.docker.com/compose/compose-file/#build
- ports (Compose file version 3 reference | Docker Documentation)
- https://docs.docker.com/compose/compose-file/#ports
- volumes (Compose file version 3 reference | Docker Documentation)
- https://docs.docker.com/compose/compose-file/#volumes
動作確認としては、ブラウザで 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