Docker
Что такое Docker?
Docker — это платформа, которая позволяет упаковывать приложения и их зависимости в изолированные контейнеры. Это облегчает развертывание и обеспечивает одинаковое поведение приложения в разных средах (локально, на сервере или в облаке).
Преимущества Docker:
- Портативность: Работает одинаково на всех системах.
- Изоляция: Каждое приложение работает в своём контейнере.
- Лёгкость: Контейнеры занимают меньше ресурсов по сравнению с виртуальными машинами.
- Удобство: Упрощает управление зависимостями и процессами развертывания.
Различие между Docker и Virtual Machine
Что такое Dockerfile?
Dockerfile — это текстовый файл с инструкциями для создания Docker-образа.
Образ — это шаблон для создания контейнеров. Вы описываете в Dockerfile, какие программы и зависимости нужны вашему приложению, чтобы оно работало.
Пример Dockerfile:
# Используем базовый образ Python
FROM python:3.10-slim
# Копируем файлы проекта в контейнер
COPY . /app
# Устанавливаем рабочую директорию
WORKDIR /app
# Устанавливаем зависимости
RUN pip install -r requirements.txt
# Запускаем приложение
CMD ["python", "app.py"]
Что такое docker-compose?
docker-compose — это инструмент для запуска нескольких связанных контейнеров.
Вместо запуска контейнеров вручную, вы описываете их конфигурацию в одном YAML-файле и управляете ими как единой системой. Кстати формат файла пишут, как .yaml или .yml (Разницы нет)
Файлик называют docker-compose.yaml
# Можно собирать из нескольких сервисов
version: "3.6" # Версия формата файла Docker Compose, используемая в данном случае, — `3.6`.
services:
jupyterlab:
image: andreper/jupyterlab:3.0.0-spark-3.0.0 # Образ: `andreper/jupyterlab:3.0.0-spark-3.0.0`
container_name: jupyterlab # Имя контейнера: `jupyterlab`
ports:
- 8888:8888 # 8888:8888 (интерфейс JupyterLab)
- 4040:4040 # 4040:4040 (интерфейс Spark UI)
volumes:
- ./build/workspace:/opt/workspace # Слева папка у вас на компе, а справа папка внутри контейнера. Все, что положишь в папку workspace, будет автоматически и внутри контейнера!
spark-master:
image: andreper/spark-master:3.0.0
container_name: spark-master
ports:
- 8080:8080
- 7077:7077
volumes:
- ./build/workspace:/opt/workspace
spark-worker-1:
image: andreper/spark-worker:3.0.0
container_name: spark-worker-1
environment:
- SPARK_WORKER_CORES=2
- SPARK_WORKER_MEMORY=2g
ports:
- 8081:8081
volumes:
- ./build/workspace:/opt/workspace
depends_on:
- spark-master # Зависит от сервиса spark-master, чтобы гарантировать его запуск после мастера.
Для запуска: Этой командой можно запустить сборку и запуск docker-контейнера в фоновом режиме (в терминале не будут отображаться логи)
docker-compose up -d
Пример docker-compose взят отсюда
Распространённые команды Docker
Управление образами
docker build -t <имя_образа> .
Собирает образ из Dockerfile в текущей директории.docker images
Показывает список всех образов на вашем компьютере.docker rmi <image_id>
Удаляет образ по его идентификатору.
Управление контейнерами
docker ps
Показывает запущенные контейнеры.docker ps -a
Показывает все контейнеры, включая остановленные.docker stop <container_id>
Останавливает запущенный контейнер.docker rm <container_id>
Удаляет остановленный контейнер.
Просмотр логов
docker logs <container_id>
Показывает логи контейнера.