У меня есть два образа MariaDb в Docker, но одна конфигурация - PullRequest
0 голосов
/ 24 марта 2019

Я строю конфигурацию с помощью docker-compose:

db: build: context: ./context dockerfile: /path/Dockerfile image: mariadb:dev

В Dockerfile:

FROM mariadb:latest MAINTAINER Billy COPY ./ /var/lib/mysql

После запуска docker-compose up у меня есть:

REPOSITORY TAG mariadb dev mariadb latest

Почему у меня есть изображение mariadb: последние и не только mariadb: dev?

Спасибо за вашу помощь (я нуб в докере и извините за мой английский)

Ответы [ 2 ]

1 голос
/ 24 марта 2019
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 внутри контейнера)

0 голосов
/ 24 марта 2019

У вас есть оба этих изображения, потому что mariadb:latest является промежуточным изображением для вашего пользовательского изображения - его необходимо иметь перед выполнением двух пользовательских слоев (MANTAINER и COPY соответственно).

Думайте о вашем изображении как о стопке изображений:

  • Образ mariadb:latest из Docker Hub (я полагаю) укладывается первым
  • A MANTAINER промежуточный слой (MANTAINER Billy) идет следующим
  • A COPY промежуточный слой (COPY ./ /var/lib/mysql) стоит последним

Затем docker создает тег (mariadb:dev) и указывает его на вновь созданное изображение.

Итак, более конкретно, Docker должен иметь mariadb:latest в своем локальном кэше, чтобы сделать возможным создание вашего образа.

Вы можете найти больше информации об этом в официальной документации Docker .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...