Dockerを試してみた

はじめまして。GMOインサイトのS.Oです。
昨年の10月ぐらいから土日の休み中に、Dockerを使ってみました。


目的

【個人的な場合】

  • パソコンとインターネットがあればどこでも開発環境を構築できるようにしたい。
    ※ パソコンに依存しない開発環境を整えたい
  • 稼働中のアプリを別環境下でも正常に稼働するかどうかのテストを容易したい
    例) PHP5.6のアプリをPHP7でテストしたいなど…
  • いろいろなミドルウェアを気軽に触ってみたい

【会社で使う場合】

  • 関係するメンバーに、同じ開発環境を提供できるようにしたい。

構成イメージ

完成図

パソコン内部は、以下のような構成になります。

PC構成


 環境条件


仮想マシンの選択

いろいろなやり方があると思いますが、簡単な方法として以下の2通りから選択しました。

  1. Virtualbox + Vagrant
  2. Docker Toolbox

私の環境(Mac Book Air)では、Virtualboxが既に稼働していたので①の方法で進めます
( 仮想環境に慣れていない方は、②の方法を選択した方がいいかも… )


環境構築 – 仮想マシンを準備する

仮想化ソフトとコードを扱うためGitをインストールする

サーバ構築は、Vagrant Cloudからイメージをダウンロードして使う。
※ すでにDockerとdocker-composeはインストール済み

[構成イメージ ]
vagrant

[ファイル構成(ホストOS)]

下記のGitHubに必要なファイルや手順をまとめました。
※ GitHub: reflet/vagrant-centos-7.2
     https://github.com/reflet/vagrant-centos-7.2

  1. Vagrantを起動して、SSH接続する

コンテナ作成 – Apache

Dockerfileにてコンテナを作成します
( サーバの作成方法です。 サーバ環境を構築する場合は、この作業は必要なし 

[構成イメージ ]
docker
[ファイル構成(仮想マシン)]

作成したDockerfileや使い方の手順については、下記のGitHubにまとめました(細かい話は省略)。
※ GitHub: reflet/docker-debian-httpd
    https://github.com/reflet/docker-debian-httpd

  1. コンテナのイメージを作成する
  2. コンテナを起動し、接続する
  3. Dockerfile調整
    ※ Dockerfileを修正し、2と3を繰り返し、完成後、 githubへpush。
  4. tagを発行し、Docker-hubへイメージをpushする

以上


コンテナ作成 – PHP7

Dockerfileにてコンテナを作成します
( サーバの作成方法です。 サーバ環境を構築する場合は、この作業は必要なし )

[構成イメージ ]
docker

[ファイル構成(仮想マシン)]

作成したDockerfileや使い方の手順については、下記のGitHubにまとめました(細かい話は省略)。

※ GitHub: reflet/docker-debian-php
    https://github.com/reflet/docker-debian-php

  1. コンテナのイメージを作成する
  2. コンテナの起動し、接続する (自動削除)
  3. Dockerfile調整
    ※ Dockerfileを修正し、2と3を繰り返し、完成後、 githubへpush。
  4. tagを発行し、Docker-hubへイメージをpushする

以上


サーバを構築する

上記で作成したApacheとPHPのコンテナを使ってサーバを構成する。
サーバの構成はコマンド1つで自動で行えるようにdocker-composeを利用します。

[構成イメージ ]
docker-compose

[ファイル構成]

サーバ構築に使うファイルについては、下記のGitHubにまとめました(細かい話は省略)。
※ GitHub: reflet/server-debian-httpd-php7
    https://github.com/reflet/server-debian-httpd-php7

  1. ファイルを配置する
    githubから必要なファイルとフォルダを取得します
  2. 起動方法について( RUN )
    下記のコマンドにてコンテナを起動します (port 80 is available)
  3. テストについて( TEST )
    下記コマンドにて、結果が返ってきたら問題ありません。
  4. 各コンテナへ接続( EXEC )
    コンテナ内に入って操作したい場合は、下記コマンドにて接続ください。
    ※ 操作を終了する場合は、「exit」でコンソールを抜けられます。

以上


アプリケーションを配置してみる

PHPのフレームワーク(lumen)を設置してみます。
[ファイル構成]

Lumenのコードについては、下記のGitHubにまとめました(細かい話は省略)。
※ GitHub: reflet/app-lumen
    https://github.com/reflet/app-lumen

  1. コードを配置する
    GitHubからコードをクローンすることで配置します。
  2. Lumen(本体)をインストールする
    composerを使ってLumen本体と各種ライブラリを配置します。

以上


まとめ

長々と作成手順まで書いてしまいましたが、
実際サーバを構築するする作業としては、下記の作業を1回行うだけとなります。

  1. Dockerが使える環境を用意する
  2. サーバを構築する

あとは、出来上がったサーバ内にどのようなアプリを配置するかということだけです。

今後は、ApacheとPHP7だけでなく、nginx, mysql, php5.6, redis, td-agent, glusterfsなども
作っていきたいと思います。