Dockerのお勉強をかねて、PostgreSQLをコンテナで動かせるようにする。
環境
Windows 10でDocker Desktop (WSL 2バックエンド) がインストール済み。
- Windows 10 Home: 20H2
- Docker Desktop: 3.5.1
- Docker Engine: 20.10.7
PostgreSQLイメージの取得
PostgreSQLのイメージは、Docker Hubに上がっている公式イメージを利用する。
Docker Hubからローカルに最新(latest)イメージを取得する。
> docker pull postgres
PostgreSQLコンテナの実行
公式イメージのページに記載されているコマンドのとおり、コンテナを作成してpostgresインスタンスを起動してみる。
> docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
以下はdocker run
コマンドのオプションの説明。
--name
はコンテナに任意の名前をつけたいときに指定する。-e
は環境変数を指定する。PostgreSQLのイメージの実行に必須となる、POSTGRES_PASSWORD
にパスワードを設定する。-d
はコンテナをバックグラウンドのdetachedモードで実行する。デフォルトはフォアグラウンドのforegroundモード実行。- さいごの
postgres
は実行対象のコンテナイメージの名前。
コンテナが動いているか確認する。
> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4656c729e721 postgres "docker-entrypoint.s…" 1 second ago Up 2 seconds 5432/tcp some-postgres
コンテナを停止させるときはdocker stop
コマンドを使う。
> docker stop <コンテナの名前>
dockerコマンドの補足
docker run
はコンテナを作成して実行するコマンドで、作成するコンテナの名前はユニークである必要がある。あるコンテナが停止中であっても、別のコンテナを同じ名前でdocker run
すると、以下のようにコンテナ名が既に使われているとエラーメッセージが出る。
> docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres docker: Error response from daemon: Conflict. The container name "/some-postgres" is already in use by container "4656c729e7214c53f21e6e7952423106b9a6be3b930a63d3ea50c3588f478eba". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'.
停止中の作成済みコンテナを起動するときは、docker start
コマンドを使う。
> docker start <コンテナの名前>
docker rm
コマンドでコンテナを削除すれば、再び同じ名前でコンテナを作成できるようになる。
> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4656c729e721 postgres "docker-entrypoint.s…" 17 minutes ago Exited (0) 13 minutes ago some-postgres > docker rm some-postgres > docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES > docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
あるいは--name
でコンテナ名を指定しなければ、Dockerが重複しない名前を勝手につけてくれる。
> docker run -e POSTGRES_PASSWORD=mysecretpassword -d postgres > docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fdd01f765286 postgres "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 5432/tcp xenodochial_wilbur