はじめまして。GMOインサイトのS.Oです。
昨年の10月ぐらいから土日の休み中に、Dockerを使ってみました。
目的
【個人的な場合】
- パソコンとインターネットがあればどこでも開発環境を構築できるようにしたい。
※ パソコンに依存しない開発環境を整えたい - 稼働中のアプリを別環境下でも正常に稼働するかどうかのテストを容易にしたい
例) PHP5.6のアプリをPHP7でテストしたいなど… - いろいろなミドルウェアを気軽に触ってみたい
【会社で使う場合】
- 関係するメンバーに、同じ開発環境を提供できるようにしたい。
構成イメージ
パソコン内部は、以下のような構成になります。
環境条件
- Dockerが動く環境が必要
※ 仮想マシン(Linux)を用意する ( Windows, Mac )
※ Dockerをインストールする (仮想マシン, Linux)
※ Docker Composerをインストールする (仮想マシン, Linux)
仮想マシンの選択
いろいろなやり方があると思いますが、簡単な方法として以下の2通りから選択しました。
- Virtualbox + Vagrant
- Docker Toolbox
私の環境(Mac Book Air)では、Virtualboxが既に稼働していたので①の方法で進めます。
( 仮想環境に慣れていない方は、②の方法を選択した方がいいかも… )
環境構築 – 仮想マシンを準備する
仮想化ソフトとコードを扱うためGitをインストールする
- Virtualbox
- Vagrant ( プラグインは必要に応じてインストール 例) vagrant-vbguest など… )
- Gitのインストール
サーバ構築は、Vagrant Cloudからイメージをダウンロードして使う。
※ すでにDockerとdocker-composeはインストール済み
[構成イメージ ]
[ファイル構成(ホストOS)]
1 2 3 4 |
./ ├ opt ※ 作業フォルダ (ホストOSと同期) ├ README.md ※ このリポジトリの説明と操作手順 └ Vagrantfile ※ Vagrantの設定ファイル |
下記のGitHubに必要なファイルや手順をまとめました。
※ GitHub: reflet/vagrant-centos-7.2
https://github.com/reflet/vagrant-centos-7.2
- Vagrantを起動して、SSH接続する
123$ git clone https://github.com/reflet/vagrant-centos-7.2.git .$ vagrant up$ vagrant ssh
コンテナ作成 – Apache
Dockerfileにてコンテナを作成します
( サーバの作成方法です。 サーバ環境を構築する場合は、この作業は必要なし )
1 2 3 4 5 |
/home/vagrant/opt/ └ dockerfile └ httpd ├ Dockerfile ※ コンテナの設定ファイル └ README.md ※ このリポジトリの説明と操作手順 |
作成したDockerfileや使い方の手順については、下記のGitHubにまとめました(細かい話は省略)。
※ GitHub: reflet/docker-debian-httpd
https://github.com/reflet/docker-debian-httpd
- コンテナのイメージを作成する
123$ mkdir -p ~/opt/dockerfile/httpd/ && cd ~/opt/dockerfile/httpd/$ git clone https://github.com/reflet/docker-debian-httpd.git .$ docker build -t reflet/debian8-httpd . - コンテナを起動し、接続する
12$ docker run --name httpd -d -p 80:80 reflet/debian8-httpd$ docker exec -u "www-data" -it reflet/debian8-httpd bash - Dockerfile調整
※ Dockerfileを修正し、2と3を繰り返し、完成後、 githubへpush。 - tagを発行し、Docker-hubへイメージをpushする
12$ docker tag reflet/debian8-httpd reflet/debian8-httpd:{タグ}$ docker push reflet/debian8-httpd:{タグ}
以上
コンテナ作成 – PHP7
Dockerfileにてコンテナを作成します
( サーバの作成方法です。 サーバ環境を構築する場合は、この作業は必要なし )
[ファイル構成(仮想マシン)]
1 2 3 4 5 |
/home/vagrant/opt/ └ dockerfile └ php ├ Dockerfile ※ コンテナの設定ファイル └ README.md ※ このリポジトリの説明と操作手順 |
作成したDockerfileや使い方の手順については、下記のGitHubにまとめました(細かい話は省略)。
※ GitHub: reflet/docker-debian-php
https://github.com/reflet/docker-debian-php
- コンテナのイメージを作成する
123$ mkdir -p ~/opt/dockerfile/php/ && cd ~/opt/dockerfile/php/$ git clone https://github.com/reflet/docker-debian-php.git .$ docker build -t reflet/debian8-php . - コンテナの起動し、接続する (自動削除)
1$ docker run --rm -u "www-data" -it reflet/debian8-php bash - Dockerfile調整
※ Dockerfileを修正し、2と3を繰り返し、完成後、 githubへpush。 - tagを発行し、Docker-hubへイメージをpushする
12$ docker tag reflet/debian8-php reflet/debian8-php:{タグ}$ docker push reflet/debian8-php:{タグ}
以上
サーバを構築する
上記で作成したApacheとPHPのコンテナを使ってサーバを構成する。
サーバの構成はコマンド1つで自動で行えるようにdocker-composeを利用します。
[ファイル構成]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/home/vagrant/opt/ └ server ├ docker │ ├ virtualhost │ │ └ www.example.com.conf ※ www.example.comのvirtualhost設定 │ └ docker-compose.yml ※ docker-composeの設定 │ ├ logs ※ 各種ログ保管フォルダ │ ├ www │ ├ html ※ 公開フォルダ(デフォルト) │ └ www.example.com │ └ public ※ www.ecample.comの公開フォルダ │ └ README.md ※ このリポジトリの説明と操作手順 |
サーバ構築に使うファイルについては、下記のGitHubにまとめました(細かい話は省略)。
※ GitHub: reflet/server-debian-httpd-php7
https://github.com/reflet/server-debian-httpd-php7
- ファイルを配置する
githubから必要なファイルとフォルダを取得します
12$ mkdir -p ~/opt/server/ && cd ~/opt/server/$ git clone https://github.com/reflet/server-debian-httpd-php7.git . - 起動方法について( RUN )
下記のコマンドにてコンテナを起動します (port 80 is available)
12$ cd ~/opt/server/docker/$ docker-compose up -d - テストについて( TEST )
下記コマンドにて、結果が返ってきたら問題ありません。
1$ curl http://localhost/ - 各コンテナへ接続( EXEC )
コンテナ内に入って操作したい場合は、下記コマンドにて接続ください。
※ 操作を終了する場合は、「exit」でコンソールを抜けられます。
12$ docker exec -u "www-data" -it httpd bash$ docker exec -u "www-data" -it php bash
以上
アプリケーションを配置してみる
PHPのフレームワーク(lumen)を設置してみます。
[ファイル構成]
1 2 3 4 5 6 7 8 9 10 11 12 |
/home/vagrant/opt/ └ server ├ docker │ └ virtualhost │ └ www.example.com.conf ※ www.example.comのvirtualhost設定 └ www └ www.example.com ├ public ※ www.example.comの公開フォルダ ・ ・ ・ └ README.md |
Lumenのコードについては、下記のGitHubにまとめました(細かい話は省略)。
※ GitHub: reflet/app-lumen
https://github.com/reflet/app-lumen
- コードを配置する
GitHubからコードをクローンすることで配置します。
12$ cd ~/opt/server/www/www.example.com/ && rm -rf public$ git clone git@bitbucket.org:reflet/php-lumen.git . - Lumen(本体)をインストールする
composerを使ってLumen本体と各種ライブラリを配置します。
1$ composer create-project
以上
まとめ
長々と作成手順まで書いてしまいましたが、
実際サーバを構築するする作業としては、下記の作業を1回行うだけとなります。
- Dockerが使える環境を用意する
- サーバを構築する
あとは、出来上がったサーバ内にどのようなアプリを配置するかということだけです。
今後は、ApacheとPHP7だけでなく、nginx, mysql, php5.6, redis, td-agent, glusterfsなども
作っていきたいと思います。