2017年9月10日 星期日

用docker快速建立開發環境 (php7.1 + mysql + apache)

        以下範例的程式碼都在github上。
     
        https://github.com/keepgoing147/docker-php7-apache-mysql

        安裝好docker之後,新建一個資料: test,cd 到test,新增docker-compose.yml,並新增以下code:

web:
  build: .
  links:
    - db
  ports:
    - 80:80
  volumes:
    - ./www/html:/var/www/html
    - ./src/your-project/:/var/www/html/your-project

db:
  image: mysql:latest
  restart: always
  volumes:
    - ./mysql:/var/lib/mysql
  environment:
    MYSQL_ROOT_PASSWORD: rootpassword
  ports:
    - 8887:3306

        這邊要注意yml編排格式。

        接著,在同樣的資料夾新增一個Dockerfile,並新增以下code:

FROM php:7.1.9-apache

RUN apt-get update
RUN docker-php-ext-install pdo pdo_mysql

        最後,新增src/your-project/index.php,index.php的內容打:

<?php

echo 'success execute in docker!';


        這個時候,你的資料夾結構應該會長這樣:


        執行:docker-compose up -d
         (-d是為了讓docker-compose命令在背景執行,不追蹤成功run起來之後的後續動作)

        會出現開始build image的訊息


        這次我們用了兩個image:php:7.1.9-apache, mysql:latest,所以會需要pull下來兩個image檔。

        

    執行完成之後,存取 http://localhost/your-project/ ,就會看見成果了:


        也可以再your-project裡面新增這段code來測試mysql是不是也架好了:

<?php
try {
    $db = new PDO(
       'mysql:host=db;dbname=docker-table;port=3306;charset=utf8',
      'root',
      'rootpassword'   );
} catch (PDOException $e) {
    echo 'DB connection failed';
   exit;
}

$data = $db->query('select * from comments');
$data = $data->fetchAll();
var_dump($data);

        osx上的話可以透過sequel pro去連接localhost:8887的db,去建立一個docker-table的database,再新增一個table為comments,去測試能否成功query就行了。

        結果會像這樣:

        連接成功!