Контейнеризация. Docker
— На моем компе все работает.
— Отправим клиенту твой комп.
Что такое Docker
Вот обычная история: разработчик создает приложение, размещает код в репозитории и пишет инструкцию по развертыванию и запуску проекта. Другой разработчик клонирует этот репозиторий — и немедленно возникает проблема: проект будет развёрнут на другом компьютере (не таком, как у автора проекта) с собственной операционной системой (не такой, как у автора проекта), с собственными настройками (не такими, как у автора проекта). В довершении всего в операционной системе стоят какие-то пакеты, конфликтующие с пакетами нового проекта. В результате приложение не разворачивается и не работает.
Разработчик пишет автору: «твоё приложение не устанавливается» — и начинается долгое и мучительное выяснение причин. Автор приложения пишет «на моём компе всё работает», разработчик отвечает «присылай мне твой комп!».
Docker решает эти проблемы, фактически предоставляя возможность передать приложение «вместе с компьютером», если под словом «компьютер» подразумевать всё программное обеспечение, начиная от операционной системы и заканчивая виртуальным окружением и кодом самого проекта.
Помимо этого Docker даёт возможность запустить на одном физическом компьютере несколько таких «виртуальных компьютеров», в каждом из которых может быть своя уникальная операционная система и свои настройки.
Docker: виртуализация и изоляция
С виртуализацией вы знакомы: на удаленном сервере вы развернули полноценную операционную систему, и на том же сервере можно развернуть ещё несколько систем.
С изоляцией вы тоже знакомы: при разработке вы изолировали проекты друг от друга в виртуальных окружениях.
Docker объединяет оба эти подхода. Его задача — запуск приложений в изолированном окружении.
Сходные задачи решали при морских грузоперевозках. Требовалось доставлять грузы, разные по объему, по форме и по требованиям к условиям перевозки. Решением стало создание специальных стандартных контейнеров и специальных кораблей-контейнеровозов. Внешне контейнеры стандартизированы: у них одинаковый размер, одинаково расположены зацепы для подъёмного крана, предусмотрена возможность устанавливать их один на другой. А контейнеровозы спроектированы так, чтобы можно было предельно эффективно использовать грузовые палубы и максимально заполнить всё пространство корабля.
Ни на корабле, ни в порту никому не важно, что именно происходит внутри каждого контейнера: в одном может быть морозильная установка для транспортировки клубники, в другом — автоматический мини-завод, который не прекращает производство даже во время пути, в третьем — инопланетянин в привычной ему аргоновой атмосфере, а в четвёртом — дискотека.
В этом примере корабль — это операционная система на вашем компьютере или сервере. А Docker — инструмент для создания контейнеров, в которых работают ваши приложения.
Время строить контейнеры.
Установите на свой рабочий компьютер программу Docker.
Установка Docker на Windows и MacOS
Запустите его и следуйте инструкциям по установке. После установки вы увидите окно с сообщением Service is not running: программа установлена, но демон докера не запущен. Нажмите кнопку Start.
Если ваш компьютер не особо мощный или на диске мало свободного места — вы получите сообщение о нехватке памяти. Нужно немного перенастроить программу.
Нажмите OK, программа свернётся в трей. Найдите её иконку, правым кликом откройте меню, выберите Settings (на MacOS — Preferences), в открывшемся окне откройте закладку Resourses.
Ограничьте доступную оперативную память (поле Memory) и уменьшите выделенное дисковое пространство в поле Disk Image Size.
Если у вас есть диск, где много места — переназначьте директорию для хранения образов на этот диск (поле Disk image location), образы потребуют дискового пространства. Увеличьте значение в поле Swap — это размер «файла подкачки».
Вот пример настроек на компьютере с 4 гб оперативной памяти (Windows 10):
При небольшом объёме оперативной памяти на вашем компьютере вы можете столкнуться с ситуацией, что Docker при запуске опять выкинет сообщение о недостатке памяти: возможно, работающие программы отъели часть памяти и докеру ничего не осталось.
Закройте все программы и запустите Docker. После этого опять запускайте нужные приложения: Docker проверяет объём доступной памяти только при старте.
На вкладке General можно снять галочку Start Docker Desktop when you log in: тогда демон докера не будет запускаться при старте операционной системы и не будет отъедать память, если у вас её и так не много. Однако запускать демона придётся каждый раз вручную: для этого нужно вызвать приложение Docker Desktop из списка программ.
По завершении настройки нажмите Apply & Restart, Docker перезагрузится и заработает.
Установка Docker на Linux
Установка Docker на Linux организована иначе, чем на Windows или Mac.
Открывайте терминал — и поехали.
Для начала запустите команду удаления старых версий Docker. Скорее всего — их на вашем компьютере нет, но подстраховаться необходимо:
Скопировать кодBASH
sudo apt remove docker docker-engine docker.io containerd runc
Вывод будет примерно таким:
Скопировать кодBASH
E: Невозможно найти пакет docker-engine
Затем обновите индекс пакетов APT и установите пакеты, которые позволят APT загружать пакеты по протоколу https:
Скопировать кодBASH
sudo apt update
# обновить список пакетов
sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common -y
# установить необходимые пакеты для загрузки через https
Добавьте ключ GPG для подтверждения подлинности в процессе установки:
Скопировать кодBASH
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# ОК
apt-key добавляет ключ от репозиториев в систему. Ключи защищают репозитории от возможности подделки пакета.
Добавьте репозиторий Docker в пакеты apt:
Скопировать кодBASH
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Снова обновите индекс пакетов, потому что в APT добавлен новый репозиторий:
Скопировать кодBASH
sudo apt update
Теперь установите Docker:
Скопировать кодBASH
sudo apt install docker-ce -y
Эта команда установит Docker, запустит демон-процесс и активирует автоматический запуск при загрузке.
Проверьте, что Docker работает:
Скопировать кодBASH
sudo systemctl status docker
Теперь выполните команду sudo systemctl enable docker, чтобы докер-демон автоматически запускался при старте системы.
При проблемах с установкой можно выполнить скрипт, который выполнит все команды за вас:
Скопировать кодBASH
# эта команда скачает скрипт для установки докера
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh # эта команда запустит его
Готово, Docker установлен!