Цель урока: Глубоко понять, как работает Docker, чем он отличается от виртуальных машин, научиться искать образы в Docker Hub и разбираться в версиях (тегах) программного обеспечения.

Часть 1: Главная проблема - "У меня всё работает"

Представьте ситуацию. Вы - разработчик, и вы настроили сервер для сайта.

  1. Установили Ubuntu 22.04.

  2. Поставили Python 3.10.

  3. Установили библиотеку pandas версии 1.4.

  4. Настроили конфиг в /etc/app/config.conf.

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

Проблема: На новом месте другая версия Linux, Python версии 3.8 (и обновляться нельзя, потому что там работают другие программы), а конфиг вообще лежит в другой папке.
Итог: Сайт падает. Вы тратите 3 дня на "подгонку" окружения. Это называется Dependency Hell (Ад зависимостей).

Решение Docker:
Docker позволяет упаковать всё перечисленное (код, Python, библиотеки, конфиги, кусочек операционной системы) в один файл-архив. Вы передаете этот файл коллеге, он запускает его одной командой, и у него всё работает гарантированно так же, как у вас.

Часть 2: Контейнеры против Виртуальных машин

Многие новички думают: "Так это же просто Виртуалка!". Нет, и это критически важно понять.

Давайте сравним их на примере жилья:

Характеристика Виртуальная машина (VM) Контейнер (Docker)
Аналогия Частный дом. У него свой фундамент, свои стены, своя крыша, свой водопровод. Квартира в доме. Фундамент и водопровод общие (от дома), но стены свои.
Ядро (Основа) У каждой VM своё ядро ОС. Это полноценная Windows или Linux внутри другой системы. Все контейнеры используют общее ядро хост-системы (вашего сервера).
Вес Тяжелая. Образ весит гигабайты (например, 10 Гб). Легкий. Образ весит мегабайты (например, 50-200 Мб).
Время старта Минуты (надо загрузить всю ОС с нуля). Миллисекунды (процесс просто запускается).
Изоляция Полная. Одна VM не видит другую. Достаточная. Процессы изолированы, но ядро общее.

Вывод: На одном сервере средней мощности можно запустить 3-4 виртуальные машины, и они "съедят" всю память. На том же сервере можно запустить сотни Docker-контейнеров.

Часть 3: Словарь Docker (База знаний)

Эти 4 термина нужно знать наизусть:

  1. Image (Образ) - Это шаблон (или чертеж). Он неизменяемый. В нем записано, что должно быть внутри.

    • Пример: Установочный диск Windows или класс в программировании.

  2. Container (Контейнер) - Это запущенная копия образа. В нем "живет" программа. Контейнеров из одного образа можно сделать сколько угодно.

    • Пример: Установленная и работающая Windows или объект класса.

  3. Dockerfile - Это текстовая инструкция для создания образа.

    • Пример: Кулинарный рецепт, по которому Docker печет пирог (Образ).

  4. Registry (Реестр) - Хранилище образов в интернете. Самый главный - Docker Hub.

Часть 4: Принцип "Слоенного пирога"

Это то, что делает Docker гениальным. Образ Docker - это не один большой файл, это "слоеный пирог".

Допустим, вы хотите сделать образ для своего сайта:

  • Слой 1: Вы берете базовую Ubuntu (Docker качает её один раз).

  • Слой 2: Вы ставите туда Nginx.

  • Слой 3: Вы кладете туда свой сайт.

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

Часть 5: Практика в браузере (Docker Hub)

Мы пока не ставим Docker, но мы должны научиться находить программы для него. Docker Hub - это как "Google Play" или "App Store", но для серверов.

Задание:

  1. Откройте в браузере сайт hub.docker.com.

  2. В строке поиска введите nginx.

  3. Нажмите на первый результат (обычно он помечен значком Docker Official Image).

На что смотреть:
В Docker Hub есть вкладка Tags (Теги). Это версии.
Когда вы говорите Docker: "скачай мне nginx", Docker по умолчанию ищет тег :latest (последняя версия).
Но в серьезной работе (Production) использовать latest опасно. Сегодня "последняя" версия - стабильная, а завтра выйдет новая, которая сломает ваш конфиг.

Поэтому мы всегда указываем конкретную версию, например: nginx:1.23.

  • Alpine версии: Вы часто увидите теги типа nginx:alpine. Alpine Linux - это сверхлегкая версия Linux (весит всего 5 Мб!). Если вам не нужны сложные инструменты внутри контейнера, всегда старайтесь выбирать образы на базе Alpine.

Часть 6: Подготовка вашего сервера

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

Зайдите на сервер по SSH и выполните две команды.

1. Проверка разрядности системы:
Нам нужна 64-битная система.

uname -m

Если ответ x86_64 - отлично.

2. Проверка свободного места:
Образы и контейнеры занимают место. Проверьте, что у вас есть хотя бы 3-4 ГБ свободного места.

df -h /

Смотрите колонку Avail (Доступно).

Часть 7: Резюме

Сегодня мы разобрали теорию, которая отличает профессионала от "эникейщика":

  1. Контейнер - это не виртуалка, он использует ядро вашего сервера.

  2. Образ (Image) - мертвый шаблон, Контейнер (Container) - живой процесс.

  3. Слои позволяют экономить место, переиспользуя общие части (например, Linux и библиотеки).

  4. Теги (Tags) - это версии образов. В продакшене мы используем конкретные цифры, а не latest.

В следующем, 61-м уроке, мы установим Docker Engine, запустим классический "Hello World", а затем поднимем настоящий веб-сервер Nginx внутри изолированного контейнера за 30 секунд. Готовьте терминалы!

Перейти к просмотру - УРОК №61.

подарок Промо-код: PROMO15 - скидка 15%! огонь

Введите при оформлении первого заказа на сайте: Hosting-VDS.com

авторское право цифровые решения

Помог ли вам данный ответ? 0 Пользователи считают это полезным (0 голосов)