Docker
Windows10
ローカル開発環境
LaraDock

Webサービス開発1 ~ローカル開発環境構築編~


はじめに


今回の目的


  • Webサービスを制作するにあたり、開発環境を構築したい。

  • 下記前提を使用したうえで開発する事。

  • 得た知識・情報等を(すぐ忘れるので)活用できるよう、Qiitaにもれなく投稿する事。


前提

勉強の為、下記を使用します。

なおサービスを公開するかは未定ですが、一応そこを念頭に置いて本番環境と差分が少ないDockerで構築する事に決めました。


ホストOS


  • Windows10 home


実行環境


  • LAMP(PHP 7.0.14-2/MySQL 5.7.25)


仮想マシン


  • Docker version 18.03.0-ce

  • Docker-machine version 0.14.0

  • Docker-compose version 1.20.1


フレームワーク


  • Laravel Framework 5.5.45


自身の状況

これまでにPHP・MySQLでのWebサービスの開発に1年半ほど携わった経験あり。(自社サービス・受託の兼務でした。)

今回、やっと初めて個人でWebサービス開発に取り組みます。

まだまだ不慣れなQiita投稿、諸々初めて尽くしですが頑張ります。


本記事のゴール

ローカル開発環境の構築。


作業内容


ローカル開発環境の選定

まず前提である程度固まっているので、これらを使用できるローカル環境を調査。

仮想化に関しては、VirtualBox + Vagrantは構築及び使用経験があった為、未開の地であったDockerを選択。


Dockerについて参考にしたサイト


memo


  • Windows10 HomeでHyper-Vというネイテイブ仮想環境が無い為、Docker ToolboxインストーラでVirtual Box含め構築する。

  • Docker MachineはVirtual Boxを操作するツール。

  • ファイル編集に関しては共有ディレクトリにする(マウントする)事で、コンテナ側のファイルをローカル(ホスト側)のテキストエディタで編集する事が可能。共有ディレクトリの設定については、Docker環境構築工程にて。

  • Dockerに色々なイメージ(ソフトウェア)を積んだコンテナが載っている。

Docker-docs-jaより


イメージ(image) とは実行可能なパッケージであり、軽量で、単独で動作(stand-alone)します。パッケージにはコード、ランタイム、ライブラリ、環境変数、設定ファイルなど、ソフトウェアの実行に必要な部品すべてを含みます。

コンテナ(container) とはイメージのランタイム・インスタンス(runtime instance;実行状態にあるモノ)です。言い換えれば、イメージからメモリ内に展開し、実際に実行する何かです。



Dockerコマンド一覧

http://docs.docker.jp/engine/reference/commandline/


DockerMachineサブコマンド一覧

http://docs.docker.jp/machine/reference/index.html


Docker-composeコマンド一覧

http://docs.docker.jp/compose/reference/overview.html


ローカル開発環境の構築


1. Dockerインストール~Docker環境にLaraDockでapache + Laravelの表示確認まで

参考にしたサイト:https://pg-happy.jp/laradoc-windows10-home-install.html

Windows10 Homeにインストールしたかったので、上記サイトを参考にしてDockerToolBoxでインストールしました。

ターミナルはDocker Quickstart Terminalを利用しています。

Docker Quickstart Terminalを起動すると自動的にVirtualBoxのマシンが起動されるが、終了時にはDocker Quickstart Terminalを閉じただけではマシンは停止しないので、以下のコマンドでマシンを終了させる。

http://devcenter.magellanic-clouds.com/learning/docker-toolbox.html より

# マシン一覧

$ docker-machine ls

# マシンの停止
$ docker-machine stop 

また、DockerToolBoxを使用しているので、Laradockをcloneする際もLaradock-ToolBoxをブランチしました。

Laradockをcloneしコンテナ作成後、$ docker-machine ip で確認したIPアドレスにアクセス。

下記のように、apache初期画面が表示されればOK.(参考サイトだとnginxだったので)

docker_001.png

さらに、上記参考サイトではWEBサーバーとしてnginxが選択されていますが、今回apacheにしたかったのでトップページでLaravelプロジェクトのpubilc配下を表示させる設定は以下のようにしました。


dockerWorkspace\laradock\apache2\sites\default.apache.conf

-  DocumentRoot /var/www/

+ DocumentRoot /var/www/laraveltest/public

- <Directory "/var/www/">
+ <Directory "/var/www/laraveltest/public">



dockerWorkspace\laradock\apache2\Dockerfile

-  ENV WEB_DOCUMENT_ROOT=/var/www/

+ ENV WEB_DOCUMENT_ROOT=/var/www/laraveltest/public


2. MySQLの接続確認

参考にしたサイト:https://qiita.com/maejima_f/items/34cf3b8eb5ffbe256ad9

その後、文字コード確認

mysql> show variables like 'char%';

すると、見事にlatin1に。。。。なので、以下を追記。


/laradock/mysql/my.cnf

[mysql]

default-character-set=utf8

[mysqld]
character-set-server=utf8


再度確認…

docker_003.png

反映されてます~

やっとこ完了です:sweat_smile:


自分メモ2


docker-compose up ・ run ・ start の違いとは・・・?

公式に答えがありましたε-(´∀`*)ホッ


一般的には docker-compose up が使われるでしょう。 up を使うと docker-compose.yml ファイル中で定義したサービスの開始または再起動を行います。デフォルトは「アタッチド」モードであり、全てのコンテナのログが画面上に表示されます。「デタッチド」モード( -d )では、Compose はコンテナを実行すると終了しますが、コンテナは後ろで動き続けます。

docker-compose run コマンドは「ワンオフ」(one-off;1つだけ、偶発的) または「アドホック」(adhoc;臨時)なタスクの実行に使います。実行するにはサービス名の指定が必要であり、特定のサービス用のコンテナを起動し、かつ依存関係のあるコンテナも起動します。 run の利用時は、テストの実行であったり、データ・ボリューム・コンテナに対するデータの追加・削除といった管理タスクです。 run コマンドは実際には docker run -ti を処理しており、コンテナに対してインタラクティブなターミナルを開き、コンテナのプロセスが終了すると、その時点の該当する終了コードを返します。

docker-compose start コマンドは既に作成済みのコンテナの再起動には便利です。しかし止まっているコンテナを起動するだけであり、新しいコンテナは作成しません。