ちょっと試したいクエリがある時に、サーバをちょっと起動してすぐ消せる。なんて便利。
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
...