Docker & GitHub ハンズオンに参加してきた。

6/3(日)Docker & GitHub ハンズオンに参加してきたので、整理のため作成。
https://tec.connpass.com/event/88851/

#1.今日やったこと　＆ 学んだこと
①Dockerの概要　（＆　インストール
②Dockerコマンド実践
③その他、質疑応答

##①Dockerの概要　（＆インストール）
Dockerについての概要の説明
マンガでわかるdocker　（@webdesignManga）　をやってたのでなんとなくわかっていることも多かったものの、もうちょっと細かい図での説明。VMとの違いを交え、メリットなどわかりやすかったです。

よくわかってなかったけど、改めて理解したのは以下、覚えておこう。
・Dockerイメージ・・・Dockerのテンプレート
・Dockerコンテナ・・・Dockerイメージから生成された仮想サーバ

案内にDockerインストールしてきてね！とあったけどしてこなかった人が多かったらしく、途中してない人はインストールも。
MacだとDocker for Macをインストールすれば良いだけだけど、Windowsの場合、
Windows Docker Toolbox on Windowsを利用し、結局VM利用する必要あるとか。
（もしくは仮想でLinuxを入れてしまう）

##②Dockerコマンド実践
実際にDockerコマンドを打って見る。

### 1.DockerHubを利用したコンテナの起動停止
　　−　docker　pull　→ run　→ stop
　　　　　　→ ここまではやったことあった。

###2.Gitを利用してDockerイメージを取得
　　– git clone で講師の方作成のサンプル取得　→ docker build → run
　　　→ テーマの半分にある「git」を利用するのはcloneでURL指定してイメージ取得する、ぐらいだったけど、使ったことない身としては「へぇーこう使うんだ」、といった感じ。
　　　とりあえずいろんな人が公開しているのをDLして試したりするのもいいかと思った。

###3.ymlを利用したイメージを組み合わせての利用。
　　– git clone で講師の方作成のサンプル（yml）取得　→ docker-compose up –d

これまでymlという言葉を聞いても意味がよく分からなかったのだけど、dockerだと、
・yml・・・コンテナのビルドから連携までをファイルベースで記載したもの
といった理解。

ymlファイルの記載していることについて説明いただくが、特に頭に入れようとせず、そなんだぐらいで流して聞いてた。

実際に

が、以下エラーで上手くいかず。。

```
MacBook-Pro:nginx-http-php-mysql $ docker-compose up -d
Recreating nginx-http-php-mysql_mysql_1 ... error

ERROR: for nginx-http-php-mysql_mysql_1 Cannot start service mysql: b'Mounts denied: \r\nThe path /usr/local/etc/nginx-http-php-mysql/mysql/initial.sql\r\nis not shared from OS X and is not known to Docker.\r\nYou can configure shared paths from Docker -> Preferences... -> File Sharing.\r\nSee https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.\r\n.'

ERROR: for mysql Cannot start service mysql: b'Mounts denied: \r\nThe path /usr/local/etc/nginx-http-php-mysql/mysql/initial.sql\r\nis not shared from OS X and is not known to Docker.\r\nYou can configure shared paths from Docker -> Preferences... -> File Sharing.\r\nSee https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.\r\n.'
ERROR: Encountered errors while bringing up the project.
MacBook-Pro:nginx-http-php-mysql $
```

パスが競合しているのか、色々上がっていたので、綺麗にしてやり直そう。
エラーも追ったほうが良いけど、スクラップ＆ビルドができるのもDockerの利点だろうとのことで後ほど綺麗にしよう。

```
MacBook-Pro:nginx-http-php-mysql $ docker images
REPOSITORY                 TAG                   IMAGE ID            CREATED             SIZE
nginx-http-php-mysql_php   latest                33cd20d906bc        2 hours ago         79.5MB
php                        latest                2cbb21fd7cee        2 hours ago         378MB
php                        7-apache              1300feae9602        8 days ago          378MB
mysql                      5.6                   5f5ccdc8aedc        4 weeks ago         256MB
mysql                      5.7                   0d16d0a97dd1        4 weeks ago         372MB
<none>                     <none>                7adebb78eec3        4 weeks ago         4.15MB
hello-world                latest                e38bc07ac18e        7 weeks ago         1.85kB
mysql                      5.7.21                5195076672a7        2 months ago        371MB
nginx                      1.13.9-alpine         537527661905        3 months ago        17.9MB
php                        7.2.2-fpm-alpine3.6   59d3e94a05b7        3 months ago        77.2MB
alpine                     latest                3fd9065eaf02        4 months ago        4.15MB
```

Preferences → Reset でも上手く消えなかったので、Remove all 　Dataで消す。

<img width="596" alt="スクリーンショット 2018-06-03 15.12.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/261321/23513624-b095-dce4-27cd-0c85d0b0f76d.png">

すると消えました。

```
MacBook-Pro:nginx-http-php-mysql $ docker images
Error response from daemon: Bad response from Docker engine
```
が、まだ残っている模様。。

```
MacBook-Pro:nginx-http-php-mysql $ docker-compose up -d
Creating network "nginx-http-php-mysql_default" with the default driver
Creating volume "nginx-http-php-mysql_est-data" with default driver
Pulling mysql (mysql:5.7.21)...
ERROR: Get https://registry-1.docker.io/v2/: x509: certificate is valid for 10.0.0.1, not registry-1.docker.io
```

<img width="592" alt="スクリーンショット 2018-06-03 15.22.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/261321/e951b5eb-7fa5-663d-c716-c7c2b60fbb85.png">

↑のfactory defaultでも消えなかったので、rmコマンドで削除

→消しても同じエラーが出る、今日は時間切れなのでどっかで仕切り直そう。

<b><解決></b>
 [こちら](https://qiita.com/tbuchi888/items/275bb2ed341c2936c9c3)を参考にFile sharing の設定

/usr/local/etc を追加し、Dockerをrestａrt

<img width="495" alt="スクリーンショット 2018-06-03 16.05.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/261321/29d3d302-8f8e-650f-579b-c8ec2dc87b04.png">

```
MacBook-Pro:nginx-http-php-mysql $ docker-compose up -d
Starting nginx-http-php-mysql_mysql_1 ... done
Creating nginx-http-php-mysql_php_1   ... done
Creating nginx-http-php-mysql_nginx_1 ... done
```

<b>*できました！！*</b>

<img width="731" alt="スクリーンショット 2018-06-03 16.08.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/261321/122add3f-5cd2-8f2e-1a60-64cdaafab348.png">

##③その他、質疑応答
>Q.Dockerってスクラップ＆ビルドで利用するものだと思うけど、DBとかのデータとかどうするのか？
A.別のDBfileを利用。dumpとして置いて、yml内でそれを利用するように指定したりとか。

>Q.docker-compose up と start　って使い分ける？
A.特に使い分けたことはない

#2.感想
・マンガでわかるdockerで知っていたことも多かったため、特についていけない点もなく、十分理解できた。
・ymlやdocker-composeについて知れたのは収穫　→ が、エラーのままなのでまたやり直す。 → エラーちゃんと読んだらできました。（6/3 16:09）
・頂いた資料におまけ（今日使ってないコマンドとか）あったので改めて読み返したい。