Что делать разработчику если РОСКОМНАДЗОР в край офанареет и закроет доступ к репозиториям Docker? Или может офанареть США и отрубить западный сегмент интернета от нас/всё заблокировать/нагадить. Немного подготовившись, вы можете принести все необходимое на USB-накопителе и установить полностью функциональный стек Docker в автономном режиме. В этом руководстве вы узнаете, как предварительно загрузить Docker Engine (с помощью Docker Compose) для системы Debian Linux, взять несколько общих образов и настроить всё это на сервере Debian с воздушной загрузкой. Давайте приступим!
Шаг 1: Предварительная загрузка Docker Engine и Compose (на машине с Интернетом)
Во-первых, вам нужны Docker Engine и Docker Compose, готовые к установке в автономном режиме. Мы загрузим их на машину Debian с интернетом, а затем упакуем.
1. Установите движок Docker на подготовительную машину
На системе Debian с интернетом выполните эти команды для установки Docker:
sudo apt update
sudo apt install -y curl
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Это установит движок Docker Engine. Проверьте, работает ли он:sudo docker --version
2. Скачать Docker Compose
Docker Compose - это отдельный инструмент. Возьмите бинарный файл:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Проверьте c `docker-compose --version`
3. Упакуйте Docker для автономного использования
Экспорт установленных пакетов Docker: `sudo apt-get download docker.io docker-doc`
Это создаст .deb файлы (например, docker.io_*.deb) в вашем текущем каталоге.
Скопируйте бинарный файл Compose: `cp /usr/local/bin/docker-compose .`
Поместите эти файлы (docker.io_*.deb, docker-doc_*.deb, docker-compose) на USB-накопитель в папку, например, docker_install.
Шаг 2: Предварительная загрузка образов Docker
Далее возьмите необходимые образы: golang:alpine, postgres:alpine, dpage/pgadmin4, traefik, humenius/traefik-certs-dumper:latest, portainer/portainer-ce, и alpine:latest. Делайте это на той же машине с интернетом.
1 Извлеките образы
Выполните эти команды:
docker pull golang:alpine
docker pull postgres:alpine
docker pull dpage/pgadmin4
docker pull traefik:latest
docker pull humenius/traefik-certs-dumper:latest
docker pull portainer/portainer-ce
docker pull alpine:latest
2 Сохраняйте изображения в файлы
Экспортируйте каждый образ в файл .tar:
docker save -o golang_alpine.tar golang:alpine
docker save -o postgres_alpine.tar postgres:alpine
docker save -o pgadmin4.tar dpage/pgadmin4
docker save -o traefik.tar traefik:latest
docker save -o traefik_certs_dumper.tar humenius/traefik-certs-dumper:latest
docker save -o portainer_ce.tar portainer/portainer-ce
docker save -o alpine.tar alpine:latest
Загрузите эти .tar-файлы на USB-накопитель в папку docker_images.
Шаг 3: Создайте самоподписные сертификаты
Поскольку для Let's Encrypt нет интернета, мы будем использовать самоподписанные сертификаты для HTTPS. Сделайте это на подготовительной машине:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=mywebsite.local"
Это создаст cert.pem (сертификат) и key.pem (закрытый ключ), действительные в течение года. Скопируйте их на USB в папку certs.
Шаг 4: Подготовьте файл Docker Compose
Создайте файл docker-compose.yml, чтобы связать все воедино. Вот простой пример:
version: "3"
services:
traefik:
image: traefik:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./traefik.yml:/etc/traefik/traefik.yml
- ./cert.pem:/etc/traefik/cert.pem
- ./key.pem:/etc/traefik/key.pem
- /var/run/docker.sock:/var/run/docker.sock
postgres:
image: postgres:alpine
environment:
- POSTGRES_PASSWORD=mysecretpassword
pgadmin:
image: dpage/pgadmin4
labels:
- "traefik.http.routers.pgadmin.rule=Host(`pgadmin.local`)"
- "traefik.http.services.pgadmin.loadbalancer.server.port=80"
- "traefik.http.routers.pgadmin.tls=true"
environment:
- PGADMIN_DEFAULT_EMAIL=admin@local.com
- PGADMIN_DEFAULT_PASSWORD=admin
goapp:
image: golang:alpine
command: sh -c "echo 'Hello from Go' && sleep 3600"
labels:
- "traefik.http.routers.goapp.rule=Host(`goapp.local`)"
- "traefik.http.services.goapp.loadbalancer.server.port=8080"
- "traefik.http.routers.goapp.tls=true"
certs-dumper:
image: humenius/traefik-certs-dumper:latest
volumes:
- ./certs:/output
portainer:
image: portainer/portainer-ce
volumes:
- /var/run/docker.sock:/var/run/docker.sock
labels:
- "traefik.http.routers.portainer.rule=Host(`portainer.local`)"
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
- "traefik.http.routers.portainer.tls=true"
alpine:
image: alpine:latest
command: sh -c "echo 'Alpine is here' && sleep 3600"
Также создайте файл traefik.yml:
http:
routers:
to-https:
rule: "Host(`mywebsite.local`)"
entryPoints:
- http
middlewares:
- https-redirect
middlewares:
https-redirect:
redirectScheme:
scheme: https
entryPoints:
http:
address: ":80"
https:
address: ":443"
tls:
certificates:
- certFile: /etc/traefik/cert.pem
keyFile: /etc/traefik/key.pem
providers:
docker:
exposedByDefault: false
Сохраните оба файла на USB в папке compose.
Шаг 5: Настройка сервера Debian с воздушной загрузкой
Теперь отнесите USB на сервер с воздушной завесой и настройте его.
1. Установите движок Docker Engine
Скопируйте папку docker_install с USB на сервер (например, /home/user/docker_install). Затем:
cd /home/user/docker_install
sudo dpkg -i *.deb
sudo apt-get install -f # Fixes any missing dependencies already in Debian
Проверьте: `sudo docker --version`
2. Установите Docker Compose
Скопируйте docker-compose с USB на сервер:
sudo cp /path/to/usb/docker_install/docker-compose /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Проверьте: `docker-compose --version`
3. Загрузите образы Docker
Скопируйте папку docker_images на сервер (например, /home/user/docker_images). Загрузите каждый образ:
cd /home/user/docker_images
sudo docker load -i golang_alpine.tar
sudo docker load -i postgres_alpine.tar
sudo docker load -i pgadmin4.tar
sudo docker load -i traefik.tar
sudo docker load -i traefik_certs_dumper.tar
sudo docker load -i portainer_ce.tar
sudo docker load -i alpine.tar
4. Настройка сертификатов и файлов композиции
Скопируйте папки certs и compose на сервер (например, /home/user/app):
mkdir /home/user/app
cp -r /path/to/usb/certs /home/user/app/
cp -r /path/to/usb/compose/* /home/user/app/
5. Начните все
Перейдите в папку с приложением и запустите его:
cd /home/user/app
sudo docker-compose up -d
Шаг 6: Проверка
После запуска протестируйте свои службы локально:
- Используйте curl http://localhost или curl https://localhost (с параметром --insecure для самоподписанных сертификатов).
- Добавьте записи в /etc/hosts на сервере (например, 127.0.0.1 pgadmin.local), чтобы проверить маршрутизацию на основе домена.
- Зайдите на portainer.local:9000 в браузере (если у вас есть графический интерфейс), чтобы управлять Docker.
Примчание:
Фиксированные IP-адреса: Если IP-адреса контейнеров меняются, используйте пользовательскую сеть Docker в файле docker-compose.yml:
networks:
mynet:
ipam:
config:
- subnet: "172.20.0.0/16"
Вот и все! У вас есть стек Docker, работающий в среде с воздушной завесой, с маршрутизацией Traefik и HTTPS. Он портативен, прост и готов к работе - просто возьмите с собой USB и следуйте за ним.