NetworkAdmin.ru
4.78K subscribers
224 photos
26 videos
2 files
511 links
Авторский блог про сетевое и системное администрирование.

Сайт: networkadmin.ru
Реклама: @dad_admin
Биржа: https://telega.in/c/networkadminru
Download Telegram
🐳 Команды Docker для начинающих

Эти команды Docker дают новичкам быстрый старт по работе с контейнерами.

🖥 Открыть статью

#docker

🧑‍💻 NetworkAdmin | ⚙️ EasyTools
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3
🖥 Docker на Windows Subsystem Linux (WSL2)

Установка Docker Engine в WSL2 позволяет использовать контейнеризацию на Windows 10 и 11 без необходимости установки Docker Desktop. Это полезно для пользователей редакций Windows Home, где Docker Desktop недоступен.

📍 Преимущества использования Docker в WSL2:

Совместимость с Windows Home: Docker Engine работает в WSL2 даже на домашних редакциях Windows.
Экономия ресурсов: Отсутствие необходимости в виртуальных машинах Hyper-V снижает потребление оперативной памяти и дискового пространства.
Отсутствие лицензионных ограничений: Docker Engine в WSL2 не требует дополнительной лицензии для коммерческого использования.


📍 Шаги по установке Docker в WSL2:

1️⃣ Проверьте наличие установленного дистрибутива WSL2 и убедитесь, что используется версия WSL2:


wsl --list


wsl --set-default-version 2```

2️⃣ Запустите дистрибутив Linux (например, Ubuntu):


wsl.exe


3️⃣ Обновите пакеты и установите Docker Engine:


sudo apt-get update && sudo apt-get upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh


Предупреждения об установке Docker в среде WSL можно игнорировать.

4️⃣ Добавьте текущего пользователя в группу docker для использования Docker без sudo:


sudo usermod -aG docker $USER


5️⃣ Проверьте успешность установки:


docker --version
docker compose version


6️⃣ Настройте автоматический запуск Docker: Проверьте, включен ли systemd:


cat /etc/wsl.conf


Если нет, добавьте следующие строки:


[boot]
systemd=true


Затем активируйте сервис Docker:


sudo systemctl enable --now docker.service
systemctl status docker.service


7️⃣ Проверьте работу Docker:


docker run hello-world


При успешном выполнении вы увидите приветственное сообщение от Docker.

#docker #windows #WSL2

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
📱 Hadolint - линтер, который реально помогает

Если вы регулярно пишете Dockerfile'ы, следует добавить в свой арсенал Hadolint - это линтер, который проверяет как синтаксис, так и best practices. Он поможет выявить ошибки, неточности и неочевидные нюансы на этапе написания. В том числе - проверит shell-команды с помощью правил из ShellCheck.

Hadolint можно использовать:

Локально (через Docker или бинарник)
Через онлайн-версию

▪️ Пример 1. Go + Alpine


FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN go mod tidy && \
CGO_ENABLED=0 GOOS=linux go build -o app .

FROM alpine:3.19
RUN apk add --no-cache ca-certificates
WORKDIR /root/
COPY --from=build /app/app .
CMD ["./app"]


Проверка:


docker run --rm -i hadolint/hadolint < Dockerfile


Вывод Hadolint:

DL3007: Не используйте latest, всегда указывайте версию (например, alpine:3.19)
DL3018: Указывайте конкретные версии пакетов при apk add - это улучшает воспроизводимость сборки

▪️ Пример 2. Debian + Apache


FROM debian:bookworm
RUN apt-get update && \
apt-get install -y --no-install-recommends apache2 && \
apt-get clean && rm -rf /var/lib/apt/lists/*
EXPOSE 80 443
VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]


Hadolint замечает:

DL3008: Указывайте точные версии пакетов (например, apache2=2.4.57-1)
DL3009: Чистите списки apt-пакетов после установки
DL3015: Используйте --no-install-recommends, чтобы не тащить лишнее

🌟 Зачем это нужно?

latest, без версий, без очистки - всё это может привести к нестабильной сборке. Особенно при CI/CD. Линтер Hadolint позволяет быстро выявить подобные места, не дожидаясь багов в проде.

⚙️ Установка локально:


brew install hadolint # macOS
sudo apt install hadolint # Ubuntu (через snap или вручную)


Или через Docker:


docker run --rm -i hadolint/hadolint < Dockerfile


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

#Docker #Hadolint

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🧑‍💻 Отладка контейнеров без инструментов

Иногда нужно что-то быстро продебажить внутри контейнера: посмотреть процессы, сделать ping, проверить DNS или снять tcpdump. Но чаще всего внутри контейнера нет вообще ничего, кроме самого приложения.

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

▪️ Пример использования. Создадим контейнер с Nginx, где нет даже ps:


docker run --name nginx -d -p 8080:80 nginx
docker exec -it nginx bash
ps axf

bash: ps: command not found


Теперь подключаем Network-Multitool к тому же namespace, где работает контейнер Nginx:


docker run --rm -it \
--network=container:nginx \
--pid container:nginx \
wbitt/network-multitool:alpine-extra bash


Проверим процессы:


ps axf
PID TTY STAT TIME COMMAND
47 pts/0 Ss 0:00 bash
60 pts/0 R+ 0:00 \_ ps axf
1 ? Ss 0:00 nginx: master process nginx -g daemon off;
29 ? S 0:00 nginx: worker process
30 ? S 0:00 nginx: worker process



Теперь у вас есть все необходимое: ping, dig, curl, tcpdump, netcat, iftop, mysql, git, tshark и многое другое.

▪️ Варианты сборок

alpine-extra - расширенная версия (максимум инструментов, включая tshark, ab, postgresql-client, git и др.).
alpine-minimal - легкая сборка, только базовые сетевые утилиты.

#docker #debug

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5
📱 Windows в контейнере

На GitHub есть готовый способ запустить windows прямо в контейнере docker, без ручной настройки виртуалок. Все автоматизировано и работает поверх KVM. Ссылка: https://github.com/dockur/windows

▪️ Первые шаги

Разворачивать все на виртуальной машине с включенной вложенной виртуализацией. Выставляется тип процессора в host и на этом все. Дальше - стандартный старт:


git clone https://github.com/dockur/windows
cd windows
docker compose up


Контейнер создался и попытался загрузить образ windows 11. Но тут ошибка: microsoft заблокировала скачивание ISO с моего IP. Выход есть - можно скачать ISO вручную и передать контейнеру, но можно и проще: переключить версию на windows 10.

▪️ Настройка версии Windows. В файле docker-compose.yml достаточно задать переменную окружения:


version: "3"
services:
windows:
environment:
VERSION: "win10"


После этого запускаем снова:


docker compose up


Контейнер скачивает ISO Windows 10, разворачивает его и устанавливает систему в автоматическом режиме. Через 30 минут будет готовая, неактивированная, но полностью легальная Windows.

▪️ Доступ и управление. За установкой можно наблюдать через веб-интерфейс (порт 8006):


http://<ip_сервера>:8006


После установки доступ к системе:

через браузер (встроенный VNC),
или по RDP (пользователь docker, пароль — пустой).

▪️ Ресурсы по умолчанию. Контейнеру выделяется:

2 CPU
4 GB RAM
64 GB диска

Все параметры можно менять в environment. Важно следить за свободным местом!

▪️ Итог

Не нужно вручную поднимать виртуалки, скачивать ISO или прописывать драйверы. Просто запускаете контейнер и получаете готовую Windows, работающую поверх KVM. Docker тут используется не ради контейнеризации, а ради автоматизации всего процесса.

#docker #windows

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍17🔥3🗿1
🧑‍💻 Docker шпаргалка для ежедневной работы

▪️ Установка Docker


curl -o - https://get.docker.com | bash -


▪️ Работа с контейнерами

Запустить контейнер как службу (автостарт, проброс порта)


docker run -d -p 80:80 --restart always --name nginx-proxy nginx


Список контейнеров


docker ps # только запущенные
docker ps -a # все


Удаление контейнера


docker rm nginx-proxy # остановленного
docker rm -f nginx-proxy # принудительно


Остановить и удалить все контейнеры


docker stop $(docker ps -aq)
docker rm $(docker ps -aq)


▪️ Работа с образами

Просмотр и удаление


docker images
docker rmi nginx # удалить один
docker rmi $(docker images -aq) # удалить все


▪️ Внутри контейнера

Вход в bash


docker exec -it nginx-proxy bash


Логи


docker logs nginx-proxy
docker logs -n 100 nginx-proxy
docker logs -f nginx-proxy


Запущенные процессы


docker top nginx-proxy


▪️ Диагностика и мониторинг

Статистика ресурсов


docker stats nginx-proxy
docker stats prometheus exporter
docker stats prometheus --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"


Информация о контейнере


docker inspect nginx-proxy
docker inspect -f '{{ .NetworkSettings.Networks.bridge.IPAddress }}' nginx-proxy
docker inspect --format '{{json .Mounts}}' grafana | jq .


Проверить занимаемое место


docker system df


Очистить мусор


docker system prune


▪️ Работа с файлами

Копирование файлов


docker cp nginx-proxy:/etc/nginx/nginx.conf ~/nginx
docker cp ~/nginx/nginx.conf nginx-proxy:/etc/nginx


Экспорт файловой системы контейнера


docker export nginx-proxy -o ~/nginx-proxy.tar.gz


#docker

🧑‍💻 NetworkAdmin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17