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コマンド一覧

DockerMachineサブコマンド一覧

Docker-composeコマンド一覧

ローカル開発環境の構築

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だったので)

さらに、上記参考サイトでは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

再度確認…

反映されてます~
やっとこ完了です

自分メモ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 コマンドは既に作成済みのコンテナの再起動には便利です。しかし止まっているコンテナを起動するだけであり、新しいコンテナは作成しません。