Когда я запускаю 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 сочинять не нужно?