Dockerfile FROM vs Docker-compose ИЗОБРАЖЕНИЕ - PullRequest
1 голос
/ 12 июля 2019

Я сейчас нахожусь в процессе изучения Docker.После прочтения документации и нескольких статей у меня, очевидно, больше вопросов, чем ответов.Самое интригующее для меня на данный момент: в чем разница между

FROM some:docker-image

в Dockerfile и

image: digitalocean.com/php 

в docker-compose.yml

Я делаюпонять, что они должны взять изображение и создать контейнер из него.Я не понимаю, что произойдет, если мы укажем оба одновременно, например:

version: '3'
services:
  #PHP Service
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: digitalocean.com/php

В обоих файлах docker-compose.yml и Dockerfile указаны изображения.Что происходит, когда эти изображения разные?Будет ли docker-compose.yml всегда побеждать и для этого одного сервиса?Будет ли он использовать только это «верхнее» изображение?Будут ли они перекрывать как-то?Или, может, я все неправильно понял?

Я видел это , но я все еще не уверен, понимаю ли я, что происходит.

1 Ответ

1 голос
/ 12 июля 2019

Разница составляет сборка против запуск

Думайте об изображениях как о приложениях и контейнерах как о процессе, выполняющем приложение.Запуск приложения не меняет приложение.Запуск контейнера также не меняет изображение.Изображения создаются из Dockerfiles с использованием docker build и являются постоянными.Контейнеры создаются по мере необходимости docker run, docker-compose, kubernetes или аналогичными инструментами из изображений и предназначены для временного использования.

Dockerfile используется командой docker build для создания нового образа.В Dockerfile в первой строке обычно указывается базовое изображение с FROM, то есть FROM nginx.Последующие строки RUN в Dockerfile предоставляют дополнительные шаги, которые docker build будет выполнять в оболочке в контексте образа FROM для создания нового образа.Обратите внимание, что Dockerfile не указывает имя нового изображения.Вместо этого новому образу присваивается имя в параметре -t some/name docker build

В файле docker-compose.yml указывается группа изображений для совместной загрузки и запуска в рамках комбинированной службы.Например, docker-compose.yml для блога может состоять из образа веб-сервера, образа приложения и образа базы данных и может указывать не только изображения, но и, возможно, способ их связи.

Поскольку сборка докера иdocker compose - это отдельные операции, нет конфликта или обнаружения различий.docker-compose.yml контролирует то, что будет загружаться и запускаться, и вы также можете создавать все, что захотите.

Кроме того, как @David Maze упоминал в комментариях:

Если вы используете обе опции, то Docker Compose создаст изображение, как указано, и затем пометит его, используя image: name;это может сбивать с толку, если вы помещаете туда «стандартное» имя изображения.

Полагаю, что если вы сделаете это, у вас может получиться изображение, скажем nginx, на вашем собственном компьютере, которое не соответствует изображению Dockerhub.Не делай этого.Вместо этого используйте уникальные имена для любых создаваемых вами изображений.

...