Dockerfile

Образ (image) є бінарним файлом, який включає в себе вимоги для запуску контейнера та метадані про його запуск. Бінарна частина містить layers для створення образу. Docker-image визначає стек шарів у Dockerfile. Перший шар, як правило, є батьківським образом, який змінюється наступними шарами. Батьківський образ може бути базовим образом1, який не будується з інших образів. Базовий образ може бути побудований з простору користувача ОС хоста або з особливого Docker-образу, що називається "scratch".

Dockerfile визначає базове зображення та шари. Кожна команда в Dockerfile створює ще один шар.

Контейнери використовують ядро хоста, але базове зображення визначає ОС (наприклад, Ubuntu). Базове зображення є користувацьким простором ОС поверх ядра хоста. Через це неможливо нативно запускати Windows контейнери на Linux хості або навпаки, через різні ядра. Контейнери не є віртуальними машинами! Коли ви запускаєте контейнер на хості із різним типом ядра, Docker підключає віртуальну машину під капотом і використовує її ядро.

Оскільки Linux дистрибутиви використовують одне ядро, існує кілька варіантів користувацького простору, від легких Alpine або BusyBox або scratch базових зображень до повнофункціональних Ubuntu або CentOS.
Останні мають набагато більший розмір файлу, тому вам слід ретельно обміркувати вибір базового зображення.
Що таке Layer (шар)?
Є деякі цікаві моменти у роботі зображень.
Шар - це просто різниця у файлах від попереднього шару. Це дозволяє отримувати шари яки займають відносно не багато місця, окрім базового шару, оскільки вони визначають лише зміни до конкретних файлів.
Другим цікавим моментом є те, що всі шари, окрім верхнього, є незмінними (лише для читання). Це призводить до таких властивостей:
- Кожен інстанс контейнера має свій особистий верхній шар, який є доступним для запису, для зберігання змін у файловій системі, які він зробив
- Контейнери можуть спільно використовувати шари лише для читання, мінімізуючи вимоги до дискового простору.
Ця шарова конструкція має такі переваги:
- Мінімізує розмір на диску
- Зменшує час побудови зображення
- Робить легкою зміну кількох контейнерів в одному місці
Простіші оновлення
Контейнери можуть значно полегшити нескінченне завдання по оновленню.
По-перше, контейнерні хости можуть бути оновлені окремо від образів контейнерів, що на них працюють, дотримуючись відповідної методології тестування (звісно).
По-друге, використовуючи базове зображення, яке регулярно оновлюється, контейнери можуть бути заново побудовані на оновленому базовому зображенні. Це фундаментальна зміна від оновлення серверної ОС та додатків на місці і має багато переваг, включаючи тестову валідацію перед міграцією на продакшин та впевненість у тому, що розгортання може бути відтворено.
1 https://docs.docker.com/develop/develop-images/baseimages/