「DockerでPHP7.0×Apacheの環境を構築する@kurkuru」IT業界新人利用時の１6の壁(mac mini編）docker(80)

DockerでPHP7.0×Apacheの環境を構築する@kurkuru
https://qiita.com/kurkuru/items/fa7401a01c4d5dd98e4a

 <この項は書きかけです。順次追記します。>
# はじめに
IT業界の新人の人が、PHPを利用する作業があったため、追試を兼ねて実行してもらった。自分ではApacheの構築は10回くらい、PHPは１回くらいと何も教えることがない。

こちらが計画した手順とは異なる手順で実行してもらえた。
一歩一歩、追加するような方法を考えていた。
理解できるところは飛ばして、無駄な作業をしなかった。

手順通りにやれという指導がいかに無駄かが分かった。
うまくいかないことがあってから、それならと、一歩づつ示す手順を示せばよい。

指導する側が、実は指導されなければならないことを実感した。
https://qiita.com/kaizen_nagoya/items/db993b1536055029f7c8

# 主要事項
### 1 Apache 利用
 ### Webサーバで利用が多い。

### 2 docker 利用
　Windows, Macintosh, Linuxのどこからでも、いつでも、様々な環境をたくさん立ち上げて試験がしやすい。

### 3 PHP利用
　何やら使うらしい。

PHP初めて利用の新人が遭遇した壁、壁、壁。
でもdocker使わずにぶつかって乗り越えた壁よりも、再現性がしやすく、構築の手間、保守の手間、試験の手間を考えると、圧倒的に便利。

現地、現物によっては違う壁がいっぱいあるかもしれない。
そこここの壁を乗り越えてPHPにたどり着こう。

また、同じ環境をRaspberry PIでも構築し、dockerの動作とRaspberry PIの動作を確かめ、どういう試験はdockerでやるとよく、どういう試験はRaspberry PIで試せるかを確認しておきたい。

p.s.
上記サイトでのdocker利用はDebian9.4になっていた（実行時点で違うかも）。

# 確認

```
# cat /etc/debian_version
9.4
```
ubuntu, RaspbianもDebian系のapt-getが利用できる。
#IT業界の新人が利用する時の１６の壁(mac mini編）。
環境の壁、組織の決定事項の壁、画面の類似性による混同の壁など様々。

## 1電源が入らない
mac miniの電源は、後ろ右のボタンです。

### Qiita内関連資料
Mac mini 21台常備試験・研修室
https://qiita.com/kaizen_nagoya/items/3fc572d06eafe15a4c35

## 2マウスが動かない
電池式無線マウスです。電池が切れたかもしれません。
電池入れ替えます。

## 3　網(network)が繋がらない。
ごめんなさい。ここ、Macアドレス認証してます。
線を繋いだだけでは繋がらないんです。

ここから先はチチンプイプイ。ここでMacアドレス認証を登録していただくか、Mac アドレス認証を得た機器で繋いでいただくかのどちらか。

### 3.1 確認方法
3.1.1 ifconfig
網(network)の設定状況がわかります。どの界面(interface)にどの番地(address)が設定できているかがわかります。
lo0がloopbackで、文字ではlocalhost、番地では127.0.0.1です。自分自身を網の先の機器として処理できます。後ほど、ブラウザのURLにlocalhostを書きます。自分のloopbackインタフェースを通じて機能します。

```
i$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en0: 
　　　　（略）
	status: inactive
awdl0: 
　　　　（略）
	status: active
en1: 
　　　（略）
	status: inactive
en2: 
	(略)
	status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
	inet6 fe80::d88d:6924:b76f:9e22%utun0 prefixlen 64 scopeid 0xb 
	nd6 options=201<PERFORMNUD,DAD>
```

3.1.2 ping
導通確認・遅延測定命令。Windowsでは４回だけですが、Linux, Macではずっと表示し続けます。「CTRL」キーを押しながら「C」を押してください。localhostにpingすれば、網の遅延ではなく、ping処理の界面(interface)までの遅延が測定できます。（遅延測定が専門。強調しておきたい）

```
$ ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.044 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.197 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.207 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.168 ms
^C
```

3.1.3 Wireshark
MacintoshにWiresharkを導入する6つの壁
https://qiita.com/kaizen_nagoya/items/69eb2d357a125f5368e1

## 4　dockerに接続できない
某所で、docker利用を禁止しています。
dockerの接続は門(gateway)で閉じてます。

試験用、教育用のネットワークでは、かなりの範囲が使えます。
繋がる網から利用しましょう。

### 4.1確認方法
wiresharkでdockerに接続する際の、門での応答などを収集してみてください。

## 5　dockerが導入できない
ごめんなさい。dockerの導入の手引きが不十分でした。
docker for macの入れ方は、例えばこちら。

```
$ brew cask install docker
```
### 5.1 確認方法
brew cask install dockerをもう一度入れる

```
$ brew cask install docker
Error: It seems there is already an App at '/Applications/Docker.app'.
```

## 6 brewが入っていない。 
brew自体が入っていなければ
MacにHomebrewを導入する方法
https://qiita.com/balius_1064/items/ac7dff5ef10eaf69996f

### 6.1 確認方法

```
$ brew update
```

## 7 command line toolが入っていない。
Xcodeが入っていてもcommand line toolは自動的にははいりません。昔はウェブで探すのが面倒だった。今は、次のコマンド一発。

```
xcode-select --install
```
### 7.1 確認方法

```
$ brew --config
HOMEBREW_VERSION: 1.6.6
ORIGIN: https://github.com/Homebrew/brew
HEAD: e4c02fafdaef5676cf40dd6d16e74976cf54b265
Last commit: 6 days ago
（略）
Clang: 9.1 build 902
macOS: 10.13.4-x86_64
CLT: 9.3.0.0.1.1521514116
```

または

```
$  pkgutil --pkg-info=com.apple.pkg.CLTools_Executables
package-id: com.apple.pkg.CLTools_Executables
version: 9.3.0.0.1.1521514116
```


## 8 Xcodeが入っていない。
APP storeアプリでXcodeで検索、導入。

### 8.1 確認方法

```
$ $ cc b.c
clang: error: no such file or directory: 'b.c'
clang: error: no input files
```

## 9　dockerが動かない
ごめんなさい。dockerの起動の手引きが不十分でした。
dockerのmacでの起動は、dockerアプリを起動してから
「ターミナル」を立ち上げてdockerコマンドを入力します。
dockerアプリを起動していないと、「ターミナル」でdockerと入力しても、そんなコマンド知らないと言われます。

```
$ docker pull php
Using default tag: latest
Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?). Using system default: https://index.docker.io/v1/
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
```
### 9.1 確認方法
「ターミナル」でdocker imagesと入力する。

```
$ docker images
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
```

## 10　「$」文字、「#」文字を入れてエラーになった

```
$ $ docker run -d --name php70-apache php:7.0-apache
-bash: $: command not found
```
＄はmacosの入力促進記号(prompt)です。$文字を入れる必要はありません。dockerでは＃になっているかもしれません。

## 11　dockerで入力すべきものをmacで入力して動かなかった。

```
$ echo '<?php phpinfo();' > index.php
```
$で始まっているのでmacosで入れるものだと思った。

```
bash: index.php: Permission denied
```
別のエラーが出たこともある。


## 12　フォルダが作れない

```
$ docker run -d -p 80:80 -v /Users/y-tsubuku/docker/php70-apache/www:/var/www/html --name php70-apache php:7.0-apache
aff201b308023e4149c753b9f77a2eedf81ce035af584f1d152eec8783553104
docker: Error response from daemon: error while creating mount source path '/Users/y-tsubuku/docker/php70-apache/www': mkdir /Users/y-tsubuku: permission denied.
```
 そこでディレクトリを作りに行った。

```
cd /Users
mkdir y-tsubuku
mkdir: y-tsubuku: Permission denied
```

ディレクトリ作る必要はなく、自分のディレクトリを指定すればよかった。

それならコマンドで以下のように記載されていればよかったかも。

```shell-session
$ docker run -d -p 80:80 -v ~/docker/php70-apache/www:/var/www/html --name php70-apache php:7.0-apache
```

## 13　php70-apacheフォルダが分からない。
dockerでPHPがエラーで動いていていない。動かす前だったのでフォルダがない。

### 13.1 確認方法
```
cd ~/docker
ls
```

## 14　dockerでPHPが動いた状態だったのでエラーになった。
dockerのPHPを止めずに、次のdockerでPHPを動かそうとしたらエラーになった

```
You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
```

## 15 macで入力すべきコマンドをdockerで打ってしまった。

入力促進記号(prompt)の形の違いを意識していないと、
自分が今、macのコマンドを打っているのか、
dockerの中のlinuxのbashコマンドを打っているのか
分からなくなる。

```
# vi
bash: vi: command not found
```

## 16 そうだ、素のdockerにはvi入っていなかった。

```
# apt update
# apt install -y sudo  vim
```
apt-getはaptで動くようになった。

dockerの素のubuntuにはsudoも入っていない、、、。

# 参考文献(reference)
docker入門予定
https://qiita.com/kaizen_nagoya/items/88beed331a1ba814a500

生産縮小、規模縮小、人員縮小時には自動化道具を増強
https://qiita.com/kaizen_nagoya/items/8df1dc7d3a5c7869d3c2

docker利用を勧める256の理由（現在12）
https://qiita.com/kaizen_nagoya/items/c4e5075142bf5e11ddbe

今日のdocker error
https://qiita.com/kaizen_nagoya/items/940189904f57e1d0b249

dockerで画面表示
https://qiita.com/kaizen_nagoya/items/a353862ec69fccce8bc2

dockerfile
https://qiita.com/kaizen_nagoya/items/cbb6c2c8da78bcbffb08

10歳児がサイバセキュリティの専門家になるには
https://qiita.com/kaizen_nagoya/items/0aa201b09187bbe39ff3

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
# 文書履歴(document history) 
ver. 0.10 初稿20180529
ver. 0.11 １０項目から１６項目に追加。mac編を明記。 20180530
ver. 0.21 表現補足追記 20180531
ver. 0.22 詳細追記 20180601
ver. 0.23 参考資料追記 20190222
ver. 0.24 追記 20190813
ver. 0.25 10歳児がサイバセキュリティの専門家になるにはで参照 20220303
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.