Docker and Containers

Що таке контейнер?

Чому це корисно?

Яка різниця між GitHub та Docker?

Що таке Docker?

Docker Це платформа для розробки, доставки та запуску додатків у контейнерах. Docker Logo

Що таке контейнер?

Контейнер - це окрема віртуальна машина, яка містить все необхідне для запуску програми: код, бібліотеки, залежності та налаштування. Вона знаходитться на машині користувача, має окрему операційну систему, але використовує ресурси хост-машини (процесор, пам’ять, диск).

Особливості контейнера

  • Власна ОС
  • Власні бібліотеки
  • Власні залежності
  • Власні налаштування
  • легко переноситься

Контейнер == “міні” віртуальна машина (такий як Windows, Linux, MacOS)

Чому це корисно?

Головна проблема комунікації розробників це:

  • “На моєму комп’ютері працює, сподіваюся, що у тебе теж”
  • “В мене не запускається, бо в мене інша версія Python”
  • “В мене не запускається бо маю Mac”

Рішення

Якщо всі будуть мати однакове середовище, то проблем не буде.

Питання: як це зробити?

Рішення 1

Встановлювати всі залежності вручну і контролювати версії пакетів, бібліотек один одного.

- Складно

- Різні ОС

- Різні версії

- Важко підтримувати

Рішення 2

Використовувати пакети, що спрощують встановлення залежностей, наприклад, requirements.txt для Python або renv для R.

  • Важко встановити

  • Важко підтримувати

  • Багато пакетів для різних мов

  • Охоплює не всі залежності

  • Встановлюю більшість залежностей

  • Працює на своїй ОС

Рішення 3

Використовувати контейнери, наприклад, Docker.

  • Потребує місце на диску

  • Потребує ресурси (CPU, RAM)

  • Потрібно вивчити базові команди

  • Встановлює всі залежності

  • Працює на власній ОС, тому байду яка ОС у користувача

  • Легко переноситься

  • Повне налаштування середовища

Як працює Docker?

Dockerfile - інструкції для створення image (образу)

Dockerfile - це будь-який текстовий файл, який читає Docker для створення образу (image). Він містить усі інструкції, по типу:

  • Яка ОС

  • Які залежності

  • Які файли входять до контейнера

DOCKERFILE - це рецепт створення образу (image)

Docker Image - це шаблон (шаблонна віртуальна машина)

Docker Image - це шаблон (шаблонна віртуальна машина), який створюється на основі інструкцій з Dockerfile. В цьому документу є інструкції по будуванні контейнера, але вже у форматі команд, що не розуміє людина, а розуміє Docker.

IMAGE - це шаблон віртуальної машини або інструкція для створення контейнера

Docker Container - це запущений образ (image)

Docker Container - це запущений образ (image). Це вже повноцінна віртуальна машина, яка працює на вашому комп’ютері. Вона має власну ОС, бібліотеки, залежності та налаштування.

CONTAINER - це запущений образ (image) або віртуальна, що готова до роботи

Що потрібно для початку?

  • Зареєструватися на Docker Hub для зберігання своїх образів (image) або їх завантаження
  • Завантажити будь-який образ (image) з Docker Hub або створити свій власний за допомогою Dockerfile

Базові команди Docker

docker pull <image_name>      # Завантажити образ (image) з Docker Hub
docker images                 # Показати всі завантажені образи 
docker run -it <image_name>   # Запустити контейнер з образом (image)
docker ps                     # Показати всі запущені контейнери
docker build -t <image_name> .   # Створити власний образ (image) з Dockerfile що знаходиться в поточній папці

Варто пам’ятати що Docker це один з інструментів для роботи з контейнерами, є й інші, наприклад:

  • Podman
  • Kubernetes
  • OpenShift
  • AWS ECS