今回はdocker-compose.ymlでDocker imageを指定するときにymlファイル内にimageオプションで直接指定せず、
buildオプションから別階層にあるDockerfileを指定したいときに少し詰まったので、記録として解決法を残しておきます。
version
Docker 20.10.0
docker-compose 1.27.4
ディレクトリ構成
こんな感じの構成でやります。
├── docker
│ ├── app
│ │ ├── Dockerfile
│ │ └── php.ini
│ ├── db
│ │ ├── Dockerfile
│ │ └── my.cnf
│ │ └── my.cnf
│ └── web
│ ├── Dockerfile
│ └── default.conf
└── docker-compose.yml
php, mysql, Nginxのコンテナを作るためにディレクトリでそれぞれ分けています。
docker-compose.ymlのbuildオプションのところにcontext
とdockerfile
を指定して記述します。
version: "3.8"
services:
web:
build:
context: ./ <-ココを記述!
dockerfile: ./docker/web/Dockerfile
depends_on:
- app
---省略---
app:
build:
context: ./ <-ココを記述!
dockerfile: ./docker/app/Dockerfile
depends_on:
- db
---省略---
db:
build:
context: ./ <-ココを記述!
dockerfile: ./docker/db/Dockerfile
---省略---
先ほどのymlファイルの記述について説明します。
services:
web:
build:
context: ./
dockerfile: ./docker/web/Dockerfile
context
オプションを追加して./
とすることで、docker-compose.ymlファイルのあるディレクトリを
指定します。
こうすることでここを基準にして、後述するDockerfileを探してくれます。
あとはdockerfile
オプションも追加して、./docker/web/Dockerfile
とすることで
docker-compose.ymlファイルのあるディレクトリを基準に指定したDockerfileを参照してくれます。
これでimageオプションを使わずにDockerfileからコンテナを作ることができるようになった。
最初からDockerfileを作成して指定しておけば、AWSのECRにpushするときに焦らなくて済むようになるので、少しは楽になるかな。。