docker-compose up -dしたらservices.db Additional property dockerfile is not allowedと出たので対策した

docker上でphpとsqlコンテナを立ち上げるべく下記のコードを設定。

```docker/docker-compose.yml
version:"3"
services:
  app:
    build:
      context:
      dokerfile: docker/app/Dockerfile
    volumes:
    -./src:/var/www/html
    ports:
    -"50090:90"
    depends_on:
     -db
        
  db:
    image: mysql:8.3
    ports:
        - "53306:3306"
    dokerfile: docker/db/Dockerfile
    volumes:
    - ./docker/db/my.cnf:/etc/mysql/my.cnf
    env_file:
    - ./docker/db/db-variables.env 
```


$ docker-compose up -d --buildしたらエラーをいくつか吐いた。

<h3>⚫︎その１</h3>

```
yaml: line 2: mapping values are not allowed in this context
```
2行目のmapping値が読み込めない。
→1行目のversion:と"3"の間にスペースがないせいでバージョンの識別が出来ず。
原因：書き方間違い

<h3>⚫︎その2</h3>

```
yaml: line 8: could not find expected ':'
```
8行目に:が見つからない。
→-と./src~の間にスペースがないせいでディレクトリを識別できず。
原因：書き方間違い

<h3>⚫︎その3</h3>

```
service volume services.app.volumes.[0] is missing a mount target
```
マウントポイントが見つからない。
→dockerfileと記載するところをdokerfileと記していた。
原因：スペルミス

<h3>⚫︎その4</h3>

```
services.db Additional property dockerfile is not allowed
```
db内のdockerfileが不明なファイルとして認識されている。
→buildの中にdockerfileを記載するところ、buildの記載がなかった。imageかbuildのどちらかに絞ればよかった。

ちなみにdb/Dockerfileとdb/my.cnfにはそれぞれ

```db/Dockerfile.
FROM mysql:8.3
ENV LANG ja\_JP.UTF-8
EXPOSE 3306
CMD ["mysqld"]
```

```db/my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

[client]
default-caracter-set=utf8mb4
```

と記載。
ymlとcnfにポート番号や言語・照合条件を記載しているので、このdb/Dockerfileは不要だったなと。


以上を踏まえて、
db/Dockerfileを削除してコードを下記のように修正。

```docker-compose.yml
version: "3"
services:
  app:
    build:
      context: .
      dockerfile: docker/app/Dockerfile
    volumes:
    - ./src:/var/www/html
    ports:
    - "50090:90"
    depends_on:
     - db
        
  db:
    image: mysql:8.3
    volumes:
    - ./docker/db/my.cnf:/etc/mysql/my.cnf
    ports:
        - "53306:3306"
    env_file:
    - ./docker/db/db-variables.env
```


buildしたところ
```
$ docker-compose ps

NAME        IMAGE     COMMAND                   SERVICE   CREATED         STATUS         PORTS
msr-app-1   msr-app   "docker-php-entrypoi…"   app       8 minutes ago   Up 8 minutes   80/tcp, 0.0.0.0:50090->90/tcp


$ docker container ls -a
CONTAINER ID   IMAGE         COMMAND                   CREATED          STATUS                      PORTS                           NAMES
1f8090e3e954   msr-app       "docker-php-entrypoi…"   28 seconds ago   Up 27 seconds               80/tcp, 0.0.0.0:50090->90/tcp   msr-app-1
9f474e442fee   msr-db        "docker-entrypoint.s…"   28 seconds ago   Exited (1) 19 seconds ago                                   msr-db-1
```

appは無事に起動。dbがExited(1)で、エラー吐いている。
$ docker logs 9f474e442fee
すると
```
mysqladmin: [ERROR] unknown variable 'default-caracter-set=utf8mb4'.
2024-04-12 01:59:16+00:00 [ERROR] [Entrypoint]: Unable to shut down server.
```
caracterって何やねん。my.cnfを修正してbuildしなおしたら
```
CONTAINER ID   IMAGE         COMMAND                   CREATED         STATUS                  PORTS                                NAMES
0b98ab337f76   msr-app       "docker-php-entrypoi…"   9 seconds ago   Up 8 seconds            80/tcp, 0.0.0.0:50090->90/tcp        msr-app-1
de9fe0f5f774   mysql:8.3     "docker-entrypoint.s…"   9 seconds ago   Up 8 seconds            33060/tcp, 0.0.0.0:53306->3306/tcp   msr-db-1
7f46bbe6df00   hello-world   "/hello"                  3 days ago      Exited (0) 3 days ago                                        frosty_tu
```

晴れてコンテナが起動。
dockerのimageとcontainerの理解がまた一歩深まりました。