Эти команды Docker дают новичкам быстрый старт по работе с контейнерами.
#docker
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3
Установка Docker Engine в WSL2 позволяет использовать контейнеризацию на Windows 10 и 11 без необходимости установки Docker Desktop. Это полезно для пользователей редакций Windows Home, где Docker Desktop недоступен.
Совместимость с Windows Home: Docker Engine работает в WSL2 даже на домашних редакциях Windows.
Экономия ресурсов: Отсутствие необходимости в виртуальных машинах Hyper-V снижает потребление оперативной памяти и дискового пространства.
Отсутствие лицензионных ограничений: Docker Engine в WSL2 не требует дополнительной лицензии для коммерческого использования.
wsl --list
wsl --set-default-version 2```
wsl.exe
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 можно игнорировать.
sudo usermod -aG docker $USER
docker --version
docker compose version
cat /etc/wsl.conf
Если нет, добавьте следующие строки:
[boot]
systemd=true
Затем активируйте сервис Docker:
sudo systemctl enable --now docker.service
systemctl status docker.service
docker run hello-world
При успешном выполнении вы увидите приветственное сообщение от Docker.
#docker #windows #WSL2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Если вы регулярно пишете Dockerfile'ы, следует добавить в свой арсенал Hadolint - это линтер, который проверяет как синтаксис, так и best practices. Он поможет выявить ошибки, неточности и неочевидные нюансы на этапе написания. В том числе - проверит shell-команды с помощью правил из ShellCheck.
Hadolint можно использовать:
Локально (через Docker или бинарник)
Через онлайн-версию
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 - это улучшает воспроизводимость сборки
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Иногда нужно что-то быстро продебажить внутри контейнера: посмотреть процессы, сделать ping, проверить DNS или снять tcpdump. Но чаще всего внутри контейнера нет вообще ничего, кроме самого приложения.
В таких случаях идеально подходит специальный контейнер: Network-Multitool
Его также часто используют и в кубере - для отладки сетей, проверки маршрутов и соединений между подами.
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5
На 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.
docker-compose.yml достаточно задать переменную окружения:
version: "3"
services:
windows:
environment:
VERSION: "win10"
После этого запускаем снова:
docker compose up
Контейнер скачивает ISO Windows 10, разворачивает его и устанавливает систему в автоматическом режиме. Через 30 минут будет готовая, неактивированная, но полностью легальная Windows.
http://<ip_сервера>:8006
После установки доступ к системе:
через браузер (встроенный VNC),
или по RDP (пользователь docker, пароль — пустой).
2 CPU
4 GB RAM
64 GB диска
Все параметры можно менять в environment. Важно следить за свободным местом!
Не нужно вручную поднимать виртуалки, скачивать ISO или прописывать драйверы. Просто запускаете контейнер и получаете готовую Windows, работающую поверх KVM. Docker тут используется не ради контейнеризации, а ради автоматизации всего процесса.
#docker #windows
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍17🔥3🗿1
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17