レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

docker-phpの環境構築メモ

教育資料作成のためのメモ。丁寧には書かない。
(以下、sudo面倒くさいのでrootでインストール)

PHPから DockerRemoteAPIを叩く、docker-phpというのがある。
https://github.com/docker-php/docker-php

ドキュメント
http://docker-php.readthedocs.org/en/latest/

環境構築のメモ

Virtualbox Centos7minimalで環境を作ってみる。

32bitのepelにはdocker-ioパッケージがないので、複雑化する。
またCentos6系は、Dockerのサポートから外れているので7の64bitでやる。
https://github.com/docker/docker/issues/14365

32bitか64bitかを知る方法

uname -a
i686, i686, i386と表示された場合は、32bitカーネル
X86_64やamd64と表示された場合は、64bitカーネル

centos7、ifconfigがなくてびびる
http://qiita.com/haisaihiroki/items/87fe137f00b5c625f607
http://www.cyberciti.biz/faq/rhel-centos-linux-7-restart-networking-command-line/

ifconfig -> ip addr
service サービス コマンド -> systemctl コマンド サービス 

virtualbox にcentos7.isoをインストール
・ホストオンリーネットワークを作っておくこと
参考:http://www.kakiro-web.com/memo/virtualbox-create-virtual-machine-2.html
・ホストオンリーネットワークは、ipを192.168.99.2で静的に設定
 ローカルPC側を192.168.99.1にしてみた。

selinux を止める

vi /etc/selinux/config

書き換える箇所は以下

SELINUX=permissive

要、再起動

reboot

docker インストール

yum update
yum -y install docker-io

dockerのサービスを起動する

systemctl start docker
systemctl enable docker

dockerイメージをダウンロード

docker pull busybox:latest

実行確認してみる。

docker run -it busybox

busyboxは、基本的なLinuxコマンド群を単一のbusyboxコマンドにまとめたものであり、必要最小限のLinuxシェル環境を提供する場合によく利用されています。

Dockerにおけるデータ専用コンテナ、KVM仮想化環境からの移行 | Think IT(シンクイット)

centos7のイメージも入れてみた。動いてる

docker pull centos:7
docker run -i -t centos:7 /bin/bash

PHPhttpdをインストール。
PHPの関連パッケージで競合があったので--skip-broken

yum -y install httpd
yum -y  install php
yum -y --skip-broken  install php-* 
yum -y  install git

httpd.confでPHPを有効化

vi /etc/httpd/conf/httpd.conf

約45行目「Dynamic Shared Object (DSO) Support」ブロックの中に、モジュールを登録する以下の記述をします。(58行目あたりにしました)

# PHP setting --- start
LoadModule php5_module modules/libphp5.so

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

httpd起動、自動起動

systemctl start httpd.service
systemctl enable httpd.service

composerをインストール(docker-phpインストールのため)

cd ~/
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

プロジェクトを作成、httpdのデフォルトのドキュメントルート/var/www/html配下に作った

cd /var/www/html
mkdir docker-php

composerでdocker-phpをインストール

cd docker-php 
composer require docker-php/docker-php

環境変数でDOCKER_HOSTを設定しておく( remote apiのため)

vi /etc/profile

最終行に追記

DOCKER_HOST=tcp://127.0.0.1:2375

設定した環境変数の読み込み

source /etc/profile

dockerをtcpで待ち受けるように設定

vi /etc/sysconfig/docker

2375ポートでRemotoAPIを待ち受けるようにする。

OPTIONS='--selinux-enabled -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375'

TCP経由でRemoteAPIを利用できるようにする。
デフォルトではfdのみなのでローカルホストからしかdockerコマンドを利用できませんが、TCPソケットを有効にして リモートマシンからもコントロールできるようにします。
ドキュメント上、以前は Port:4243を使用していましたが、メジャーバージョンから Port:2375に変わっています。

http://marmotte.pyrites.jp/blog/2015/01/13/docker-on-centos7/


vi /etc/init/docker.conf
DOCKER_OPTS='-H tcp://127.0.0.1:2375'

Docker再起動

systemctl restart docker

PHPのファイルを作成

cd /var/www/html/docker-php/
vi test.php

中身。(内容はdocker-phpのドキュメント参照)

<?php
require_once("vendor/autoload.php");

use Docker\Docker;
use Docker\DockerClient;
use Docker\API\Model\ContainerConfig;
try{
  $client = new DockerClient([
    'remote_socket' => 'tcp://127.0.0.1:2375',
    'ssl' => false,
  ]);

  $docker = new Docker($client);

  //$containers = $docker->getContainerManager()->findAll();

  $containerManager = $docker->getContainerManager();

  $containerConfig = new ContainerConfig();
  $containerConfig->setImage('busybox:latest');
  $containerConfig->setCmd(['echo', 'I am running a command']);

  $containerCreateResult = $containerManager->create($containerConfig);
  echo var_dump($containerCreateResult);
} catch(Exception $e){
  print($e);
}