DockerでPostgreSQLを試してみる
DockerでPostgreSQLを試してみる
Vagrantfile
Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.network "private_network", ip: "192.168.33.10" config.vm.provision :docker end
VagrantでCentOS7を起動して接続。
> vagrant up > vagrant ssh
PostgreSQLのコンテナを起動。
$ docker run -d --name my-db -p 5432:5432 postgres
しかし、起動しない。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 424dcd28dc6e postgres "docker-entrypoint.s…" 17 seconds ago Exited (1) 16 seconds ago my-db
ログを見ると、POSTGRES_PASSWORDを指定しろと書いてある。
$ docker logs my-db Error: Database is uninitialized and superuser password is not specified. You must specify POSTGRES_PASSWORD to a non-empty value for the superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run". ・・・
改めて、POSTGRES_PASSWORDを指定して起動
$ docker rm my-db $ docker run -d -e POSTGRES_PASSWORD=hogehoge --name my-db -p 5432:5432 postgres
起動できた。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9789ba348819 postgres "docker-entrypoint.s…" 11 seconds ago Up 11 seconds 0.0.0.0:5432->5432/tcp my-db
bashを起動して、
$ docker exec -it my-db /bin/bash
データベースを作ってみる。
# psql -U postgres postgres# CREATE DATABASE hoge;
できた。
postgres# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- hoge | postgres | UTF8 | en_US.utf8 | en_US.utf8 | postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres postgres# \q # exit
A5:SQLで接続してみる。
接続できた。
一応、自動で起動するようにしておく。
$ docker update --restart=always my-db
再起動しても、
$ exit > vagrant reload > vagrant ssh
起動している。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9789ba348819 postgres "docker-entrypoint.s…" About an hour ago Up 22 seconds 0.0.0.0:5432->5432/tcp my-db
docker-composeの場合
下記のようなVagrantfileとdocker-compose.ymlを用意。
Vagrantfile
Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.network "private_network", ip: "192.168.33.10" config.vm.synced_folder ".", "/vagrant", type:"virtualbox" config.vm.provision :docker config.vm.provision :docker_compose, yml: "/vagrant/docker-compose.yml" end
docker-compose.yml
version: '3' services: postgres: image: postgres container_name: my-db ports: - 5432:5432 environment: POSTGRES_PASSWORD: hogehoge restart: always
※「vagrant plugin install vagrant-docker-compose」でvagrant-docker-composeをインストールしておく必要あり。
※docker-compose.ymlに「restart: always」を指定するのではなく、Vagrantfileに「run: "always"」と指定するのもいいかも。
・・・ config.vm.provision :docker_compose, yml: "/vagrant/docker-compose.yml", run: "always" ・・・