В то время как настоящие разработчики активно используют в своей работе всякие продвинутые IDE с элементами искуственного разума — некоторым по прежнему хватает текстового редактора.
Нет, в самом деле, а что еще нужно? Несколько файлов с исходным кодом, Makefile для сборки всего этого, MidnightCommander чтобы копировать файлы туда-сюда и удобный текстовый редактор, например Vim.
А еще куча установленных пакетов типа gcc, make, cmake — в общем, настроенная и подготовленная среда, вплоть до указания желаемой цветовой схемы в редакторе.
И вот однажды так получилось, что удобный настроенный компьютер вдруг накрылся медным тазом: жесткие диски тоже выходят из строя.
Конечно, все самое ценное лежало в архивах, но вот рабочая среда…
Настройка на новом железе, доустановка недоустановленного, в общем куча совершенно лишней работы. И как от нее избавиться на будущее, делать дамп рабочего компьютера? Использовать настроенную виртуалку?
И оказалось, что для этого прекрасно подходит Docker. Во-первых, он есть и используется в работе — не надо ничего выдумывать и осваивать. Во-вторых, он не тормозит и не требует специальной поддержки на аппаратном уровне, и в третьих — всегда можно сделать готовый образ системы, который можно использовать на других компьютерах.
И в четвертых, если возникла необходимость во временной установке каких-то экзотических программ — всегда можно запустить «песочницу», поработать в ней и удалить, не волнуясь о том что где-то сломались зависимости и всё надо снова переустанавливать.
Конечно, кто знает что такое Docker вообще не поймет зачем рассказывать очевидные вещи, но оказывается в 2024 году существуют люди, которые вообще об этом ни разу не слышали, а если и слышали — то о запуске сервисов где-то там на серверах и о всяких строгих правилах создания контейнеров: минимальный обьем, ничего лишнего и т.д.
К черту правила, поехали:
Устанавливаем (всё — debian-style, тлетворное влияние Ubuntu):
sudo apt install docker.io
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Пусто. Здесь ничего нет. Попытаемся что-то создать:
docker run -ti debian
Unable to find image 'debian:latest' locally latest: Pulling from library/debian 53769c348e57: Pull complete Digest: sha256:17122fe3d66916e55c0cbd5bbf54bb3f87b3582f4d86a755a0fd3498d360f91b Status: Downloaded newer image for debian:latest root@f3fa3de53231:/#
Ок, скачали и запустили контейнер с Debian, в котором почти ничего нет. Вот его теперь и настраиваем под себя:
apt update
apt upgrade
apt install всё-самое-необходимое все-100500-пакетов
и выходим:
exit
Смотрим, что получилось:
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f3fa3de53231 debian "bash" 12 minutes ago Exited (0) 5 minutes ago gallant_morse
Контейнер создан, и теперь остановлен. Имя придумывается автоматически, но можно будет потом задать своё.
Сохраним его:
sudo docker commit gallant_morse my_toolbox
Всё, больше gallant_morse не нужен, создан новый образ my_toolbox.
Удаляем лишнее, запускаем новый контейнер, и сразу выходим:
sudo docker rm gallant_morse
sudo docker run -ti --name my_work1 my_toolbox
exit
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2f60aa370d90 my_toolbox "bash" 1 minutes ago Exited (0) 1 minutes ago my_work1
Создан новый контейнер my_work1, который сейчас выключен. Но его можно запустить:
sudo docker start my_work1
sudo docker ps
Теперь он появится в списке работающих процессов. И как с ним работать? Очень просто:
sudo docker exec -ti my_work1 /bin/bash
Всё, мы попадаем в контейнер, где находятся все рабочие программы. Монтируем сетевые диски — можно работать.
Нужно открыть еще один терминал — запускаем еще один. И еще. И сколько надо.
Не надоело еще писать везде sudo? Если надоело — делаем это последний раз:
sudo vim /etc/group
.... docker:x:121:my_username ....
Перезаходим в систему (открываем новое окно терминала) — всё, docker работает без sudo.
Все открытые терминалы к нему работают в одном контейнере, можно одновременно работать с разными файлами проекта и т.д.
Для чего так сложно, зачем нужно было два раза создавать контейнеры? А вот зачем:
Во-первых, теперь у нас есть образ my_toolbox, его можно экспортировать, сохранить и потом при необходимости запускать на других машинах:
docker save my_toolbox | gzip > my_toolbox.gz
gunzip my_toolbox.gz
docker load < my_toolbox
docker run ...
Во-вторых, можно легко и быстро создать временную песочницу:
docker run -ti --name tmp_bebebe my_toolbox
apt install something_terrible
rm -rf /*
docker rm tmp_bebebe
Или создать рабочую среду с подключением локальных каталогов:
docker run -ti -v /home/user/project/blablabla/work_dir:/work_dir --name blablabla my_toolbox
В общем, можно развлекаться как угодно. Это быстрее делать, чем запускать виртуальные машины с установкой ОС, да и работает оно быстрее.
Конечно, есть и другие решения для подобных задач — это просто один из вариантов.
ссылка на оригинал статьи https://habr.com/ru/articles/869134/
Добавить комментарий