Почему docker создает гораздо быстрее, чем с помощью Dockerfile? - PullRequest
0 голосов
/ 09 января 2020

Когда я запускаю docker build ., он отправляет весь каталог (за исключением, наверное, .dockerignore) в контекст docker, прежде чем делать что-либо еще:

Sending build context to Docker daemon  411.9MB

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

Пример dockerfile:

# Step 1: compile front end
# use NPM image
FROM node:10-alpine as webui
WORKDIR /webui

# NPM dependencies
COPY ./webui/package.json ./webui/yarn.lock ./
RUN yarn install

# Copy web ui code
COPY ./webui .

# Build -> outputs to ./public
ARG GIT_HASH=GIT_HASH
ARG LAST_UPDATED=LAST_UPDATED
ARG API_HOST=API_HOST
RUN yarn run build:production

# Step 2: Compile Server
# Use NPM Image
FROM node:10-alpine
WORKDIR /server

# Npm dependencies
COPY ./server/package.json ./server/yarn.lock ./
RUN yarn install

# Copy server code and compile
COPY ./server .
RUN yarn run build:production

# Include the webui compiled above
COPY --from=webui /public/ /public

# Run server
EXPOSE 8080
CMD node /server/dist/index.js

Пример docker compose:

version: "3.5"

volumes:
  server_node_modules:
  webui_node_modules:

  server-base: &server-base
    image: node:10-alpine
    working_dir: /server
    volumes:
      - ./server:/server
      - ./public:/public
      - server_node_modules:/server/node_modules

  server-install:
    <<: *server-base
    command: "yarn install"

  server-serve:
    <<: *server-base
    ports:
      - 8080:8080
    command: "yarn run local"

  webui-base: &webui-base
    image: node:10-alpine
    working_dir: /webui
    volumes:
      - ./webui:/webui
      - ./public:/webui/dist
      - webui_node_modules:/webui/node_modules

  webui-install:
    <<: *webui-base
    command: "yarn install"

  webui-build:
    <<: *webui-base
    command: "yarn run build:local"

  webui-prod:
    <<: *webui-base
    command: "yarn run build:production"

  webui-dev:
    <<: *webui-base
    command: "yarn run dev:watch"

В этом случае я бы запустил docker-compose up -d server-serve webui-prod, чтобы выполнить sh то же самое, что и файл docker (более или менее). Так, каков контекст для docker сочинять не нужно?

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