【docker】docker-entrypoint-initdb.dとは
docker-entrypoint-initdb.dは、dockerのセットアップ時に自動でファイルを読み込んでくれるディレクトリです。
ボリュームで指定して、指定したディレクトリにsqlやshファイルを置いておくと自動で読み込んでくれます。
なので、docker起動時にsqlでテーブルを作成したいときや、シェルスクリプトを走らせたい時はここに置いておくと起動時に勝手に読み込みます。
例として、postgressのイメージを起動したら、勝手にテスト用のテーブルをsql走らせて作成してくれるサンプルを作ってみます。
●ディレクトリ構成
test
– docker-compose.yml
– /setup/testsql
docker-compose.yml
services:
db:
image: postgres
ports:
- 5432:5432
volumes:
- ./setup:/docker-entrypoint-initdb.d
environment:
- POSTGRES_DB=testdb
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
./setup/test.sql
create table test_table(
id int,
name text,
job text
) ;
insert into test_table(id,name, job)values(1,'tanaka', 'aaaa');
insert into test_table(id,name, job)values(2,'itou', 'bbbb');
insert into test_table(id,name, job)values(3,'suzuki', 'cccc');
insert into test_table(id,name, job)values(4,’takahashi’, ‘dddd’);
ファイルは↑の2枚のみ
では起動してみます。
Desktop\test> docker-compose up --build -d
[+] Running 2/2
✔️ Network test_default Created 0.0s
✔️ Container test-db-1 Started
コンテナを建てました。
中に入ってテーブルが出来ているか見てみましょう
Desktop\test> docker-compose exec -it db bash
root@aba18122b85d:/# -U user -d testdb
root@aba18122b85d:/# psql -U user -d testdb
psql (17.5 (Debian 17.5-1.pgdg120+1))
Type "help" for help.
testdb=#
testdb=# \d
List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | test_table | table | user
(1 row)
testdb=# select * from test_table;
id | name | job
----+-----------+------
1 | tanaka | aaaa
2 | itou | bbbb
3 | suzuki | cccc
4 | takahashi | dddd
(4 rows)
テーブルが自動で作成されましたね!!
他にも、shファイルを置いておけば自動で処理もやってくれます。
コンテナ起動時に色々処理させたい状況はよくあるので、ボリュームにセットアップ用ファイルを置いておくと覚えときます!!
volumes:
– ./setup:/docker-entrypoint-initdb.d
これだけ!!
-0 Comment-