Docker(17.12.0)で少し遊んで見る
これの続き
Wordpress なんて 11 年前の学生時代に弄ってた OSS を簡単に動かす紹介があったのでやって見た。
XXXXXXX:~ azalea$ docker run -d -e MYSQL_ROOT_PASSWORD=password --name db mysql Unable to find image 'mysql:latest' locally latest: Pulling from library/mysql f49cf87b52c1: Pull complete 78032de49d65: Pull complete 837546b20bc4: Pull complete 9b8316af6cc6: Pull complete 1056cf29b9f1: Pull complete 86f3913b029a: Pull complete f98eea8321ca: Pull complete 3a8e3ebdeaf5: Pull complete 4be06ac1c51e: Pull complete 920c7ffb7747: Pull complete Digest: sha256:7cdb08f30a54d109ddded59525937592cb6852ff635a546626a8960d9ec34c30 Status: Downloaded newer image for mysql:latest 58c04fb86b7ec40664344c91610f1caf0fa20d31238ad69248e61bee0dea4456 XXXXXXX:~ azalea$ XXXXXXX:~ azalea$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 58c04fb86b7e mysql "docker-entrypoint.s…" 16 seconds ago Up 20 seconds 3306/tcp db XXXXXXX:~ azalea$
MySQL を root パスワード password で起動。
ポート番号は MySQL デフォルトポートなんね。
続いて wordpress
XXXXXXXX:~ azalea$ docker run --link db:mysql -p 8080:80 -e WORDPRESS_DB_PASSWORD=password --name web wordpress Unable to find image 'wordpress:latest' locally latest: Pulling from library/wordpress e7bb522d92ff: Already exists 75651f247827: Pull complete dbcf8fd0150f: Pull complete de80263f26f0: Pull complete 65be8ad4c5fd: Pull complete 239d5fed0dda: Pull complete 5ab39b683a9f: Pull complete 4a3f54f2d93a: Pull complete 28c970ad99e9: Pull complete 86b02bcfc0c2: Pull complete a21cb128d1e1: Pull complete 620a1b563498: Pull complete 2b7708d1b98c: Pull complete 0086574a434b: Pull complete 9eb9edc5beda: Pull complete 660c359d962d: Pull complete 7668cac2f2dd: Pull complete 57950765f0c3: Pull complete 25f60226e8a5: Pull complete Digest: sha256:9a6067b6f4d950e4a5fea699d4e9537bdcc2375f651e1ce5c98aa4dc2c61d1b7 Status: Downloaded newer image for wordpress:latest WordPress not found in /var/www/html - copying now... Complete! WordPress has been successfully copied to /var/www/html AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message [Fri Feb 16 13:14:08.132796 2018] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.2.2 configured -- resuming normal operations [Fri Feb 16 13:14:08.132915 2018] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
うん、起動したので http://localhost:8080 アクセス
2コマンドか…楽になったものだ。
そこでもう一声。
こっちの記述も試してみようと思う。
つまり Network
機能だ。
まずネットワークが現在どうなってるか確認する
XXXXXXX:~ azalea$ docker network ls NETWORK ID NAME DRIVER SCOPE 90f602f39b31 bridge bridge local d405e0672e62 host host local 69b041527ecb none null local
ほむほむ。
Wordpress 用のネットワーク作っちゃうぞー
XXXXXXX:~ azalea$ docker network create wordpress d632af3c1df0adaf37df9f99ac0bac2cc1e4b06dcbf3ac5a473e2655ae2f9383 XXXXXXX:~ azalea$ docker network ls NETWORK ID NAME DRIVER SCOPE 90f602f39b31 bridge bridge local d405e0672e62 host host local 69b041527ecb none null local d632af3c1df0 wordpress bridge local
ならここに所属するように指定して起動すればいいのか
XXXXXXX:~ azalea$ docker run -d -e MYSQL_ROOT_PASSWORD=password --net wordpress --name db mysql ba9ece2b29ea57013671334b5e2de19ed1046154892d0c0790c86ded093c5586 XXXXXXX:~ azalea$ docker run --link db:mysql -p 8080:80 -e WORDPRESS_DB_PASSWORD=password --net wordpress --name web wordpress WordPress not found in /var/www/html - copying now... Complete! WordPress has been successfully copied to /var/www/html AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message [Fri Feb 16 13:32:37.914171 2018] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.2.2 configured -- resuming normal operations [Fri Feb 16 13:32:37.914294 2018] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
ここまでに見たエラー
まずは、docker kill
したやつを同じコマンドで起動しようとして怒られたパターン。
kill
はプロセスを kill するだけで、コンテナに一切の手をつけないって事なのか。
docker start web
で問題なく起動した。
XXXXXXX:~ azalea$ docker run --link db:mysql -p 8080:80 -e WORDPRESS_DB_PASSWORD=password --net wordpress --name web wordpress docker: Error response from daemon: Conflict. The container name "/web" is already in use by container "07627d915bde1df0fa5bbdc11044cf576ce28ed5595ef9e6e2a92d40052ecb54". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'. XXXXXXX:~ azalea$ docker rm web web
しかし ubuntu
は毎回 run
でイケるのだが…この差はなんだ?
疑問に思って Kitematic
眺めて見たら、ubuntu
は run するたびに別コンテナが作られてたという…なるほどな(汗
試しに、docker run --name test_ubuntu -it ubuntu /bin/bash
して Ctrl + D
で終了。
そして start からのインタラクティブ指定したら…
XXXXXXX:~ azalea$ docker start test_ubuntu -i root@f42f937734aa:/#
普通にログインできた。
しかも前回起動時のファイルが残ってたよ…なるほどね。
もうひとつは Network 構築後に --link
が省略できないかなと試してみて、エラー吐かれたパターン。
XXXXXXX:~ azalea$ docker run --link mysql -p 8080:80 -e WORDPRESS_DB_PASSWORD=password --net wordpress --name web wordpress WordPress not found in /var/www/html - copying now... Complete! WordPress has been successfully copied to /var/www/html Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22 Warning: mysqli::__construct(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
ここから見るに、Network はイメージ的には同一のイントラにホスト(コンテナ)を放り込むだけなのに対して、--link
はコンテナ同士を殆どシームレスに繋いでしまう事らしい。
扱い違うのね…
やっと概要掴んで来た。
- image
コンテナ作成の為の元情報。
run 実行するとここを元にコンテナを作る。 - container
実際に動作する単位。
start, stop で起動・停止を行う。