AI Engineering Tools

Программирование

Docker

Справочник по образам и контейнерам Docker, Dockerfile, Compose, портам, томам, журналам и частым проблемам.

33 пунктов

Основные понятия

Docker

Docker

docker --version

Значение

Инструмент для упаковки и запуска приложений в изолированных контейнерах.

Когда использовать

Используйте это, когда вам нужно, чтобы приложение работало с одними и теми же пакетами OS, средой выполнения и зависимостями на разных машинах.

Пример

docker --version

Пример запроса

Объясните, можно ли запустить этот проект с помощью Docker.

Основные понятия

Docker daemon

Docker daemon

Не удается подключиться к демону Docker

Значение

Фоновая служба, которая создает образы и запускает контейнеры.

Когда использовать

Если команды Docker не могут подключиться, служба Docker Desktop или Docker могут не работать.

Пример

Не удается подключиться к демону Docker

Пример запроса

Проверьте, почему команды Docker не могут подключиться к демону.

Основные понятия

Изображение.

Image

node:20-alpine

Значение

Многоразовая модель, используемая для создания контейнеров.

Когда использовать

Изображения определяют, какая операционная система OS, среда выполнения, библиотеки и файлы приложений используются при запуске контейнера.

Пример

node:20-alpine

Пример запроса

Сообщите мне, какой базовый образ используется в этом Dockerfile.

Основные понятия

Контейнер

Container

docker ps

Значение

Запущенный или остановленный экземпляр, созданный из образа.

Когда использовать

Используйте контейнеры для запуска приложения, базы данных, кэша или фонового процесса в изолированных средах.

Пример

docker ps

Пример запроса

Перечислите запущенные контейнеры и объясните, что делает каждый из них.

Основные понятия

Реестр

Registry

docker pull postgres:16

Значение

Сервер, где хранятся и скачиваются образы Docker.

Когда использовать

Docker Hub and private registries are used to share base images or deployable app images.

Пример

docker pull postgres:16

Пример запроса

Объясните, откуда будет загружен этот образ.

Dockerfile

Dockerfile

Dockerfile

Dockerfile

Значение

Файл, определяющий способ создания образа Docker.

Когда использовать

Используйте это для установки зависимостей, копирования файлов приложения и определения команды, которая запускает приложение.

Пример

Dockerfile

Пример запроса

Прочитайте этот Dockerfile и сделайте краткое описание этапов сборки.

Dockerfile

FROM

FROM

FROM node:20-alpine

Значение

Инструкция Dockerfile, которая выбирает базовый образ.

Когда использовать

Он определяет начальный уровень операционной системы OS и часто версию среды выполнения.

Осторожно

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

Пример

FROM node:20-alpine

Пример запроса

Объясните, что включает в себя этот образ FROM.

Dockerfile

WORKDIR

WORKDIR

WORKDIR /app

Значение

Устанавливает папку внутри образа, в которой выполняются последующие команды.

Когда использовать

Используйте это так, чтобы команды COPY, RUN и CMD выполнялись из предсказуемой папки приложения.

Пример

WORKDIR /app

Пример запроса

Объясните, какую папку этот Dockerfile использует в качестве каталога приложения.

Dockerfile

COPY

COPY

COPY package.json package-lock.json ./

Значение

Копирует файлы из контекста сборки в образ.

Когда использовать

Используйте это для добавления файлов зависимостей, исходного кода и статических ресурсов в образ.

Пример

COPY package.json package-lock.json ./

Пример запроса

Сообщите мне, какие файлы добавляются в образ этим шагом COPY.

Dockerfile

RUN

RUN

RUN npm ci

Значение

Запускает команду во время сборки образа.

Когда использовать

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

Осторожно

RUN выполняется во время сборки образа, а не при запуске контейнера.

Пример

RUN npm ci

Пример запроса

Разделение команд сборки Dockerfile от команд запуска контейнера.

Dockerfile

CMD

CMD

CMD ["npm", "run", "start"]

Значение

Определяет команду по умолчанию, которая выполняется при запуске контейнера.

Когда использовать

Используйте это для запуска веб-сервера, API-сервера, рабочего процесса или скрипта.

Пример

CMD ["npm", "run", "start"]

Пример запроса

Сообщите мне, с какой командой запускается этот контейнер.

Dockerfile

EXPOSE

EXPOSE

EXPOSE 3000

Значение

Описывайте, на каком порту ожидается, что контейнерное приложение будет прослушивать.

Когда использовать

Используйте это как подсказку, а затем опубликуйте порт с помощью docker run -p или compose ports.

Осторожно

EXPOSE сам по себе не делает приложение доступным из вашего браузера.

Пример

EXPOSE 3000

Пример запроса

Объясните, действительно ли этот открытый порт опубликован.

Dockerfile

Файл .dockerignore

.dockerignore

node_modules

Значение

Файл, исключающий пути из контекста сборки Docker.

Когда использовать

Используйте это для исключения локальных зависимостей, выходных файлов сборки, секретов и временных файлов из процесса сборки образа.

Пример

node_modules

Пример запроса

Проверьте, не исключает ли этот файл .dockerignore небезопасные или ненужные файлы.

Dockerfile

Контекст сборки

Build context

docker build -t my-app .

Значение

Папка, которая передается в Docker во время сборки образа.

Когда использовать

Точка в конце команды `docker build` обычно означает, что текущая папка является контекстом сборки.

Осторожно

Большой контекст замедляет сборку и может случайно включать личные файлы.

Пример

docker build -t my-app .

Пример запроса

Объясните, какие файлы доступны для этой сборки Docker.

Docker Compose

Docker Compose

Docker Compose

docker compose up

Значение

Инструмент для запуска нескольких служб Docker из одного файла YAML.

Когда использовать

Используйте это для приложений вместе с базами данных, кэшами, рабочими процессами или локальными средами разработки.

Пример

docker compose up

Пример запроса

Объясните, какие службы запускает этот файл compose.

Docker Compose

сервисы

services

services: web: db:

Значение

Именованные части приложения, определенные в файле compose.

Когда использовать

Веб-сервис может запускать приложение, в то время как сервис базы данных использует PostgreSQL.

Пример

services: web: db:

Пример запроса

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

Docker Compose

docker compose up

docker compose up

docker compose up -d

Значение

Запускает сервисы, определенные в файле compose.

Когда использовать

Используйте -d, если хотите, чтобы службы работали в фоновом режиме.

Пример

docker compose up -d

Пример запроса

Запустите сервисы compose и покажите, какие из них работают.

Docker Compose

docker compose down

docker compose down

docker compose down

Значение

Останавливает и удаляет контейнеры, созданные compose.

Когда использовать

Используйте это, когда вы закончили работу с локальной средой разработки.

Осторожно

Именованные тома обычно остаются, если вы не удалите их явно.

Пример

docker compose down

Пример запроса

Остановите эту стек-композицию без удаления постоянных данных.

Команды

docker build

docker build

docker build -t my-app .

Значение

Создает образ Docker из Dockerfile и контекста.

Когда использовать

Используйте это после создания Dockerfile или изменения зависимостей приложения.

Пример

docker build -t my-app .

Пример запроса

Соберите этот образ Docker и укажите любые ошибки сборки.

Команды

docker run

docker run

docker run --name my-app -p 3000:3000 my-app

Значение

Создает и запускает контейнер из образа.

Когда использовать

Используйте это, когда вы хотите запустить один контейнер напрямую, без использования compose.

Пример

docker run --name my-app -p 3000:3000 my-app

Пример запроса

Запустите это изображение и объясните URL-адрес браузера.

Команды

docker ps

docker ps

docker ps

Значение

Перечисляет запущенные контейнеры.

Когда использовать

Используйте `docker ps -a`, если вы также хотите видеть остановленные контейнеры.

Пример

docker ps

Пример запроса

Отображать запущенные контейнеры и их опубликованные порты.

Команды

docker stop

docker stop

docker stop my-app

Значение

Останавливает работающий контейнер.

Когда использовать

Используйте это перед удалением контейнера или освобождением порта.

Пример

docker stop my-app

Пример запроса

Остановите контейнер, используя порт 3000.

Команды

docker logs

docker logs

docker logs my-app

Значение

Выводит логи из контейнера.

Когда использовать

Используйте это, когда контейнер завершается, аварийно останавливается или приложение не отвечает.

Пример

docker logs my-app

Пример запроса

Прочитайте логи этого контейнера и найдите первую ошибку.

Команды

docker exec

docker exec

docker exec -it my-app sh

Значение

Запускает команду внутри уже работающего контейнера.

Когда использовать

Используйте это для изучения файлов, переменных окружения или установленных инструментов внутри контейнера.

Осторожно

Изменения, внесенные вручную внутри контейнера, могут исчезнуть при повторной генерации контейнера.

Пример

docker exec -it my-app sh

Пример запроса

Открыть оболочку в этом контейнере и проверить его переменные окружения.

Порты и сеть

порты

ports

3000:3000

Значение

Отображает порт на вашем компьютере на порт внутри контейнера.

Когда использовать

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

Осторожно

Левая сторона - это порт хоста, а правая сторона - это порт контейнера.

Пример

3000:3000

Пример запроса

Объясните, какой URL мне следует открыть для этой настройки портов.

Порты и сеть

localhost в Docker

localhost in Docker

host.docker.internal

Значение

localhost может означать сам контейнер, а не вашу хост-машину, когда код выполняется внутри Docker.

Когда использовать

Используйте имена служб в сетях compose или host.docker.internal, когда контейнеру необходимо обращаться к хост-машине.

Пример

host.docker.internal

Пример запроса

Объясните, почему localhost не может подключиться к базе данных из этого контейнера.

Файлы и данные

Громкость

Volume

db-data:/var/lib/postgresql/data

Значение

Docker-managed storage that can persist data outside a container's lifecycle.

Когда использовать

Используйте тома для данных базы данных или других файлов, которые должны сохраняться после перезапуска контейнера.

Осторожно

Удаление томов может привести к удалению постоянных данных.

Пример

db-data:/var/lib/postgresql/data

Пример запроса

Сообщите мне, какие тома compose хранят постоянные данные.

Файлы и данные

Монтирование

Bind mount

./src:/app/src

Значение

Соединяет папку хоста непосредственно с путем контейнера.

Когда использовать

Используйте это во время разработки, чтобы изменения кода на хосте отображались внутри контейнера.

Осторожно

Монтирование bind может скрывать файлы, которые были скопированы в образ по тому же пути.

Пример

./src:/app/src

Пример запроса

Объясните, является ли этот том именованным томом или монтированием.

Файлы и данные

среда

environment

DATABASE_URL=postgres://db:5432/app

Значение

Значения конфигурации, передаваемые в контейнер.

Когда использовать

Используйте переменные среды для URL-адресов баз данных, портов, режимов, флагов функций и настроек времени выполнения.

Осторожно

Не встраивайте секреты в общедоступные образы и не сохраняйте реальные значения секретов.

Пример

DATABASE_URL=postgres://db:5432/app

Пример запроса

Проверьте, какие переменные окружения требуются этому контейнеру.

Диагностика

порт уже занят

port is already allocated

Не удалось привязать к 0.0.0.0:3000: порт уже занят.

Значение

Docker cannot publish a host port because another process or container is already using it.

Когда использовать

Найдите процесс или контейнер, использующий этот порт, затем остановите его или выберите другой порт хоста.

Пример

Не удалось привязать к 0.0.0.0:3000: порт уже занят.

Пример запроса

Найдите, что использует этот порт Docker, и предложите безопасное решение.

Диагностика

имя контейнера уже используется

container name is already in use

Конфликт. Имя контейнера "/my-app" уже используется.

Значение

Контейнер с таким же именем уже существует.

Когда использовать

Перечислите существующие контейнеры, а затем повторно используйте, удалите или переименуйте старый контейнер.

Пример

Конфликт. Имя контейнера "/my-app" уже используется.

Пример запроса

Разрешите этот конфликт имен контейнеров без неожиданного удаления данных.

Диагностика

Кэш сборки

Build cache

docker build --no-cache -t my-app .

Значение

Docker can reuse previous build layers to make builds faster.

Когда использовать

Если изменение, похоже, игнорируется, проверьте порядок в Dockerfile или выполните пересборку без кэша в качестве диагностического шага.

Осторожно

Опция --no-cache может замедлить сборку, поэтому используйте ее осознанно.

Пример

docker build --no-cache -t my-app .

Пример запроса

Объясните, может ли кэш сборки Docker скрывать мои изменения.

Безопасность

docker system prune

docker system prune

docker system prune

Значение

Удаляет неиспользуемые данные Docker, такие как остановленные контейнеры, неиспользуемые сети и неиспользуемые образы.

Когда использовать

Используйте это, когда Docker использует слишком много дискового пространства, и вы понимаете, что будет удалено.

Осторожно

С дополнительными параметрами утилита prune может удалять изображения или тома, которые вам все еще нужны.

Пример

docker system prune

Пример запроса

Перед удалением Docker покажите, что будет удалено и какие данные можно безопасно удалить.