すぐ忘れるのでメモ
1.とりあえず、php+apacheのイメージを公式から落とす
docker run -d php:5.6-apache
※あれば、する必要なし。
起動したら、コンテナ名を調べ、コンテナを消す
docker ps
docker rm -f XXXXX(起動したapache-phpのコンテナ名)
2.とりあえず、ubuntuのイメージを公式から落とす
docker run -it ubuntu:14.04 /bin/bash
※あれば、する必要なし。
起動したら、ubuntuからログアウトして、コンテナ名を調べ、コンテナを消す
docker ps -a
docker rm -f XXXXX(起動したubuntuのコンテナ名)
3.postgresにアクセス出来るphp-apacheのイメージファイルを作成
[1]1.のイメージを元にする、Dockerfileを作成
ROM php:5.6-apache
RUN set -ex apk --no-cache add postgresql-dev libpq-dev
RUN apt-get update && apt-get install -y libpq-dev && docker-php-ext-install pdo pdo_pgsql mbstring
※Debian系なので、apt-get
※pdoでアクセスするので「pdo_pgsql」
※libpq-devがないと、ヘッダが無いと言われてエラーとなる
[2]php用Dockerイメージのビルド
docker build -t php:5.06apache_postgres ./
※イメージ名を「php:5.06apache_postgres」とした。
※実行フォルダにDockerファイルがあるものとする。
[3]正常に終って、ビルド結果を一応確認。
docker images
一覧のタグに、「5.06apache_postgres」があれば、ok
4.postgres環境の作成
[1]2.ubuntuイメージを元にするDockerfileを作成
※親切な人のページを参照してそのまま使用。。。
http://blog.flup.jp/2016/02/14/devenv_postgresql_with_docker/
FROM ubuntu:14.04
RUN apt-get update && \
apt-get install -y -q postgresql-9.3 libpq-dev postgresql-client-9.3 postgresql-contrib-9.3 && \
rm -rf /var/lib/apt/lists/*
USER postgres
RUN /etc/init.d/postgresql start &&\
psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\
psql --command "CREATE DATABASE docker WITH OWNER docker TEMPLATE template0 ENCODING 'UTF8';" &&\
echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf &&\
echo "listen_addresses='*'" >> /etc/postgresql/9.3/main/postgresql.conf
EXPOSE 5432
VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]
※ dbuser/passはdocker/docker。portはデフォルト。
[2]postgres用Dockerイメージのビルド
docker build -t ubuntu:14.04postgres ./
※イメージ名を「ubuntu:14.04postgres」とした。
※実行フォルダにDockerファイルがあるものとする。
(ただし、2、とは違うフォルダ。)
[3]正常に終って、ビルド結果を一応確認。
docker images
一覧のタグに、「14.04postgres」があれば、ok
5.postgresの起動
docker run -d -p 5432:5432 --name postgresql ubuntu:14.04postgresfg
※コンテナ名を「postgresql」にした。
※ロカールでも5432で繋げるようにした。
起動したら、pgadminでつないでみる。
つながった。
6.apache-phpの起動
[1]
コンテナにソースを作らず、ローカルのソースを参照するようにして
コンテナを起動する
docker run -p 80:80 -v ~/work/hoge/html:/var/www/html --link postgresql --name php_tktk -d php:5.06apache_postgres
・コンテナ名は、「php_tktk」
・ローカルに、~/work/hoge/htmlフォルダを準備
・postgresのコンテナにリンクするので、「--link postgresql」を指定
[2]
「~/work/hoge/html/index.php」を準備。
<?php phpinfo();
posgreの設定が反映されている。
[3]
一旦、コンテナを削除して、DBへの接続情報を環境変数で渡すようにして、
再作成・起動する。
docker rm -f php_tktk
削除後、環境変数を渡すようにして、再起動。
docker run -p 80:80 -v ~/work/hoge/html:/var/www/html \
-e DBUSER=docker -e DBPASS=docker -e DBPORT=5432 -e DBNAME=docker -e DBHOST=postgresql \
--link postgresql --name php_tktk -d php:5.06apache_postgres
接続情報を環境変数で渡す(ユーザー、パス、ポート、DB名、ホスト名(コンテナ名))
※ホスト名にコンテナ名を指定するのは、linkしてるから(と思う。。。)
起動後、index.phpを開いて、phpinfoが出てるか確認する。
[4]
DBとの接続を確認するため、「~/work/hoge/html/tktk.php」を作成
<?php
# とりあえず、環境変数から接続情報を取得
$dbuser=getenv('DBUSER');
$dbpass=getenv('DBPASS');
$dbport=getenv('DBPORT');
$dbname=getenv('DBNAME');
$dbhost=getenv('DBHOST');
$dsn = 'pgsql:dbname='. $dbname . ' host=' . $dbhost. ' port=' . $dbport;
$user = $dbuser;
$password = $dbpass;
# 接続
$dbh = new PDO($dsn, $user, $password);
$now_tm = "___";
$dbh = new PDO($dsn, $user, $password);
$st = $dbh->query("select current_timestamp as now_tm");
while($row = $st->fetch()){
$now_tm = $row["now_tm"];
break;
}
$st = null;
$dbh = null;
?>
<html lang="ja">
<meta charset="UTF-8">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<title>tktk</title>
<body>
<h1>now_tm:[<?php echo $now_tm;?>]</h1>
</body>
</html>
テーブル作るのはめんどいので、
DBからsysdateを取得して表示する感じのソース。。。
コンテナに、接続情報を渡しているので、そこから取るように記述。
[5]
ブラウザで確認。
OKの模様w