今更ながらDockerでCentOS PHP5.6 の環境を構築
複数のPHPのバージョンを入れて開発することになり、どうしてもローカルのMacで複数のバージョンのPHPを動かすには問題が多く、 これは仮想環境にしなとということで、せっかくなのではやりのDockerを使ってコンテナ環境で開発環境を構築してみたよ。
Dockerのインストール
ダウンロードページからOSに合わせてDockerをインストール
設定とか色々他のサイトにゆずり、dockerで、環境構築の手順をまずは
Dockerのコンテナのイメージ確認
お試しで、以下の環境をインストール
種類 | docker hub | コンテナ,タグ |
---|---|---|
PHP | https://hub.docker.com/_/php/ | php:5.6.33-apache |
Postgres | https://hub.docker.com/_/postgres/ | postgres:10.2 |
Postgresのコンテナ起動
$ docker run -d --name postgres102 -e POSTGRES_PASSWORD=pass -p 5432:5432 postgres:10.2 Unable to find image 'postgres:10.2' locally 10.2: Pulling from library/postgres 3e731ddb7fc9: Pull complete 6c47120e994b: Pull complete 5f766d668e8a: Pull complete 25131cac3889: Pull complete 64d99bc5f521: Pull complete 52f77b20404c: Pull complete f170bb6b5bb2: Pull complete 13d81ba24d2f: Pull complete 2a967418f27e: Pull complete e2be162d20ac: Pull complete 8809054a7d3a: Pull complete 330d4f0775cd: Pull complete ff84a9ce0acb: Pull complete Digest: sha256:7361bae1fbf5642099663d1f02dc949cabde1f86727bf8ff00d0a8806640a617 Status: Downloaded newer image for postgres:10.2 13f5208513e94b4243abe4acfb126516d5fb74edd28575b9ced705922c4a0c3f
bashでログインする
$ docker exec -ti postgres102 bash
PHPコンテナ起動
$ docker run -d --name php56 php:5.6.33-apache
起動済みの コンテナを確認
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b0ea94c2781b php:5.6.33-apache "docker-php-entrypoi…" 3 hours ago Exited (0) 16 minutes ago php56 13f5208513e9 postgres:10.2 "docker-entrypoint.s…" 4 hours ago Up 4 hours 0.0.0.0:5432->5432/tcp postgres102
起動済みコンテナの削除
$ docker rm -f b0ea94c2781b
port 変更して起動( -p ホスト:コンテナ)
$ docker run -p 8000:80 --name php56 -d php:5.6.33-apache
ホスト側のポートを8000に設定したので、Macの場合 http://localhost:8000 にアクセスすると表示される
$ docker exec -ti php56 bash
これだと、phpのコンテナからpostgresのコンテナへアクセスできないので、
$ docker run -p 8000:80 --name php56 -d php:5.6.33-apache --link postgres102
これで、postgres102という名前でpostgresへアクセスができるようになる。 またpgCommanderなどからpostgresへ接続する場合は、 ログイン情報を設定してやる必要がある。 設定は、環境変数に設定するので、以下の内容を引数で渡す。
- POSTGRES_DB
- POSTGRES_PASSWORD
- POSTGRES_USER
run — Docker-docs-ja 17.06.Beta ドキュメント
$ docker run -p 8000:80 --name php56 -d php:5.6.33-apache --link postgres102 -e POSTGRES_DB=db -e POSTGRES_PASSWORD=password -e POSTGRES_USER=pg_user
これだと長いし、毎回書くのが大変、そこでDockerファイルでこの情報をまとめる
# 使うイメージの指定 FROM postgres:10.2 # ポートを割り当て EXPOSE 5432:5432 # 環境変数の設定 ENV POSTGRES_DB=db POSTGRES_PASSWORD=password POSTGRES_USER=pg_user
Dockerfileで起動するには、まずimageを作成する必要がある。
docker build . docker run
これで、先程と同じようにpostgresが起動できる。
まずは、ここまで。 docker-compose を使うと複数のコンテナを起動して、リンクしてなどを1ファイルで管理(別ファイルに設定を切り出すことも可能)できるので便利。
dockerは、サーバの知識も必要だけど、コマンドの意味とサーバの設定がどうなったかを確認するのが、最初はミスに気づかずに起動しなくなったりも、、、
Dockerfileは、buildするとそのコンテナを使いまわすので、Dockerfileを書き換るだけじゃなくbuildのし直したが必要です。 また、imageが残ったままだと不便なので、最初は以下のコマンドで、一度削除してからbuildすることをオススメします。
docker stop docker rmi $(docker -qa)
こうするとdockerのコンテナを停止して、停止中のimage含め削除することができます。
とても参考になった本は、これ
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: WINGSプロジェクト阿佐志保
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/19
- メディア: Kindle版
- この商品を含むブログ (3件) を見る
良書だから、つい最近第2版がでたようです。
プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化
- 作者: WINGSプロジェクト阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2018/04/11
- メディア: 単行本
- この商品を含むブログを見る
以上