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で消す。
すると消えました。
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
↑のfactory defaultでも消えなかったので、rmコマンドで削除
→消しても同じエラーが出る、今日は時間切れなのでどっかで仕切り直そう。
<解決>
こちらを参考にFile sharing の設定
/usr/local/etc を追加し、Dockerをrestart
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
できました!!
③その他、質疑応答
Q.Dockerってスクラップ&ビルドで利用するものだと思うけど、DBとかのデータとかどうするのか?
A.別のDBfileを利用。dumpとして置いて、yml内でそれを利用するように指定したりとか。Q.docker-compose up と start って使い分ける?
A.特に使い分けたことはない
2.感想
・マンガでわかるdockerで知っていたことも多かったため、特についていけない点もなく、十分理解できた。
・ymlやdocker-composeについて知れたのは収穫 → が、エラーのままなのでまたやり直す。 → エラーちゃんと読んだらできました。(6/3 16:09)
・頂いた資料におまけ(今日使ってないコマンドとか)あったので改めて読み返したい。