| layout | ../../layouts/Layout.astro |
|---|---|
| title | Docker |
| description | Docker, containers, images, Dockerfile и Docker Compose для frontend-разработчика |
| category | Инфраструктура |
| kind | questions |
| order | 76 |
Что нужно знать frontend-разработчику о Docker?
|
Короткий ответ На уровне рабочего окружения достаточно понимать, что Docker фиксирует одинаковую среду для локального запуска, CI или integration tests. Глубокие вопросы про image, container, Dockerfile, Compose и frontend multi-stage build раскрыты в этом разделе. Полный ответ На уровне рабочего окружения достаточно понимать, что Docker фиксирует одинаковую среду для локального запуска, CI или integration tests. Глубокие вопросы про image, container, Dockerfile, Compose и frontend multi-stage build раскрыты в этом разделе. |
Что такое Docker?
|
Короткий ответ Docker — инструменты и формат для сборки и запуска containers из reproducible images. Container упаковывает приложение, runtime и filesystem dependencies. Это упрощает одинаковый запуск в CI, local и production. Полный ответ Docker — инструменты и формат для сборки и запуска containers из reproducible images. Container упаковывает приложение, runtime и filesystem dependencies. Это упрощает одинаковый запуск в CI, local и production. |
Чем container отличается от virtual machine?
|
Короткий ответ VM включает гостевую ОС и виртуализирует hardware, container разделяет kernel host OS и изолирует процессы. Containers обычно запускаются быстрее и занимают меньше места. Изоляция отличается от полной VM и требует security hardening. Полный ответ VM включает гостевую ОС и виртуализирует hardware, container разделяет kernel host OS и изолирует процессы. Containers обычно запускаются быстрее и занимают меньше места. Изоляция отличается от полной VM и требует security hardening. |
Что такое Docker image?
|
Короткий ответ Image — immutable шаблон filesystem и metadata для запуска container. Он состоит из layers и обычно хранится в registry. Один image можно запускать много раз с разной конфигурацией. Полный ответ Image — immutable шаблон filesystem и metadata для запуска container. Он состоит из layers и обычно хранится в registry. Один image можно запускать много раз с разной конфигурацией. |
Что такое Docker container?
|
Короткий ответ Container — запущенный instance image с writable layer, process и настройками сети. После удаления его локальные изменения исчезают, если данные не вынесены в volume. Container должен быть заменяемым. Полный ответ Container — запущенный instance image с writable layer, process и настройками сети. После удаления его локальные изменения исчезают, если данные не вынесены в volume. Container должен быть заменяемым. |
Что такое Dockerfile?
|
Короткий ответ Это декларативная последовательность инструкций сборки image: base image, files, commands и startup metadata. Multi-stage build отделяет тяжелую сборочную среду от компактного runtime image. Секреты нельзя записывать в layers. Полный ответ Это декларативная последовательность инструкций сборки image: base image, files, commands и startup metadata. Multi-stage build отделяет тяжелую сборочную среду от компактного runtime image. Секреты нельзя записывать в layers. FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80Путь |
Что такое build context?
|
Короткий ответ Это directory и набор файлов, отправляемых Docker daemon/build engine для сборки. Инструкции COPY видят только context. Слишком большой context замедляет build и может случайно включить секреты. Полный ответ Это directory и набор файлов, отправляемых Docker daemon/build engine для сборки. Инструкции |
Что такое layer в Docker image?
|
Короткий ответ Большинство Dockerfile instructions создают кешируемый immutable layer. Изменение раннего layer инвалидирует следующие. Поэтому manifests копируют и устанавливают dependencies до копирования часто меняющегося source code. Полный ответ Большинство Dockerfile instructions создают кешируемый immutable layer. Изменение раннего layer инвалидирует следующие. Поэтому manifests копируют и устанавливают dependencies до копирования часто меняющегося source code. |
Что такое .dockerignore?
|
Короткий ответ Файл исключает пути из build context, например nodemodules, .git, dist и local secrets. Это ускоряет передачу context и уменьшает риск утечки. Он работает похоже на .gitignore, но правила относятся к Docker build. Полный ответ Файл исключает пути из build context, например |
Что такое port mapping?
|
Короткий ответ Mapping публикует port container на host, например -p 8080:80. Приложение внутри должно слушать нужный interface и container port. EXPOSE документирует port, но само mapping не создает. Полный ответ Mapping публикует port container на host, например |
Что такое volume?
|
Короткий ответ Volume хранит данные вне writable layer container. Он переживает пересоздание container и может монтировать host directory для разработки. Для static frontend production volume обычно не нужен, а backend/database используют его часто. Полный ответ Volume хранит данные вне writable layer container. Он переживает пересоздание container и может монтировать host directory для разработки. Для static frontend production volume обычно не нужен, а backend/database используют его часто. |
Что такое environment variables в Docker?
|
Короткий ответ Они передают runtime configuration процессу container через -e, Compose или platform settings. Значения не следует встраивать в image как secrets. Browser frontend не может прочитать server environment после статической сборки без runtime config механизма. Полный ответ Они передают runtime configuration процессу container через |
Как собрать Docker image?
|
Короткий ответ Команда читает Dockerfile и build context, создавая image с заданным tag. Полный ответ Команда читает Dockerfile и build context, создавая image с заданным tag. docker build -t frontend-app . |
Как запустить container?
|
Короткий ответ --rm удалит остановленный container, а -p опубликует port. Полный ответ
docker run --rm -p 8080:80 frontend-app |
Как посмотреть логи container?
|
Короткий ответ Сначала находят container, затем читают stdout/stderr. Приложение должно писать operational logs в стандартные streams. Полный ответ Сначала находят container, затем читают stdout/stderr. Приложение должно писать operational logs в стандартные streams. docker ps
docker logs <container_id> |
Как остановить container?
|
Короткий ответ docker stop отправляет graceful signal и после timeout завершает process. Приложение должно корректно обрабатывать shutdown. Полный ответ
docker stop <container_id> |
Как зайти внутрь container?
|
Короткий ответ exec запускает новый process в работающем container. Команда полезна для диагностики, но production fixes нужно вносить в image, а не вручную. Полный ответ
docker exec -it <container_id> sh |
Что такое Docker Compose?
|
Короткий ответ Compose описывает несколько связанных containers, networks и volumes в YAML. Он удобен для локального окружения и integration tests. Production orchestration может использовать другие платформы. Полный ответ Compose описывает несколько связанных containers, networks и volumes в YAML. Он удобен для локального окружения и integration tests. Production orchestration может использовать другие платформы. |
Чем Docker Compose отличается от Docker?
|
Короткий ответ Docker CLI управляет отдельными images и containers, Compose — набором services как одним проектом. Compose вызывает тот же container runtime. Он добавляет декларативную конфигурацию связей и lifecycle. Полный ответ Docker CLI управляет отдельными images и containers, Compose — набором services как одним проектом. Compose вызывает тот же container runtime. Он добавляет декларативную конфигурацию связей и lifecycle. |
Что такое service в docker-compose.yml?
|
Короткий ответ Service описывает image/build, command, ports, environment, volumes и dependencies одного типа container. Compose создает container instances service. Имя service также работает как DNS hostname внутри default network. Полный ответ Service описывает image/build, command, ports, environment, volumes и dependencies одного типа container. Compose создает container instances service. Имя service также работает как DNS hostname внутри default network. |
Что такое network в Docker Compose?
|
Короткий ответ Network соединяет services и изолирует их от других проектов. Containers обращаются друг к другу по service name и внутреннему port. Host port mapping для межконтейнерной связи не нужен. Полный ответ Network соединяет services и изолирует их от других проектов. Containers обращаются друг к другу по service name и внутреннему port. Host port mapping для межконтейнерной связи не нужен. |
Что такое volume в Docker Compose?
|
Короткий ответ Volume объявляет persistent или bind-mounted storage для services. Named volume управляется Docker, bind mount связывает конкретный host path. Неправильный mount может скрыть файлы из image. Полный ответ Volume объявляет persistent или bind-mounted storage для services. Named volume управляется Docker, bind mount связывает конкретный host path. Неправильный mount может скрыть файлы из image. |
Как запустить несколько сервисов одной командой?
|
Короткий ответ up создает network, builds нужные images и запускает services. --build принудительно учитывает изменения Dockerfile и context. Полный ответ
docker compose up --build |
Как посмотреть логи через Docker Compose?
|
Короткий ответ Команда агрегирует logs всех services; можно указать имя одного service. -f продолжает следить за output. Полный ответ Команда агрегирует logs всех services; можно указать имя одного service. docker compose logs -f |
Как остановить окружение?
|
Короткий ответ down останавливает и удаляет containers и project network. Named volumes сохраняются, если не добавить --volumes. Полный ответ
docker compose down |
Как Docker Compose помогает frontend-разработчику?
|
Короткий ответ Одной командой поднимает frontend, backend, database и mocks с согласованными адресами. Это уменьшает расхождения локального окружения и onboarding. Health checks и seed data делают сценарий надежнее простого порядка запуска. Полный ответ Одной командой поднимает frontend, backend, database и mocks с согласованными адресами. Это уменьшает расхождения локального окружения и onboarding. Health checks и seed data делают сценарий надежнее простого порядка запуска. services:
frontend:
build: .
ports:
- '4200:80'
environment:
API_URL: 'http://backend:3000'
backend:
image: node:22-alpine
working_dir: /app
command: npm start
volumes:
- ./backend:/app
ports:
- '3000:3000' |