Hvordan jeg flyttede min Docker-server til et nyt system

Migrering af Docker-containere kan virke udfordrende, men det er enkelt. Læs om, hvordan jeg flyttede mine containere til en ny server med få kommandoer og tålmodighed.
Har du nogensinde overvejet at flytte dine Docker-containere fra en server til en anden? Jeg fik for nylig lyst til at opgradere mit homelab og trække en gammel rack-mount server tilbage til fordel for et nyere, mere kraftfuldt system—men at flytte mine Docker-containere var en udfordring, jeg ikke var sikker på, hvordan jeg skulle tackle.
Det viste sig faktisk ikke at være så svært, og det var mere tidskrævende end skræmmende eller frustrerende. Flytningen kræver kun et par kommandoer og en masse tålmodighed (afhængig af hvor mange Docker-containere du kører). Så her er, hvordan jeg migrerede min Docker-server til et helt nyt system (uden at flytte selve den virtuelle maskine).
Flytning af Docker Hosts Behøver Ikke at Være Overvældende
I januar i år var det første gang, jeg migrerede Docker-containere. Jeg flyttede fra Unraid til en rigtig Docker-installation i en Ubuntu virtuel maskine. Det var faktisk en ret ligetil flytning, og jeg brugte de indbyggede backupmetoder til nogle apps og startede andre fra bunden.
Men jeg besluttede for nylig at flytte min virtuelle Docker-host fra en server til en anden. Mens jeg overvejede at flytte den virtuelle maskine selv, besluttede jeg at tage en anden rute og migrere Docker-installationen til en spritny virtuel maskine.
Det var temmelig overvældende at tænke på. Jeg skulle have mine Docker-containere nede i et stykke tid for at udføre migreringen, og der er meget, der kunne gå galt under overførslen.
Men da jeg først satte mig ind i processen, var det faktisk ikke så slemt, som jeg havde troet. Selvfølgelig ville det tage et par timer (og jeg stødte bestemt på nogle udfordringer), men generelt var det ret smertefrit og ikke så overvældende.
Sikre at det Nye System Er Korrekt Forberedt
Jeg startede med at sikre, at min nye virtuelle maskine var klar til brug. Jeg sørgede først for, at jeg brugte den samme version af Ubuntu: Server 24.04 LTS. Ubuntu Server har været min go-to i over et årti, når jeg har brug for en Linux-server. Jeg føler mig bare godt tilpas i det.
Da Ubuntu Server 24.04 var installeret på den nye virtuelle maskine, sørgede jeg for at få Docker og eventuelle andre afhængigheder konfigureret og klar til brug. Dette inkluderede eventuelle ekstra drivere til NVIDIA eller Intel og at sikre, at alle mappebaner var sat op, som jeg ville have brug for med Docker.
Efter jeg havde konfigureret alt dette, stoppede jeg både Docker-tjenesten og socket'en med følgende kommandoer:
systemctl stop docker.socket
systemctl stop docker
Du behøver måske ikke at køre begge kommandoer, men det gjorde jeg. Dette slukkede i det væsentlige Docker, så jeg kunne foretage ændringer i Docker's kerne-filsystem uden at ødelægge noget.
Når dette var gjort, kørte jeg præcis de samme kommandoer på det gamle system. Jeg måtte sikre, at Docker var slukket på det gamle system, før jeg samlede filer, for at sikre at ingenting ville ændre sig fra da jeg startede migreringen til jeg var færdig med den.
Det betød også, at alle mine Docker-containere ville være slukket. Ærligt talt var dette den værste del for mig. Mit homelab driver hele mit hus med Docker, fra Home Assistant til Audiobookshelf, Plex og mange andre tjenester. At slukke for Docker betød at lukke disse systemer ned, så jeg måtte vente på det rigtige tidspunkt at gøre det.
Til sidst fandt jeg et tidspunkt, hvor serveren var inaktiv, og jeg kunne fortsætte med at slukke Docker og derefter gå videre til næste skridt: at forberede alle filerne til overførsel.
Indsamle Alle Docker Filer
Dette var den længste del af processen for mig. Jeg endte med at slette en del filer og mapper fra mappen, hvor jeg binder mine Docker-volumener for at gøre denne proces så hurtig som muligt, men det tog stadig nogle timer.
I det væsentlige vil du gerne tar' din Docker-mappe og derefter, hvis du bruger et andet område til dine volumen-mounts, også den mappe. Hvis du kun bruger Docker-volumener, vil de blive fanget af den første kommando.
For at starte kørte jeg følgende kommando på min gamle server:
sudo tar -czvf docker-backup.tar.gz /var/lib/docker
Hvad denne gør, er at lave en backup af /var/lib/docker mappen til en tar.gz fil. Afhængig af hvor mange containere du kører, og om du bruger Docker Volumes eller ej, kan det tage noget tid. For mig tog det omkring 30 til 45 minutter.
Dernæst kørte jeg følgende kommando på min gamle server:
sudo tar -cvzf docker-files.tar.gz /portainer
Da jeg kører Portainer som min Docker-manager, har jeg placeret alle mine Docker-filer under /portainer på serveren. Så jeg har /portainer/audiobookshelf, /portainer/plex osv. Den ovenstående kommando pakker /portainer-mappen ind i en lille fil, hvilket gør det nemt at flytte. Dette tog cirka en time at sikkerhedskopiere på grund af, hvor meget data jeg har i mine Docker Volume-mapper.
Når begge mapper var pakket, var jeg klar til at gå videre til næste trin: at flytte de komprimerede arkiver til den nye server.
Flytte alt til det nye system er simpelt
Jeg har et 2,5 Gb/s netværk derhjemme, og jeg kan godt lide at udnytte det fuldt ud, når jeg kan. Så jeg fandt en kommando til at flytte filen fra den ene server til den anden, mens jeg kunne se overførselshastighederne i terminalen:
rsync -ah --info=progress2 docker-backup.tar.gz user@remote-host:/destination/path/
Ved hjælp af denne kommando kunne jeg overvåge overførslen og sikre mig, at alt gik efter planen. Heldigvis gjorde det. Inden for få minutter var filerne flyttet fra den gamle server til den nye server, og jeg var klar til at fortsætte.
Selvfølgelig, hvis du foretrækker det, kan du bruge USB til at flytte filer fra den ene server til den anden. Min gamle server (et Dell R720 rack-mount system) har kun USB 2.0, så det var meget hurtigere for mig at flytte filerne over netværket.
Når filerne er på den nye server, skal du blot pakke dem ud på stedet. Jeg startede med Docker-mappen:
sudo tar -xpf docker-backup.tar.gz -C /
Da dette var færdigt, kørte jeg:
sudo tar -xpf docker-files.tar.gz -C /
Dette satte alle mine gamle Docker-filer og mine volumemounts tilbage, hvor de skal være, og holdt tilladelserne korrekt indstillet, hvilket er størstedelen af flytningen.
Faktisk tog det meste af tiden at pakke Docker, flytte tar-filerne og derefter pakke filerne ud. Samlet set tog de tre handlinger omkring tre til fire timer at gennemføre på min server.
Når jeg havde det gjort, var jeg kun et skridt fra, at flytningen var komplet. Nu var det tid til endelig at starte Docker op på den nye server.
Start Docker på det nye system, og dine containere skal virke
Med alle filerne på plads tændte jeg Docker for første gang med alle containerne klar. Dette var simpelt og krævede blot to kommandoer:
systemctl start docker
systemctl start docker.socket
Jeg forventede, at mange ting ville gå galt, når jeg tændte for Docker efter flytningen. I stedet viste de fleste ting sig at fungere perfekt. Faktisk, det er alt der skal til for at starte Docker på din nye maskine.
Hvis konfigurationen ikke er meget forskellig mellem dit gamle system og det nye, så skulle alt bare virke. Hvis du er ligesom mig dog, og har ændret meget mellem de to systemer, så er der et par ting at være opmærksom på.
Ting at se efter i flytningen
En af de første ting, jeg måtte rette, var at ændre nogle containere, der brugte NVIDIA-runtime til at bruge en Intel-runtime. På min gamle server havde jeg et GTX 1650 grafikkort til at hjælpe med AI-behandling og transkodning. Den nye server havde en i9-13900K med Intels integrerede grafik, der kan håndtere de samme arbejdsbelastninger.
Dette krævede lidt justering, og jeg er stadig ikke helt skiftet over endnu (jeg gav op med Scrypted og lader det bare køre på processoren i stedet for iGPU'en), men samlet set var det et ret simpelt skift.
Jeg stødte også på et ret stort problem med Home Assistant. Home Assistant's Docker-container, af en eller anden grund, flyttede ikke nogen af sine indstillinger over. Der er nogle konfigurationsoplysninger, som jeg får det til at gemme i /portainer/homeassistant, men det startede som om, jeg aldrig havde kørt Home Assistant før.
Dette var dog en nem løsning. Jeg tændte helt enkelt den gamle virtuelle maskine, gik ind i Home Assistant på den, downloadede backup-filen, og gendannede den på den nye virtuelle maskine. Det fik mig straks op at køre.
Nogle af Dockers netværksindstillinger skal muligvis også have et eftersyn. Scrypted, for eksempel, måtte jeg ændre tilbage til vært-netværk fra et nyt scrypted-default-netværk, der blev oprettet af en eller anden grund.
Jeg måtte også få den statiske IP sat op på den nye virtuelle maskine. Derefter måtte jeg opdatere et par andre småting.
slutter omkring serveren for at få det hele til at fungere glat med de integrerede grafik, som jeg videreførte.
Overordnet set var det en ret glat flytning, og jeg er meget glad for den nye server. Den er hurtigere, mere responsiv og meget mere kapabel end den gamle server—alt imens den bruger mindre elektricitet.
Flytningen var relativt enkel, og jeg er glad for, at jeg fik mulighed for at lære, hvordan man flytter Docker-containere fra et system til et andet. Jeg er sikker på, at det vil komme mig til gode på et tidspunkt!
Hvis du aldrig har kørt Docker-containere før, eller bare er ved at starte, er Docker et vidunderligt værktøj. Det kører stort set hele mit homelab.
Her er en håndfuld af mine yndlings-Docker-containere, som jeg mener, hver homelabber burde køre. De fleste er enkle at sætte op og kan tilføre meget værdi til dit setup. Faktisk er mit homelab blevet en af de mest nyttige ting i mit hus.

Skriv et svar