LoginSignup
2
0

More than 1 year has passed since last update.

Dockerfile から docker-compose.yaml を作る

Posted at

docker で nginx と php-fpm 環境を構築してみる で作成した Dockerfile をもとに docker-compose.yaml を作成して、docker イメージを docker-compose コマンドでコンテナの生成と起動ができるようにする。

手順の流れ

  1. docker-compose.yaml の作成
  2. nginx と php-fpm の Dockerfile の設定を変更する
  3. docker-compose で両イメージを起動する
  4. コンテナへの接続を確認する
  5. コンテナの停止と削除をする

docker-compose.yaml の作成

$ pwd
$HOME/works/docker-sample/php-tcp
$ touch docker-compose.yaml
$ vim docker-compose.yaml
$ cat docker-compose.yaml

docker-compose.yaml の設定内容は次の通り。

version: '3'

services:
  php-sample:
    restart: always
    build:
      context: .
      dockerfile: ./php/Dockerfile

  nginx-sample:
    restart: always
    ports:
      - 80:80
    build:
      context: .
      dockerfile: ./nginx/Dockerfile

nginx と php-fpm の Dockerfile の設定を変更する

このまま docker-compose コマンドからコンテナを作成すると、nginx と php-fpm のイメージに取り込む設定ファイル読み込み時にエラーが発生するので、両 Dockerfile に変更を加える。

php-fpm の Dockerfile

変更前にオリジナルの複製を作り、変更点がわかるようにする。

$ cp php/Dockerfile php/Dockerfile.orig
$ vim php/Dockerfile
$ diff -uw php/Dockerfile.orig php/Dockerfile

変更点は次の通り。
(行頭 (-) は変更前の記述。行頭 (+) は変更後の記述)

--- php/Dockerfile.orig	2022-03-27 13:43:21.000000000 +0900
+++ php/Dockerfile	2022-03-27 13:43:50.000000000 +0900
@@ -1,5 +1,5 @@
 FROM php:8.1.4-fpm-alpine

 RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini
-COPY settings/php.ini /usr/local/etc/php/conf.d/php.ini
-COPY src /usr/share/nginx/html
+COPY php/settings/php.ini /usr/local/etc/php/conf.d/php.ini
+COPY php/src /usr/share/nginx/html

Dockerfile から参照する相対パスを docker-compose.yaml から参照した場合の相対パスに変更している。

nginx の Dockerfile

$ cp nginx/Dockerfile nginx/Dockerfile.orig
$ vim nginx/Dockerfile
$ diff -uw nginx/Dockerfile.orig nginx/Dockerfile

nginx の Dockerfile の変更点は次の通り。

$ diff -uw nginx/Dockerfile.orig nginx/Dockerfile
--- nginx/Dockerfile.orig	2022-03-27 13:44:42.000000000 +0900
+++ nginx/Dockerfile	2022-03-27 13:45:20.000000000 +0900
@@ -1,3 +1,3 @@
 FROM nginx:1.21.6-alpine

-COPY settings/default.conf /etc/nginx/conf.d/default.conf
+COPY nginx/settings/default.conf /etc/nginx/conf.d/default.conf

docker-compose で両イメージを起動する

$ docker-compose up -d --build
Creating network "php-tcp_default" with the default driver
Building php-sample
...
Creating php-tcp_nginx-sample_1 ... done
Creating php-tcp_php-sample_1   ... done

docker-compose でコンテナを起動すると、Creating network "php-tcp_default" with the default driver と実行されて、一時的なネットワークを自動的に生成してくれる。

コンテナへの接続を確認する

コンテナの起動を確認して、nginx に接続をしてみる。

$ docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                NAMES
b4fc4a4e62ee   php-tcp_nginx-sample   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp   php-tcp_nginx-sample_1
1f6bbef6b036   php-tcp_php-sample     "docker-php-entrypoi…"   2 minutes ago   Up 2 minutes   9000/tcp             php-tcp_php-sample_1
$ curl -I -s localhost:80
HTTP/1.1 200 OK
Server: nginx/1.21.6
Date: Sun, 27 Mar 2022 08:27:17 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/8.1.4

WEB ブラウザから http://localhost/ にアクセスをして、phpinfo(); の実行結果が表示されることを確認する。

コンテナの停止と削除をする

$ docker-compose down
Stopping php-tcp_nginx-sample_1 ... done
Stopping php-tcp_php-sample_1   ... done
Removing php-tcp_nginx-sample_1 ... done
Removing php-tcp_php-sample_1   ... done
Removing network php-tcp_default
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0