教育資料作成のためのメモ。丁寧には書かない。
(以下、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
PHPとhttpdをインストール。
PHPの関連パッケージで競合があったので--skip-broken
yum -y install httpd yum -y install php yum -y --skip-broken install php-* yum -y install git
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>
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を利用できるようにする。
http://marmotte.pyrites.jp/blog/2015/01/13/docker-on-centos7/
デフォルトではfdのみなのでローカルホストからしかdockerコマンドを利用できませんが、TCPソケットを有効にして リモートマシンからもコントロールできるようにします。
ドキュメント上、以前は Port:4243を使用していましたが、メジャーバージョンから Port:2375に変わっています。
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); }