WSL2+docker+PHPのWindows開発環境構築(2) docker編


本ページに直接来た方はWSL2+docker+PHPのWindows開発環境構築(1) WSL2編から読んでね。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪


------------------- ↓ 余談はここから ↓-------------------

関連記事:

Laradockいいなぁ ('ω')
今後はガンガン使っていこう。

docker自体は深堀しない方針なので、
さくっと環境作れる方法を探してた。
公式を使えばへーきやろってことで公式のイメージを使おうとしたけど、

|ω・) .。oO ワカリニクイ

pullしてbuildすりゃえーんちゃうの?
dockerfileってなに?
docker-compose.ymlってどっからでてきたん。

という感じで止まっていたが、
それらを解決するフレームワークがあった。
それが Laradock

使いたいソリューションの実行環境をまとめて作れるみたい。
一応以下の環境を想定。

  • nginx
  • php-fpm
  • mysql
  • redis

この手の記事でインストールしてHello Worldでハイ終わりってのが多いけど、
dockerのhello worldってほとんど無意味なので、
ちゃんと実行環境作るよ。


------------------- ↓ 本題はここから ↓-------------------

WSLの調整

OSによりけりだけど、
少なくともUbuntuはwslの設定ファイルがなく、
以降の動作に不具合が出る。
(dockerをインストールすると/mnt/cが見えなくなるなど)
そこで、先に設定ファイルを作っておく。
(wsl.confがある場合は飛ばしていいよ。crossDistro設定があるかは見ておいてほしい。)

C:\> wsl -d Ubuntu
$ sudo touch /etc/wsl.conf
$ sudo nano /etc/wsl.conf  # viとかでも可

中身はこんな感じ

[automount]
enabled = true
options = "metadata"
crossDistro = true

dockerをインストール

そもそもWSL2を使う目的はdockerの運用だと思うので、
dockerのインストールやってみよう。
WSL側にインストールは必要ないみたい。
(一応できるけどそれは後述へ)

Docker Desktop Edgeをインストール

以下よりDocker Desktop Edgeをインストール
https://docs.docker.com/docker-for-windows/wsl-tech-preview/

再起動後、タスクバーのdockerアイコンから「setting」を選択

「Enable the experimental WSL2 based engine」にチェックを入れ「Appli&Restart」を押下

暫く経って再起動が終わるとnotificationが入る

「Enable WSL Integration」を押下。

「Ubuntu」を選択して「Appli&Restart」を押下
特殊なディストリビューション(docker-desktop〜〜)が追加されるのが確認できる。

動作確認
C:\Users\magic>wsl -d ubuntu
$ docker -v
Docker version 19.03.5, build 633a0ea838

コマンドどっから来たのかと思ったら、
/mnt経由でマウントされていた。
なかなかダイナミックである。

とりあえずHello Worldしてみよう。

$ docker run hello-world
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Hello from Docker!

PHPの実行

dockerが起動したので、
PHPイメージを使ってみよう。
正直dockerイメージがどういう構成になっているかとか興味がないので、
さくっと使えるlaradockを使う。
詳しくはLaradockのページを読んでほしい。
http://laradock.io

$ cd
$ git clone https://github.com/Laradock/laradock.git
$ cd laradock
$ cp env-example .env
$ docker-compose up -d nginx mysql redis workspace

起動確認

curl叩いてWebが起動してるか確認。

$ curl localhost
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

コマンドラインも行けるか確認。

$ docker-compose exec workspace php -v
PHP 7.3.15-3+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Feb 23 2020 07:23:10) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.15, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.15-3+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

あれ?また長くなった。
IDEとつなげるのは次回。
WSL2+docker+PHPのWindows開発環境構築(3) PHPStorm編


------------------- ↓ 後書はここから ↓-------------------

WSL側にdockerをインストール

特に必要ないが一応記載。
インストールは公式の通り行う
https://docs.docker.com/install/linux/docker-ce/ubuntu/

hello-world失敗しても気にせず進める。

その他、aptやyum、homebrewを使ってもいい。

nodeのエラー?

なんだかよくわからないnodeエラーが出る。

Now using node v13.9.0 (npm v6.13.7)
node -> stable (-> v13.9.0) (default)
npm ERR! code SELF_SIGNED_CERT_IN_CHAIN
npm ERR! errno SELF_SIGNED_CERT_IN_CHAIN
npm ERR! request to https://registry.npmjs.org/gulp failed, reason: self signed certificate in certificate chain       
npm ERR! A complete log of this run can be found in:
npm ERR!     /home/laradock/.npm/_logs/2020-03-03T12_59_27_644Z-debug.log
ERROR: Service 'workspace' failed to build: The command '/bin/sh -c if [ ${INSTALL_NODE} = true ]; then     mkdir -p $NVM_DIR &&     curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash         && . $NVM_DIR/nvm.sh         && nvm install ${NODE_VERSION}         && nvm use ${NODE_VERSION}         && nvm alias ${NODE_VERSION}         && if [ ${NPM_REGISTRY} ]; then         npm config set registry ${NPM_REGISTRY}         ;fi         && if [ ${INSTALL_NPM_GULP} = true ]; then         npm install -g gulp         ;fi         && if [ ${INSTALL_NPM_BOWER} = true ]; then         npm install -g bower         ;fi         && if [ ${INSTALL_NPM_VUE_CLI} = true ]; then         npm install -g @vue/cli         ;fi         && if [ ${INSTALL_NPM_ANGULAR_CLI} = true ]; then         npm install -g @angular/cli         ;fi         && ln -s `npm bin --global` /home/laradock/.node-bin ;fi' returned a non-zero code: 1

この場合はdockerが問題なのではなく、
ローカルPCのウィルス対策ソフトがなんかやってる。

  • URLの除外設定をする
  • ネットワーク監視機能をOFFにする
  • ウィルス対策ソフトをOFFにする

(^。^)y-.。o○ 好きなの選べ