MySQL, PostgreSQL ちょっとお試し用 Docker コンテナの起動と廃棄

ちょっと試したいクエリがある時に、サーバをちょっと起動してすぐ消せる。なんて便利。

MySQL

公式イメージを使うのが容易(docker-library/mysql)。

Docker 公式ドキュメントは「docker-library/docs」にあり、MySQL は右記。 ∥ docs/mysql at master · docker-library/docs

現状でバージョンは 5.5, 5.6, 5.7 とある。

$ docker run --name mysql0 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
$ mysql --host=$(docker inspect --format "{{ .NetworkSettings.IPAddress }}" mysql0) -u root -p
mysql
mysql> CREATE DATABASE foo;
mysql> USE foo;
mysql> CREATE TABLE bar (k integer, v text);
mysql> INSERT INTO bar VALUES(10, 'Ten');
mysql> INSERT INTO bar VALUES(20, 'Twenty');
mysql> SELECT count(*) FROM bar;
mysql> EXIT;
$ docker rm -f mysql0

Docker 1.3 以上であれば exec サブコマンドが使えるので、コンテナが持っているクライアントを用いることも可能(ローカルに MySQL クライアントが入っていなくても OK)。対話をするので、オプションで「--interactive」と「--tty」を指定のこと。

$ docker exec -it mysql0 mysql -u root -p

同様に、PostgreSQL

公式のレポジトリは右記。 ∥ docker-library/postgres

追記(Jan 13 2015): 先ほど postgres/9.4 at master · docker-library/postgres を見ると、$POSTGRES_PASSWORD が設定できるようになっているようですね。

リファレンスは右記。 ∥ docs/postgres at master · docker-library/docs

現状でのバージョンは、8.4, 9.0, 9.1, 9.2, 9.3 と、ベータの 9.4 がある。

$ docker run --name postgres0 -d postgres:9.3 
$ psql -h $(docker inspect --format "{{ .NetworkSettings.IPAddress }}" postgres0) -U postgres
postgres=# SELECT current_database(), current_schema();
 current_database | current_schema
------------------+----------------
 postgres         | public
(1 row)
postgres=# \q
$ docker rm -f postgres0

同様に、Docker 1.3 以上であれば、下記でも可。

$ docker exec -it postgres0 psql -U postgres

$PGDATA は /var/lib/postgresql/data/ で、VOLUME 指定されています。

あれ、パスワードを聞いてきませんね。おっと、pg_hba.conf は見ての通りスッカスカなので、このまま実運用はしてはいけません。Dockerfile を書きましょう。

...
host all all 0.0.0.0/0 trust
...