DockerでサクッとLAMP環境を構築してプログラムを動作させたい

 

こんにちは。

自分が使っているPCはWindowsやMacだけどLinux環境でなにか試して見たいことってありますよね。

今回はDockerを使ってLAMP環境を構築してみましたので、その方法について残しておきたいと思います。

 

Dockerをインストール

 

まずは、Dockerをインストールします。Dockerは以下のリンクから取得できるかと思います。

https://www.docker.com/products/docker-desktop

 

Macの場合はHome Brewからでも取得することができます。今回はHome Brewを使用したインストール方法を解説します。

関連記事

  Macで環境を構築する際に便利なものにHome Brewというパッケージマネージャーがあります。   なにか必要なパッケージがあるときにその依存関係にある他のパッケージも一緒にインストールしてくれる[…]

Home Brewをインストールして快適にMacの環境構築

 

まずは、Home BrewからDockerを取得します。

$ brew install docker
$ brew cask install docker

 

Dockerがインストールできたか確認をします。

$ docker --version

 

その後、ApplicationフォルダにDocker.appがダウンロードされているはずなので、Dockerのデーモンを起動するためにこちらを起動します。

 

ポップアップが出てきますが、開く→OKとクリックし、その後パスワードを入力し、Docker.appを起動させます。

 

LAMP環境構築のための各種設定

 

ここからは、実際に環境を構築していきます。まず、適当なフォルダを作ります。

 

$ mkdir docker-lamp

 

作ったフォルダに移動して、各種設定ファイルを作成していきます。

$ cd docker-lamp

$ mkdir php # php-apacheサーバー設定データ用
$ touch php/Dockerfile

$ mkdir mysql # MySQLデータ用

$ mkdir html # phpファイル用

$ touch docker-compose.yml
$ touch php.ini

 

次に、docker-compose.ymlを記述していきます。

version: '3'

services:
  mysql:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_USER=test
      - MYSQL_PASSWORD=test
  php:
    build: ./php
    volumes:
      - ./php.ini:/usr/local/etc/php/php.ini
      - ./html:/var/www/html
    ports:
      - 8080:80
    depends_on:
      - mysql 

 

できたら、phpサーバー用のDockerfileを記述していきます。php:7.4-apacheにはMySQLのドライバが入っていないので、同時にインストールしています。

FROM php:7.4-apache
RUN apt-get update && apt-get install -y libonig-dev && \
  docker-php-ext-install pdo_mysql mysqli mbstring

 

あとは、php.iniを好みのようにカスタマイズしたら設定は完了です。早速環境を構築していきましょう。

 

LAMP環境を構築

 

先程までに各種設定ファイルを作成しましたので、コンテナを起動します。

 

$ docker-compose up -d
# Starting docker-lamp_mysql_1 ... done
# Starting docker-lamp_php_1   ... done

 

コンテナが起動したかを確認します。

$ docker ps

 

ここに2つのコンテナが表示されていれば起動完了です。

動作確認

 

先程作成したhtmlフォルダにhtmlファイルを作成してブラウザで確認してみます。

 

以下ファイルをindex.htmlとしてhtmlフォルダに入れます。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Hello World</title>
</head>
<body>
    <h1>Hello World</h1>
</body>
</html> 

 

できたら、http://localhost:8080にアクセスするとHello Worldページが表示されます。

 

CLIでphpスクリプトを実行したい場合などはコンテナに入って実行します。(コンテナIDはdocker psコマンドで確認できます)

$ docker exec -it コンテナID /bin/bash

 

あとはデータベース側ですが、MySQLにログインしたい場合は以下のようにします。ユーザ名はdocker-compose.ymlで設定したものです。

$ docker exec -it コンテナID mysql -u ユーザ名 -p

 

このあとにパスワード入力を求められ、docker-compose.ymlで設定したパスワードを入力し、MySQLを操作することができます。

 

最後に、phpからMySQLにアクセスしたい場合は設定を以下のようにします。基本的にdocker-compose.ymlで設定した値を使用します。

注意点としてはホストがIPやlocalhostではなくmysqlコンテナのサービス名を指定します。

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=test
DB_PASSWORD=test

 

コンテナの停止

 

最後に停止についてです。起動したコンテナを停止するには以下のコマンドを使用します。

$ docker-compose stop

 

最後に

 

Dockerを使うことで簡単にLAMP環境をWindowsやMacに作ることができました。

ちょっと試したいことがあるときなんかにもコンテナを利用して簡単に環境が作れるのは魅力的ですね。