*

役立ち 技術

Dockerのある生活

2018/11/28

お疲れさまです。

アラフィフプログラマーの杉山です。
おっさんですが今年1月入社の新人ですのでお気軽に声をかけてください。
現在は妻と娘二人で細々と暮らしています。
あとカルデアでマスターやってます。
FGO好きの方は絡んでもらえると嬉しいです。

今回はDockerという仮想コンテナのソフトについてご紹介したいと思います。

Dockerのインストール方法については以下の公式ページをご参照下さい。今回は説明を省きます。
> Docker のインストール
既にDockerがWindowsのPCにインストール済であるということを前提にして、
「Dockerがあればこんな風に便利になる。」
ということをお話したいと思います。

 

例えば、PHP7.2の環境でプログラミングしたいと思った時、
Dockerがあればコマンドプロンプトからたった1行のコマンドを実行するだけです。

docker run -it php:7.2-cli /bin/bash

 

参考までにコマンドプロンプト画面をキャプチャしてYoutubeにアップしました。

おわかりいただけただろうか…

いま何が起こったかというと、
Docker HUBと呼ばれるリポジトリからOSイメージをダウンロードし、
コンテナと呼ばれる小さなLinuxの仮想環境を作ってその中でPHPを実行したのです。

Docker HUBいろんなOSイメージが各言語のバージョン毎にそろっています。
また初回のコマンド実行時はOSイメージのダウンロードに時間がかかったのでコンテナ起動が遅く感じたのですが、2回目からPCに保存したOSイメージを使用する為、1~2秒くらいでコンテナが起動します。

 

それでは次にapache+PHP7.2環境にComposerをインストールしてLaravelプロジェクトを作成してみます。

まずはapache+PHP7.2のOSイメージを使ってComposerをインストールします。
それからComposerを使ってLaravelをインストールします。
最後はコンテナ起動時にPCとのHTTP接続用に80ポートをつなぎます。

難しそうではありますが、
あらかじめDockerfileと呼ばれるファイルを作成し、Laravelが入ったカスタムイメージを作成しておけば、docker runコマンドでコンテナ起動するだけです。
githubに一式をアップしておきましたのでクローンして以下のコマンドを実行してみて下さい。

# githubからクローン
git clone https://github.com/python18i/php7.2-laravel

cd php7.2-laravel

# カスタムイメージの作成
docker build . -t php:7.2-laravel

# コンテナ起動
dodocker run -d -p 80:80 php:7.2-laravel

 

Dockerfileには元となるOSイメージと一連のインストールコマンドを記述します。
こんな感じです。

FROM php:7.2-apache

# システムアップデート
RUN apt-get update && apt-get install -y \
    git \
    unzip

# Composerのインストール
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# apache設定ファイルのコピー
COPY ./conf/000-default.conf /etc/apache2/sites-available/

# laravelのインストール
RUN composer create-project laravel/laravel --prefer-dist .

# ドキュメントルートのパーミッションを変更
RUN chown -R www-data:www-data /var/www

 

これはただのテキストファイルなので、メモ帳で作成することができます。
Dockerfileがあれば先ほどのコマンドを実行するだけで、Dockerがインストールされているマシンであればどこにでも同じ環境を構築するができるのです。
そう。Dockerならね。

 

最後に応用編で複数のコンテナを使ってNginx + PHP7.1 + MySQL5.7でWordpressの環境を作ってみます。
Dockerでは1つのコンテナに複数のサービスを詰め込むのではなく、サービスごとにコンテナを起動するのがベストプラクティスのようです。
以下の3つのコンテナを使います。

  • nginx
  • php:7.1-fpm
  • mysql:5.7

複数のコンテナをまとめるにはdocker-composeというコマンドを使います。
何も難しいことはありません。
先ほどのDockerfileをYAML(スペースでインデントしたテキストファイル)にまとめただけにすぎません。
こちらもgithubにアップしましたので、クローンした後、docker-composeコマンドで3つのコンテナが起動します。
php7.2-wordpress\htmlにwordpress本体をコピーして下さい。このフォルダはコンテナのドキュメントルート(/var/www/html)にマウントされていますので、PC側からhtmlフォルダ内にあるソースを修正すればすぐに反映されます。
また各コンテナはdocker-composeが接続してくれます。

# gitのクローン
git clone https://github.com/python18i/php7.2-wordpress

cd php7.2-wordpress

# コンテナ起動
docker-compose up -d

 

いかがでしたでしょうか。
自分はDockerfileとdocker-composeに無限の可能性を感じました。
あとソースと一緒にDockerfileもGitにプッシュしておけるので大変便利です。
ガッツのある方はぜひDockerをインストールして上記のコマンドを試してみて欲しいと思います。

それではまたお会いしましょう。
ありがとうございました。

 

-役立ち, 技術