2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

初期データを注入したDocker imageをdocker-composeで立ち上げる

Last updated at Posted at 2020-10-01
docker-compose.yml
version: "3.8"

services:
  DB:
    image: mysql ← ここに初期データ投入してくれるimageを書きたい
    environment: 
      MYSQL_ROOT_PASSWORD: パスワード
    ports: 
      - ポート
    ....
    ....
    ....
    ....

image: mysql ← ここに初期データ投入済みのimageを書きたい

imageをDockerHubとかGithubPackagesに上げて
上記の方法でそのimageを指定さえしていれば、どの環境でもそのテストデータを使える。

そもそも初期データを投入するimageのDockerfileから

Dockerfile
FROM mysql

ENV MYSQL_ROOT_PASSWORD=パスワード ← これないと怒られました

COPY sqlファイルのpath /docker-entrypoint-initdb.d

ここのcopyの部分も最初『sqlファイルがないですよ!』と怒られました。
Dockerfileがある階層から相対パスで書いたらいけるっぽい

これをbuildして、GithubPackagesにpushする。
ここらへんはGithubPackagesの公式の通りでいけると思います!

今回はGithubPackagesに上げたのでこんな感じ

docker-compose.yml
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で権限周りもいじる。

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?