version: "3.8"
services:
DB:
image: mysql ← ここに初期データ投入してくれるimageを書きたい
environment:
MYSQL_ROOT_PASSWORD: パスワード
ports:
- ポート
....
....
....
....
image: mysql ← ここに初期データ投入済みのimageを書きたい
imageをDockerHubとかGithubPackagesに上げて
上記の方法でそのimageを指定さえしていれば、どの環境でもそのテストデータを使える。
そもそも初期データを投入するimageのDockerfileから
FROM mysql
ENV MYSQL_ROOT_PASSWORD=パスワード ← これないと怒られました
COPY sqlファイルのpath /docker-entrypoint-initdb.d
ここのcopyの部分も最初『sqlファイルがないですよ!』と怒られました。
Dockerfileがある階層から相対パスで書いたらいけるっぽい
これをbuildして、GithubPackagesにpushする。
ここらへんはGithubPackagesの公式の通りでいけると思います!
今回はGithubPackagesに上げたのでこんな感じ
version: "3.8"
services:
DB:
image: docker.pkg.github.com/username/repository名/image名:tag
environment:
MYSQL_ROOT_PASSWORD: パスワード
ports:
- ポート
....
....
....
....
で、実際にコンテナを立ち上げると
見事に落ちてしまいます。
なので
docker-compose up -d
で立ち上げていたところを
docker-compose up
で立ち上げて見てみることに。
すると, sqlファイルが permission denied
でした。
なので、Dockerfileで権限周りもいじる。
FROM mysql
ENV MYSQL_ROOT_PASSWORD=パスワード
COPY sqlファイルのpath /docker-entrypoint-initdb.d
RUN chown mysql:mysql /docker-entrypoint-initdb.d/*.sql
これでもう一回buildとpushをして
imageを指定してあるdoker-compose.ymlをdocker-compose up -d
したら
見事にデータが入っていました!!!
参考記事
https://www.xlsoft.com/jp/blog/blog/2019/10/09/post-7617/
https://github.com/docker-library/postgres/issues/722