db:
build:
context: ./context
dockerfile: /path/Dockerfile
image: mariadb:dev
Это говорит Docker, что вы хотите создать образ и назвать его mariadb
и пометить его как dev
(= mariadb: dev).
Ваш файл Docker основан на изображении mariadb
с его тегом latest
(FROM mariadb:latest
).
Итак, Docker сначала должен извлечь mariadb:latest
из концентратора докеров. После этого шага это изображение будет в вашем локальном реестре. После создания вашего изображения (mariadb:dev
) это изображение также находится в вашем локальном реестре.
Вот почему у вас есть оба в вашем реестре. mariadb:latest
- это базовое изображение для вашего изображения. Таким образом, Docker должен получить этот образ на первом этапе вашего Dockerfile. И так в вашем реестре.
Такое поведение задокументировано в официальных документах Docker
Если вы указываете изображение, а также сборку, то Compose называет построенную
изображение с веб-приложением и необязательным тегом, указанным на изображении:
build: ./dir
image: webapp:tag
В результате получается изображение с именем webapp.
и тег с тегом, построенный из ./dir.
Я думаю, что вам действительно нужно использовать образ mariadb:latest
из док-концентратора и включать ваши измененные файлы в качестве тома вместо создания нового образа.
Это будет выглядеть примерно так, как показано в вашем docker-compose.yml
(пожалуйста, обратитесь к документам по образу Марии БД , чтобы узнать, как его использовать подробно):
db:
image: mariadb:latest
volumes:
- "<relativePath>:/var/lib/mysql"
environment:
- MYSQL_ROOT_PASSWORD=password
где <relativePath>
- относительный путь от места, где находится ваш docker-compose.yml / где вы выполняете docker-compose up
. Например, вы можете создать подпапку «mysql», содержащую все файлы, которые вы хотите смонтировать в /var/lib/mysql
внутри контейнера, и затем использовать - "mysql:/var/lib/mysql"
. (При использовании .
вместо этого вы смонтируете docker-compose.yml
и все внутри той же папки в /var/lib/mysql
внутри контейнера)