среда, 7 апреля 2021 г.

Сколько докер занимает места на машине и как его "почистить"

Задумывались ли вы когда-нибудь, сколько места на вашей машине занимают не используемые докер-имиджи, докер-контейнеры и прочие артефакты, которые докер создает? Если вы ни разу их не проверяли и не разу не чистили докер, что можете быть удивлены, так как это запросто могут быть десятки гигабайт на вашем жестком диске.

Да и как обычно, если тексту с картинками вы предпочитаете видео, то вот моя видео-инструкция на YouTube.

После некоторого времени работы с докером в системе накапливаются разные докер-артефакты: images, containers, volumes которые вы не используете, и скорее всего, даже забыли об их существовании. Тем не мене они день за днем продолжают занимают место на вашем жестком диске. Фактически они вам больше не нужны, а если и когда-то понадобятся снова то докер их вам скачает из Docker Hub или создаст этот артефакт из Dockerfile. Если не держать эти артефакты под контролем, то дисковое пространство на вашей машине может исчерпаться довольно быстро.

В этой статье я расскажу о разных способах узнать о том, как расходует дисковое докер и как можно его "почистить".

Шаг 1. Анализ использования докером дискового пространства

Начнем с анализа того как докер использует дисковое пространство на твоей машине. Для этого есть специальная команда docker system df . Результат работы этой команды будет выглядеть где-то так.


Эта команда показывает 
1. Колонка  TYPE - какие артефакты (образы, контейнеры и пр) есть на твоей машине 
2. Колонки TOTAL и ACTIVE- сколько артефактов разных типов на машине. 
3. Колонка SIZE - сколько эти артефакты занимают места на машине.
4. Колонка RECLAIMABLE -  сколько места, можно было бы освободить, если удалить не используемые артефакты.

Команду docker system df  можно запустить с ключом "-v" чтобы увидеть сводную информацию по всем артефактам -  сколько занимает места каждый имидж, контейнер, что находится в билд-кэше.  В качестве работы этой команды я приведу скриншот с  виртуальной машины на qEmu, т.к. мой занимает несколько экранов :).

В общем-то не удивительно, что большую часть места на диске занимают именно докер-имиджи. Поэтому, чтобы освободить значительную часть дискового пространства, как правило, достаточно сфокусироваться именно на них. Получить точечную информацию о том, какие скачаны имиджи и сколько они занимают можно командой docker image ls (или docker images).


Рекомендую также попробовать эту команду с ключом "--all" которая также показывает скрытые промежуточные имиджи, которые остаются после того как команда "docker image build" завершается с какой-то ошибкой.


Шаг 2. Автоматическое удаление неиспользуемых докером артефактов 

После того как мы разобрались куда "уходит" место,  надо докер "почистить". Основная команда для освобождения места на машине это docker system prune. Она удаляет 
  1. все "болтающиеся" (dangling) докер-имиджи, 
  2. все остановленные докер-контейнеры, 
  3. неиспользуемые сетевые соединения
  4. чистит кэш сборки докер-имидже
Вот как выглядит результат использования этой команды




Стоит немного рассказать, что такое "болтающиеся" (dangling) докер-имиджи. Это неиспользуемые имиджи, у которых также нет тэга. Обычно они появляются  и остаются при неуспешных попытках сборки докер-имиджа. Посмотреть их можно командой docker images --filter "dangling=true".



У команды docker system prune есть ключ "--all" которая удалит все неиспользуемые имиджи (даже если у них есть тэг). Очевидно, что команда docker system prune --all позволяет освободить значительно больше места. Я как правило пользуюсь именно ей, т.к. обычно у меня нет докер-имиджей, которые бы я не мог скачать с Docker Hub или так или иначе собрать из Dockerfile.

Для удаления "болтающихся" и не используемых только докер-имиджей есть так же специальная команда docker image prune и у нее также есть флаг "--all". 

Шаг 3.  Чтобы еще такого удалить? Лайфхаки

В заключение хочу поделиться парой команд, которыми я так же пользуюсь когда мне надо что-то выборочно "почистить" в докере.

Удаление докер-имиджей по шаблону

Команда docker image ls (docker images) может принимать фильтр согласно которому она показывает имиджи. Этот фильтр можно так же использовать чтобы удалить докер-имиджи, которые соответствуют какому-либо критерию. Вот здесь можно прочитать подробнее про использование фильтров и есть много примеров. Используя этот фильтр и команду удаления докер-имиджей можно организовать удаление докер-имиджей по определенному условию. Так,  например, можно удалить "болтающиеся" имиджи при помощи фильтра в docker image ls/docker images

$ docker rmi $(docker images -f "dangling=true" -q)

Удаление всех докер-контейнеров

Иногда надо, например, удалить все контейнеры. В таком случае удобно воспользоваться вот такой командой
$ docker rm $(docker ps -aq)

В этой статье я поделился всем, чем пользуюсь сам при "чистке" докера. Если вы привыкли пользоваться  какими-то другими командами/способами, буду рад, если вы поделитесь ими в комментариях к этой статье.

суббота, 27 марта 2021 г.

Как посмотреть забытый пароль к WiFi при помощи командной строки Windows

Хочешь почувствовать себя хакером, поразить коллег, родных и знакомых? Тогда посмотри как можно "подсмотреть" сохраненный на пароль к Wi-Fi при помощи командной строки Windows. 

Да и как обычно, если тексту с картинками вы предпочитаете видео, то вот моя видео-инструкция на YouTube.


Шаг 1. Открываем командную строку Windows. Самый простой способ - это нажать клавиши Win+R, в появившемся окне ввести cmd и нажать Enter.



Шаг 2. В командной строке вводим команду netsh wlan show profiles которая показывает сохраненные на компьютере Wi-Fi сети


Я для примера, в этой статье выбрал имя первой сети, E-Flow Guest которую я придумал и специально создал для этой статьи.

Шаг 3. Находим в списке нужную вам сеть и копируем ее имя в буфер обмена. Далее командой   netsh wlan show profiles "<имя сети>" key=clear можно увидеть некоторые данные этой Wi-Fi сети, включая пароль (в строке Key Content и будет отображаться пароль к этой Wi-Fi сети).


В конце статьи хочу напомнить, что "подсматривать" пароль можно только на компьютерах которыми владеете и/или пользуетесь вы сами. На чужом компьютере это делать можно только с согласия того, кто им пользуется. В противном случае это не этично, да и не законно. 


среда, 10 февраля 2021 г.

docker swarm leave vs docker node rm

Обе эти команды по имеют очень похожее описание.  Вот описания этих команд из документации

$ docker node rm --hel

Usage:  docker node rm [OPTIONS] NODE [NODE...]

Remove one or more nodes from the swarm

 

$ docker swarm leave --help

Usage:  docker swarm leave [OPTIONS]

Leave the swarm


И действительно, по факту обе эти команды делают очень похожие вещи - удаляют нод из swarm, но тем не менее отличия менее отличия все же есть. Давайте их разберем.

  1. Команда docker swarm leave выполняется именно с той ноды, которая должна покинуть swarm. Причем, нод-менеджер не может покинуть swarm, его вначале надо перевести на позицию "рабочего" (worker). После выполнения команды swarm leave у нода все еще есть ID и он виден в списке нодов. 
  2. Команда docker node rm выполнятся только из ноды с ролью менеджера. Причем, при попытке выполнить эту команду над активным нодом, мы получаем сообщение, что нод вначале должен покинуть (leave) swarm. 

Error response from daemon: rpc error: code = FailedPrecondition desc = node ijcmw84ypkt9dx9j9wmk9zi1h is not down and can't be removed

Тем не менее активный нод, все же можно удалить, применив ключ force но таски которые исполняются на этом ноде не успеют  корректно завершиться.

По итогу "православный" алгоритм выглядит так (рассмотрим на примере кластера из 5 нодов, будем удалять нод с именем manager3)


1. Так как нод который должен покинуть swarm - имеет роль  manager, его надо вначале перевести в разряд рабочих ( worker node)



2. Затем на  ноде, который должен покинуть swarm выполняется команда docker swarm leave


3. Нод уже не в swarm и сервисы не будут его использовать для запуска задач. При этом у него все еще есть ID и он виден в списке нодов. 


4. И в конце, нод удаляется из списка нодов командой docker node rm


Вернуть нод в  swarm можно как обычно, командой docker swarm join.


суббота, 23 января 2021 г.

Как дать кликабельную ссылку на свой сайт в своем профиле в TikTok (TikTok Bio)

Дать ссылку на Instagram или YouTube канал довольно просто, а вот чтобы оставить кликабельную ссылку надо немного повозиться. Вот, например, так, как я это сделал в своем профиле. Вы можете написать любой текст в своем профиле, но добавить кликабельную ссылку можно только (по крайней мере пока) в бизнес-аккаунте.


Шаг 1. На страничке своего профиля TikTok нажмите на многоточие в правом верхнем углу 


Шаг 2. Вы перейдете на страницу "Настройки и конфиденциальность". Здесь надо выбрать пункт "Управление аккаунтом"

Шаг 3. Прежде чем переключиться на бизнес-аккаунт вначале надо с личного аккаунта переключиться на Pro. На странице "Управление аккаунтом" надо выбрать пункт "Переключиться на Pro-аккаунт"
Шаг 4. Есть два варианта Pro-аккаунта "Автор" и "Бизнес". Т.к. ссылку на веб-сайт можно указать только в бизнес-аккаунте этот вариант и надо выбрать.

Шаг 5. После этого мы попадаем на "Выбор категории". Выбирайте категорию, которая больше всего подходит к вашему контенту, но долго не заморачивайтесь, т.к. ее всегда можно поменять позже. Затем нажимайте кнопку "Далее". Переключение аккаунта занимает пару секунд и по окончанию TikTok поприветствует вас с переходом на бизнес-аккаунт. В этом окне нажмите "Изменить профиль"

Шаг 6. И вы попадете на экран, ге можно указать нужную вам ссылку в поле "Веб-сайт"


Вот и все. После этого вы должны будете получить кликабельную ссылку в своем профиле.


воскресенье, 10 января 2021 г.

Виртуальная машина QEMU с Linux (Ubuntu) на Windows 10

В прошлой статье я рассказывал про создание и запуск виртуальной машины при помощи QEMU на MacOS, а в этот раз давайте рассмотрим установку Linux на Windows 10 на основе QEMU. Да и как обычно, если тексту с картинками вы предпочитаете видео, то вот мой обзор QEMU на YouTube.


Шаг 1. Устанавливаем QEMU

С официального сайта QEMU можно скачать инсталлятор для Windows. Проверить установилась ли корректно программа, можно запросив версию QEMU следующей командой

qemu-system-x86_64 –version

Если установка программы прошла успешно, то вы увидите что-то вроде такого сообщения


Шаг 2. Прописываем QEMU в переменные окружения

Чтобы удобнее было пользоваться программой я рекомендую прописать путь, где была установлена программа в переменные окружения. В моем случае это “c:\Program Files\qemu”.
Проще всего это сделать так. В меню “Start/Пуск” написать “env” и выбрать “Edit environment variables for your account”


Выберите переменную Path и нажмите кнопку “ Edit..”

В появившемся окне нажмите кнопку “New” и добавьте путь к QEMU

Шаг 3. Включаем Windows Hypervisor Platform 

В меню Start/Пуск напишите “windows features”. Выберите пункт “Turn Windows features on or off”

В появившемся окне, в списке найдите и убедитесь, что помечен пункт “Windows Hypervisor Platform”

Шаг 4. Скачиваем iso-файл дистрибутива Linux

Для инсталляции Linux на виртуальную машину потребуется ее дистрибутив в формате ISO, который можно скачать с официального сайта. Я буду ставить Ubuntu Desktop

Шаг 5. Создаем виртуальную машину

Основные приготовления сделаны. Теперь переходим к созданию виртуальной машины. Первым делом надо создать папку для виртуальной машины. Для удобства работы, скопируйте в нее скачанный ранее iso-файл с Ubuntu. Файл диска виртуальной машины создаётся командой

qemu-img create -f qcow2 ubuntu-20.10-desktop-amd64.qcow2 15G

Эта команда создаст файл виртуальной машины с именем ubuntu-20.10-desktop-amd64.qcow2 в формате QCOW2 на 15 Гб. Изначально файл не будет занимать сразу 15 Гб, а будет значительно меньше однако его предел - 15 Гб. Впрочем, это значение можно будет изменить позже.

Шаг 5. Устанавливаем Ubuntu

После того, как файл диска для виртуальной машины создан можно приступать к инсталляции Ubuntu. Для этого запустим виртуальную машину с подключенным iso-образом Ubuntu.

qemu-system-x86_64 ^
-machine type=q35,accel=whpx ^
-smp 2 ^
-hda ubuntu-20.10-desktop-amd64.qcow2 ^
-cdrom ubuntu-20.10-desktop-amd64.iso ^
-m 4G ^
-vga virtio ^
-usb ^
-device usb-tablet ^
-display default,show-cursor=on

Что означают параметры этой команды
  • machine - Эмулируемая машина и тип акселератора. q35 - это один из последних типов машин, а whpx - это акселератор для Windows10.
  • smp - Число процессоров для виртуальной машины
  • m - Размер оперативной памяти для виртуальной машины
  • hda - Ссылка на файл диска
  • cdrom - Ссылка на ISO-файл
  • vga - Графическая карта
  • usb - Разрешает доступ к  USB-порту
  • device - Добавляем "usb-tablet" как устройство ввода, иначе мышь может не заработать
  • display - Включаем отображение курсора мыши на экране. Отключено по умолчанию.
После старта виртуальной машины запустится инсталлятор Ubuntu. По завершению система предложит перегрузиться.


Вместо этого лучше перейти в терминал, в котором запускали виртуальную машину и выйти из QEMU клавишами Сtrl+C.

Шаг 6. Запускаем виртуальную машину

Виртуальная машина с Ubuntu полностью готова, только теперь для запуска нам не нужна ссылка на iso-образ Ubuntu. Поэтому немного модифицируем команду запуска виртуальной машины, убрав из нее параметр cdrom. 

qemu-system-x86_64 ^
-machine type=q35,accel=whpx ^
-smp 2 ^
-hda ubuntu-20.10-desktop-amd64.qcow2 ^
-m 8G ^
-vga virtio ^
-usb ^
-device usb-tablet ^
-display default,show-cursor=on


Команда для запуска достаточно объёмная, советую скопировать ее в bat-файл и хранить его в том же директории где и файл диска виртуальной машины. Так будет удобнее запускать.



среда, 30 декабря 2020 г.

Инсталлируем Linux на MacOS при помощи QEMU

В этой статье я хочу рассказать и показать как создать  и запускать виртуальную машину с Ubuntu 20l.10 при помощи QEMU на MacOs (BigSur).


Что такое QEMU

Quick EMUlator (QEMU) это эмулятор "железа" с открытым исходным кодом (лицензия GPLv2), который для ускорения работы виртуальных машин может использовать различные акселераторы. На Linux это KVM, который встроен в ядро операционной системы, На  MacOS - это HVF. На сайте QEMU утверждается, что производительность виртуальных машин на основе QEMU близка к производительности таких машин на физическом железе. Давате проверим :).

Если тексту с картинками вы предпочитаете видео, то вот мой обзор QEMU на YouTube.


Устанавливаем QEMU

Установить QEMU на MacOS можно разными способами. У меня стоит Homebrew, с его помощью я и установил QEMU 

brew install qemu

Проверить, установлен ли QEMU можно запросив версию программы. 

qemu-system-x86_64 –version 

Если установка закончилась успешно, то вы получите что-то вроде такого сообщения.

Дополнительное приседание на Big Sur

Идем дальше. Для корректной работы QEMU на Big Sur его надо  вначале "пропатчить".Для этого создайте файл entitlements.xml с таким вот содержимым

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

    <key>com.apple.security.hypervisor</key>

    <true/>

</dict>

</plist>


Далее надо подписать qemu-system-x86_64 этим файлом

codesign -s - --entitlements entitlements.xml --force /usr/local/bin/qemu-system-x86_64

Теперь qemu-system-x86_64 готова для работы на Big Sur


Создание виртуальной машины с Ubuntu 20.10

Теперь переходим к созданию виртуальной машины для Ubuntu. Для инсталляции Ubuntu на виртуальную машину потребуется ее дистрибутив в формате ISO,  который можно скачать с официального сайта. Предположим, что он у нас находится в директории qemu-ubunut20. Все последующие команды я буду выполнять из этой директории. 

Далее для инсталляции Ubuntu нам потребуется создать файл диска виртуальной машины, где Ubuntu будет установлена. Я буду использовать формат QCOW2 и создам файл на 15 Гб. Он не будет занимать сразу 15 Гб, он изначально будет значительно меньше однако его предел - 15 Гб. Это значение можно будет изменить позже. Для создания файла диска воспользуемся командой

qemu-img create -f qcow2 ubuntu-20.10-desktop-amd64.qcow2 15G


Установка Ubuntu

Как только файл диска готов можно запустить виртуальную машину с подключённым QCOW2 диском и ISO-образом Ubuntu вот такой вот командой

qemu-system-x86_64 \

    -machine type=q35,accel=hvf \

    -smp 2 \

    -hda ubuntu-20.10-desktop-amd64.qcow2 \

    -cdrom ./ubuntu-20.10-desktop-amd64.iso \

    -m 4G \

    -vga virtio \

    -usb \

    -device usb-tablet \

    -display default,show-cursor=on

Давайте разберем параметры этой команды

  • machine - Эмулируемая машина и тип акселератора. q35 - это один из последних типов машин, а HVF - это акселератор для MacOS.
  • smp - Число процессоров для виртуальной машины
  • m - Размер оперативной памяти для виртуальной машины
  • hda - Ссылка на файл диска
  • cdrom - Ссылка на ISO-файл
  • vga - Графическая карта
  • usb - Разрешает доступ к  USB-порту
  • device - Добавляем "usb-tablet" как устройство ввода, иначе мышь может не заработать :)
  • display -  Включаем отображение курсора мыши на экране. Отключено по умолчанию.

После загрузки виртуальной машины запустится инсталлятор Ubuntu. 

По окончанию инсталляции Ubuntu система предложит перезагрузиться. Вместо этого лучше закройте терминал с QEMU по Ctrl+C на MacOS. 


Запуск Ubuntu

Теперь для запуска виртуальной машины нам больше не нужен файл ISO-образа Ubuntu. По этому немного модифицируем команду запуска виртуальной машины, убрав из нее параметр cdrom. Команда для запуска достаточно объёмная, советую скопировать ее в sh-файл и хранить его в том же директории где и  файл виртуальной машины. Так будет удобнее запускать. Для этого создаем файл скрипта командой 

touch run.sh

Копируем содержимое в файл run.sh

qemu-system-x86_64 \

    -machine type=q35,accel=hvf \

    -smp 2 \

    -hda ubuntu-20.10-desktop-amd64.qcow2 \

    -m 4G \

    -vga virtio \

    -usb \

    -device usb-tablet \

    -display default,show-cursor=on


Далее надо сделать файл скрипта исполняемым

sudo chmod +x run.sh

Теперь можно запустить скрипт для старта виртуальной машины

./run.sh



воскресенье, 18 октября 2020 г.

Как запустить Linux GUI приложения из докер-контейнера



Признаюсь сразу,  мне было интересно попробовать это из "спортивного" интереса но я не вижу большого практического смысла в этом. В таком случае использование виртуальной машины считаю более целесообразным. В статье я расскажу про самый простой способ – запуск докер-контейнера из специально подготовленного докер-имиджа с Docker Hub. 

Если тексту с картинками вы предпочитаете видео, то вот мой обзор на YouTube.



Принцип работы с такими докер-контейнерами единый
  1. Запускаем подходящий докер-контейнер. В статье я опишу несколько из них.
  2. Подключаем приложение для удаленной работы с рабочим столом системы, работающей в контейнере. Это может быть VNC или  Remote Desktop. На Маке VNC клиент встроен в Finder, а Remote Desktop можно скачать из AppStore. На Windows ситуация обратная. В большинстве случаев приложение Remote Desktop входит в состав операционной системы, а VNC клиента можно скачать.
Рассмотрим работу с таким контейнером на примере одного из самых функциональных докер-имиджей - https://hub.docker.com/r/manishfoodtechs/xfcefulldesktop_ubuntu20.4

Данный имидж базируется на ubuntu 20.4 и имеет из коробки больше всего предустановленного софта – Firefox, LibreOffice и много других утилит. Автор докер-имиджа предлагает работать с контейнером через RDP. По тому команда для запуска контейнера будет иметь следующий вид. 

docker run -it -p 9096:3389 -e 3389 --shm-size 2g manishfoodtechs/xfcefulldesktop_ubuntu20.4

В этой команде «пробрасывается» порт для работы с контейнером через RDP – 3389. Поэтому, после старта контейнера нужно запустить сервер удаленного рабочего стола на основе протокола RDP

/etc/init.d/xrdp restart


Все. Теперь можно запускать Remote Desktop и подключаться к рабочему столу в контейнере. 
Я  приведу скриншоты с Remote Desktop на Маке. При подключении Remote Desktop пожалуется, что мне знает такого компьютера. Для продолжения нажмите кнопку Connect.
В качестве имени компьютера (PC Name) надо указать 127.0.0.1:9096, Username: root и Password: 123456

Не пугайтесь, иконки в системе стилизованы под Windows. Не знаю зачем, но даже иконка Firefox сделана как иконка Microsoft Edge, a иконки приложений LibreOffice стилизованы под Microsoft Office.

Можно в команду запуска докер-контейнера добавить ключ  -v $(pwd):/host  и тогда  можно  работать  с файлами из текущего директория их докер-контейнера. Полностью команда для запуска докер-контейнера будет выглядеть так

docker run -it -p 9096:3389 -e 3389 -v $(pwd):/host --shm-size 2g manishfoodtechs/xfcefulldesktop_ubuntu20.4

Если по каким-то причинам вы не хотите работать через RDP, то можно настроить контейнер для работы через VNC. В простейшем варианте, чтобы не делать свой докер-имидж это может выглядеть так.

Запускаем контейнер с открытием дефолтного порта для VNC – 5901 (вместо 3389)

docker run -it -p 5901:5901 -v $(pwd):/host --shm-size 2g manishfoodtechs/xfcefulldesktop_ubuntu20.4

Далее, после старта контейнера в контейнере через терминал устанавливаем VNC server

sudo apt install tightvncserver
 
и запускаем VNC server

sudo vncserver

VNC server при запуске попросит создать и подтвердить пароль для удаленного доступа к рабочему столу. На вопрос  "Would you like to enter a view-only password (y/n)?". Отвечаем “n”.

Все приготовления сделаны. Теперь можно подключать VNC клиента. На Маке VNC клиент встроен в Finder (Go->Connect to Server). В качестве стоки подключения нужно указать vnc://127.0.0.1:5901
В окне ввода пароля указываем тот пароль, который придумали на этапе запуска vncserver.
Если вам понравилась эта тема, то на Docker Hub есть и другие имиджи на Linux c GUI которые стоит попробовать. Могу посоветовать 
  1. https://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc - есть разные версии Ubuntu. 20, 18, 16, 14. Что весьма удобно, с десктопом можно как через VNC клиента, так и есть веб-интерфейс, т.е. можно работать из браузера.
  2. https://hub.docker.com/r/queeno/ubuntu-desktop/ - «голая» Ubunut 16.04. Работа через VNC
  3. https://hub.docker.com/r/cyverse/ubuntu18-xfce-desktop - «голая» Ubunut 18.04. Работать с контейнером можно  как при помощи веб-интерфейса, так и через VNC  клиента.