15. 2. docker images, ps(イメージ、コンテナの一覧取得)
・docker images
core@ec2.private.ip.address$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx latest 914c82c5a678 29 hours ago 132.7 MB
rails 4.2.4 8f811c47f859 5 days ago 824.9 MB
…
docker pullは多少時間がかかる操作なので、今回は 3分クッキング的に
あらかじめ docker pullしておいた AMIを使っています。
すでに pull済みの Dockerイメージの一覧が表示されます。
Dockerコンテナは、このイメージをもとに起動することになります。
16. 2. docker images, ps(イメージ、コンテナの一覧取得)
・docker ps
core@ec2.private.ip.address$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
e54b78e56bf7 pottava/docker-webui:latest "/go/bin/docker-webui" 2 seconds ago
Up Less than a second 0.0.0.0:9000->9000/tcp monit
起動中の Dockerコンテナがひとつ確認できます。
実はこれ、EC2起動時の UserDataで起動しておいたものです。
ブラウザで
http://ec2.public.ip.address:9000/
を開くと、この起動しているコンテナにアクセスできます。
17. Dockerコンテナの IDと名前について
さきほどの psではこんな結果がでていました。
core@ec2.private.ip.address$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
e54b78e56bf7 pottava/docker-webui:latest "/go/bin/docker-webui" 2 seconds ago
Up Less than a second 0.0.0.0:9000->9000/tcp monit
CONTAINER ID列にあるのが ID、NAMES列にあるのが名前です。
Dockerコンテナを操作する場合、このどちらかを指定します。
・docker inspect monit
・docker rm e54
IDの長さは 64文字ですが、コンテナを特定するのに十分な長さがあれば
動作するので、上の例のように 3文字で動いたりもします。
31. 7. MySQLを複数立ち上げて繋いでみる
MySQLの 2つのバージョンを同時に立ち上げてみましょう
core@ec2.private.ip.address$ docker run -d --name mysql56 -e MYSQL_ROOT_PASSWORD=pw mysql:5.6
ae3213df03304410414bfce05c965a950a54bc338d1c5806eec759c6f249e7c5
core@ec2.private.ip.address$
core@ec2.private.ip.address$ docker run -d --name mysql57 -e MYSQL_ROOT_PASSWORD=pw mysql:5.7
74c1877942714f96727c1cbcee9eb2ff142b8fc323e2a887c46bc1645601b3d6
core@ec2.private.ip.address$ docker logs -f mysql57
Initializing database
2015-10-30T05:44:19.594993Z 0 [Warning] InnoDB: New log files created, LSN=45790
…
2015-10-30T05:44:31.922457Z 0 [Note] mysqld: ready for connections.
Version: '5.7.9' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
docker logsコマンドで、DBが起動完了するのを見守ります。
“ready for connections.” の文字が見えたら、Ctrl+Cで
ログの監視をやめます。
32. 7. MySQLを複数立ち上げて繋いでみる
MySQL 5.6に接続して、様子をみてみましょう。
core@ec2.private.ip.address$ docker run -it --rm --link mysql56:mysql mysql:5.6 sh -c 'exec
mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -
p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.6.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql>
繋がりましたね!もちろんここで、SQLも実行できます。
(Ctrl+Dで MySQLとの接続を切断できます)
mysql> show databases;
mysql> select host, user, password from mysql.user;
33. 7. MySQLを複数立ち上げて繋いでみる
MySQL 5.7に接続してみましょう。
core@ec2.private.ip.address$ docker run -it --rm --link mysql57:mysql mysql:5.7 sh -c 'exec
mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -
p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Warning: Using a password on the command line interface can be insecure.
Your MySQL connection id is 2
Server version: 5.7.9 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql>
繋がりましたね!
このコマンドにあるように、Webアプリケーションコンテナなどから
起動した MySQLに接続するには、linkオプション + 環境変数、
または pオプションを利用することになります。
36. ・「Docker Quickstart Terminalから Remote API経由で操作」した方
環境変数をもとにもどしましょう
8. 後片付け
your-host:~ $ unset DOCKER_HOST
your-host:~ $ unset DOCKER_TLS_VERIFY
your-host:~ $ unset DOCKER_CERT_PATH
your-host:~ $
your-host:~ $ env | grep DOCKER
your-host:~ $
your-host:~ $ docker info
Get http:///var/run/docker.sock/v1.20/info: dial unix /var/run/docker.sock: no such file or
directory.
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?