はじめに
Dockerを勉強しているので、メモも兼ねて自分なりの解釈を記事に残していこうと考え、投稿しています。
勉強途中のため、間違っている部分、非効率な部分などなどあると思います。その際は、ご指摘いただけたら嬉しいです。
本投稿の行うこと
Docker Composeを用いてLAMP環境を構築する
Docker Composeとは
複数のDockerコンテナを同時に連携して動かしたい時に使います。
Dockerコンテナ一つに対して一つのサービスが望ましいため、LAMP環境のような複数のサービスを同時に起動する環境を整える場合はDocker Composeを使用するのが望ましいです。
もちろんDocker Composeを使用しなくても、一つのコンテナにLAMP環境を構築することもできます。
Docker Composeの基礎知識
Dockerで一つのコンテナを作成する場合、「Dockerfile」が設計図となり、そこに記述されている内容をもとに環境が構築されます。
複数のコンテナを一括で作成して連携していくDocker Composeでは、「docker-compose.yml」が設計図となります。
各種コマンドを使用する場合は、「docker-compose.yml」ファイルが置かれているディレクトリで実行する必要があります。
LAMP環境を構築
ディレクトリ構成
/ -- docker-compose.yml
web-php/ -- Dockerfile
html/ -- index.html
ファイルを準備する
docker-compose.yml
# docker-composeファイル形式のバージョンを示す
version: '3'
services:
# webという名称のサービスを定義している
web-php:
# buildで指定されたディレクトリにあるDockerfileを使用する
build: ./web-php
# コンテナ名を指定する
container_name: web-php
# volumesでディレクトを指定することで、ローカルディレクトリとコンテナ内を同期できる
volumes:
- ./html:/var/www/html
# このサービスが公開するポート番号を指定する | ホスト側のポート番号:コンテナ内のポート番号 |
ports:
- "8080:80"
# depends_onでサービス間の依存関係を指定できる(dbコンテナが起動してからweb-phpコンテナが起動する)
depends_on:
- db
db:
# imageでDockerfileを使用せずにyml内で直接イメージを指定できる
image: mysql:5.7
# コンテナ名を指定する
container_name: db
# environmentで環境変数を定義する
environment:
- MYSQL_ROOT_PASSWORD=password
Dockerfile
FROM php:7.3-apache
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Test Page Welcome!</h1>
</body>
</html>
ポイント
-
docker-compose.yml
volumesを設定し、ローカルとコンテナ内を同期することで、ローカルで書いたソースコードを即時反映してデバックなどが可能。 -
Dockerfile
docker-composeでもDockerfileを使用することができるので、細かいコンテナの操作(RUN COPYなど)を実行することができる
Docker Composeを使用する
ファイルが準備出来たら、以下のコマンドを実行してコンテナを作成・起動しましょう。
docker-compose up -d
これで、「docker-compose.yml」に記述した二つのコンテナ(web-php・db)が起動している。
以下のコマンドで確認することができる。
# 現在起動中のコンテナを閲覧
docker-compose ps
# 作成済みのコンテナ(停止中を含む)を閲覧
docker-compose ps -a
localhostにアクセス
localhostにアクセスできれば構築成功です。
http://localhost:8080
今後の課題
・php.iniをdockerの利点を活用してスマートに作成する方法を学習する。
・dockerを使用してLaravelの環境を構築できるようになる。