Разница между "изображением" и "строить" внутри докера

Пожалуйста, помогите мне понять разницу между "изображением" и "строить" в докере.

Ответ 1

  • image означает, что docker compose будет запускать контейнер на основе этого изображения
  • build означает, что docker compose сначала создаст образ на основе Dockerfile, найденного в пути, связанном со сборкой (а затем запустит контейнер на основе этого образа).

PR 2458 был в конечном итоге объединен, чтобы разрешить и то, и другое (и использовать image качестве имени изображения при сборке, если оно существует).

therobyouknow упоминает в комментариях:

dockerfile: как под-оператор под build: может использоваться для указания имени файла/пути Dockerfile.

version: '3'
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

Ответ 2

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

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

Пример: Докер-compose.yaml

version: '3'
services:
  service1:
    build: .
    ports:
      - "5000:5000"
  service2:
    image: "redis:alpine"

service1 сначала создаст образ на основе Dockerfile текущего пути и запустит контейнер на основе этого образа.

service2 загрузит образ "redis: alpine" из концентратора докеров и запустит контейнер для загруженного образа.