6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows10にDockerでLAMP環境を構築する その3

Last updated at Posted at 2016-07-21

前回できなかったMySQLとの疎通を行っていきます。

$ docker --version
Docker version 1.11.2, build b9f10c9
$ docker-compose --version
docker-compose version 1.7.1, build 0a9ab35

ライブラリのインストール

まずサーバーにPDOなりmysqliなりが入っているか確認してみます。

$ touch ./html/phpinfo.php
html/phpinfo.php
<?php phpinfo();

pdoはsqliteしか入っていませんし、当然ですがmysqliは見当たりません。公式のイメージには入っていないということです。
ではコンテナ内でインストールを……、といっても、また再起動したら消えてしまいます。
インストールディレクトリをホストと共有する? いやいくらなんでもそれはおかしい。

ここでDockerfileを使います。む、順番が逆な気がするけどきっと気のせいです。
Dockerfileには、イメージをコンテナ化する際に走らせる命令を記述します。立ち上げるたびにインストールされるので、再起動後もわざわざコンテナに入って作業する必要がなくなります。

コンテナをDockerfileから起動するには、docker-compose.ymlの記述を変更します。

docker-compose.yml
version: "2"

services:

  web:
    build: ./web
    ports:
      - "80:80"
    volumes:
      - ./html/:/var/www/html

  db:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes_from:
      - data

  data:
    image: busybox:1
    volumes:
      - /var/lib/mysql:/var/lib/mysql

webの起動元を./webディレクトリ内のDockerfileに指定しました。
続けてDockerfileを書きます。

$ mkdir web
$ touch web/Dockerfile
FROM php:5.6-apache

RUN docker-php-ext-install pdo_mysql

EXPOSE 80

(´-`).oO(ファイル名が表示されない……)

RUNの後に走らせるコマンドを書きます。例えばapt-getやcurl等々。
docker-php-ext-installは、公式のイメージで用意されているコマンドです。PHPのライブラリのインストールに使います。
ここではPDOを使っていますが、mysqliでも問題ありません。たぶん。
早速起動。

$ docker-compose down
$ docker-compose up -d

起動時の画面が少し変わったはず。
phpinfoを見てみると、PDO Driversにmysqlが加わっている、はず!

疎通テスト

テスト用のファイルを用意します。

$ touch html/connection.php
html/connection.php
<?php

$dns      = 'mysql:host=db;port=3306;dbname=sandbox';
$user     = 'root';
$password = 'root';

try {

    $pdo = new PDO($dns, $user, $password);
    echo 'Connection success';

} catch (PDOException $e) {

    echo 'Connection failed: ' . $e->getMessage();

}

Σo(*゚д゚)ノ 待った! そのホスト名なんだ!?

docker-compose.ymlに記述されたサービス名は、それぞれのコンテナ内のネットワークにその名前で追加されます。
追加ってなんだ? でもそう書いてあるんだからそうなのでしょう。

とにもかくにも、connection.phpにつないでみると……。

Connection success

٩( 'ω' )و

くぅ疲

とはいえまだ最低限の環境ができたにすぎません。
mysqlの文字コードがlatinのままだったりするし、フレームワークを入れてDocumentRootを変更する必要が出てきたりします。
そういった初期設定はDockerfileに書いていくことになります。あとはまぁ、適当にググってやれば何とかなります(適当)。

成果: https://github.com/kamonamban/study_lamp

この記事を書くにあたっては、Laradockの構成を大いに参考にしました。

6
5
0

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
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?