Оглавление

Представь, что у тебя есть сервер — мощный компьютер, на котором можно запускать программы. Обычно, если ты хочешь запустить несколько программ, тебе нужно устанавливать их по очереди, и они будут работать на одном сервере. Но если программ много, их настройки могут мешать друг другу, а ресурсы сервера могут быть перераспределены неэффективно.
Теперь представь, что у тебя есть специальная “коробка” для каждой программы, которая изолирует её от других программ, но при этом все эти коробки могут работать на одном сервере. Вот такие “коробки” и есть контейнеры Docker.
Виртуализация — это когда на одном сервере создаются несколько виртуальных машин (ВМ), каждая из которых выглядит как отдельный компьютер с операционной системой и программами. Каждая ВМ потребляет много ресурсов, потому что внутри неё работает целая операционная система.
Docker же работает по-другому. Вместо того чтобы запускать отдельные операционные системы для каждой программы, он изолирует программы внутри контейнеров, используя одну операционную систему. Это гораздо легче и быстрее, потому что контейнеры используют ресурсы хост-системы гораздо более эффективно.
Допустим, ты запускаешь веб-сайт на сервере. Ты хочешь, чтобы веб-сервер работал отдельно от базы данных, а база данных — отдельно от приложения для обработки платежей. С Docker ты можешь создать три контейнера: один для веб-сервера, один для базы данных и один для приложения. Они все работают на одном сервере, но при этом каждый из них изолирован, и их настройки не пересекаются.
Таким образом, Docker позволяет:
- Изолировать программы, чтобы они не мешали друг другу.
- Легко запускать и останавливать программы без сложной настройки.
- Запускать несколько приложений на одном сервере с минимальными затратами ресурсов.
В общем, Docker — это удобный способ развертывания и управления программами на сервере с минимальными затратами, не требуя установки отдельных виртуальных машин для каждой программы.
Docker использует операционную систему хоста (той, на которой он установлен) как основу для контейнеров, но это происходит не напрямую. Чтобы понять это лучше, давай разберем, как именно работает механизм контейнеров в Docker.
Терминалогия
Docker image (Docker-образ) — шаблон для создания Docker-контейнеров, исполняемый пакет, содержащий всё необходимое для запуска приложения: код, среду выполнения, библиотеки, переменные окружения и файлы конфигурации. Из-за того, что образы предназначены только для чтения, их иногда называют снимками (snapshot)
Dockerfile — это конфигурационный файл, в котором описаны инструкции, которые будут применены при сборке Docker-образа и запуске контейнера.
Docker Compose — инструмент для управления многоконтейнерными приложениями на основе Docker. Он позволяет запускать сразу несколько Docker-контейнеров, настроенных для работы друг с другом, через один конфигурационный файл — docker-compose.yml. В отличие от Docker, который работает с отдельными контейнерами, Docker Compose ориентирован на работу с группами контейнеров, объединёнными в сервисы.
Docker-контейнер — это лёгкий, автономный пакет программного обеспечения, в котором уже есть всё, что нужно для запуска приложения: код, системные утилиты, библиотеки и настройки. Проще говоря, это как небольшая коробка, где собраны все компоненты, чтобы приложение могло работать где угодно — главное, чтобы на системе был установлен Docker.
Docker Hub — облачный сервис реестра образов контейнеров, предоставляемый компанией Docker. Это центральный репозиторий, где разработчики и организации могут находить, загружать и распространять контейнерные приложения.
Установка Docker Desktop на Windows
Docker Desktop — это инструмент для работы с Docker-контейнерами на локальной машине. Он упрощает процесс разработки, тестирования и развёртывания приложений, позволяя взаимодействовать с контейнерами как через консоль, так и через графический интерфейс.
Переходим на официальный сайт https://docs.docker.com/desktop/ и устанавливаем программу Docker Desktop for Windows – x86_64
Я устанавливаю на Windows Server 2022 , вот так выглядит инсталяция.


В момент установки программа потребует перезагрузки.
После установки нас встречает приветвенное окно с предложением зарегистрироватся . Заведем себе аккаунт , это даст нам возможность пользоватся Docker Hub , в будущем мы сможем там хранить свои образы.
Первый запуск приложения Docker Desktop
После регистрации проверяем в трее что приложение Running , в моем случае оно не запустилось на Hyper-V. Если у вас приложение запустилось то можно пропустить этот момент.

Типичные ошибки
WSL need updating

Решается запуском в powershell команды
wsl --update
Если у вас windows 10\11 и вы выполнили команду и окно не уходит – установите все последние обновления и повторите снова команду.
Virtualization support not detected
Ошибка – Virtualization support not detected . Docker Desktop requires virtualization support to run. Contact your IT admin to enable virtualization or check system requirements.
Решение : у меня виртуальная машина на Windows Server 2022 , в гипервизоре Hyper-V . Включим вложенную виртуализацию для виртуальной машине на хосте, командой.
Set-VMProcessor -VMName "Windows Server 2022 Docker" -ExposeVirtualizationExtensions $true

После данной манипуляции сервис заработал.

Загружаем Image в Docker Desktop из Docker HuB
Давайте запустим первый image с названием welcome-to-docker

Кнопки
Pull – Скачать Image
Run – Запустить Image
Нажмем Pull и дождемся всплывающего окна

Во вкладке Images появится наш Image

После запускаем приложение и определяем его настройки с настройками ниже.

После запуска , проверяем приложение в браузере по адресу http://localhost:8081 , поздравляю вы запустили свой первый контейнер.
Создаем свой Image на основе Docker File
Создадим папку C:\Docker\Phyton , в ней создадим 2 файла Dockerfile , script.py
script.py
print("TEST 1")
print("TEST 2")
print("TEST 3")
Dockerfile
FROM python:3.14.0rc3-alpine3.22
WORKDIR /app
COPY script.py /app/script.py
ENTRYPOINT ["python","script.py"]
FROM – выбор образа из DockerHub по тагу

WORKDIR – рабочая папка в образе
COPY – скопировать файл в образ
ENTRYPOINT – директива в Dockerfile, которая определяет команду, которую контейнер должен выполнить при запуске
Выполняем в powershell
PS C:\Docker\Phyton> docker build -t phyton .
После билда создаем контейнер

Проверяем контейнер

Ура наш скрипт выполнился.
