CUM SA

Cum se actualizează containerele Docker pentru a aplica actualizări de imagine – CloudSavvy IT

Containerele Docker sunt menite să fie de unică folosință și ușor de înlocuit. Când este lansată o nouă versiune a imaginii de bază a unui container, ar trebui să trageți noua imagine și să începeți o nouă instanță de container. Iată cum să gestionați actualizările de imagine în flota de containere.

Extragerea de imagini noi

Modul de bază de aplicare a unei actualizări de imagine este de a trage noua imagine, de a distruge containerele care rulează pe baza versiunii vechi și apoi de a începe containere noi în locul lor.

Iată un exemplu pentru un container care utilizează nginx:latest imagine:

# Pull new image
docker pull nginx:latest

# Delete old container by name
docker rm example-nginx

# Start a new container
docker run -d -p 80:80 --name example-nginx nginx:latest

Lui Docker îi lipsește un mod încorporat de a detecta actualizările de imagine și de a înlocui containerele care rulează. Rezultatul este un proces complicat de înlocuire manuală. Poate fi simplificat folosind Docker Compose pentru a porni containerele în loc de simplu docker run comanda.

Înlocuirea containerelor cu Docker Compose

Docker Compose vă permite să creați reprezentări declarative ale stivelor de containere utilizând un docker-compose.yml fişier. Stiva este pornită cu docker-compose up, folosind configurația conținută în fișier. Aceasta înlocuiește lista lungă de steaguri date de obicei docker run.

Docker Compose are un dispozitiv încorporat pull comandă care va extrage versiunile actualizate ale tuturor imaginilor din stiva dvs. Este încă o procedură în două etape, deoarece trebuie să rulați manual docker-compose up din nou după aceea.

# Pull all images in the stack
docker-compose pull

# Restart the stack
# If a new image version has been pulled, containers 
# using the old tag will be replaced with new instances.
docker-compose up -d

Docker Compose oferă o experiență mai simplă și mai memorabilă în care nu este nevoie să tastați numele imaginilor sau să vă amintiți steagurile către care ați trecut docker run. Cele două comenzi pot fi scurtate cu ușurință la un singur alias de shell:

alias composePullUp="docker-compose pull && docker-compose up -d"

Trebuie să faceți referire la eticheta corectă atunci când trageți manual imagini. Docker Compose se va ocupa de acest lucru și va selecta etichetele specificate în docker-compose.yml.

Extragerea noii versiuni a unei etichete nu este neapărat aceeași cu utilizarea celei mai recente versiuni a unei imagini. Dacă doriți să utilizați cea mai recentă versiune de software interior container, fiți atenți la practicile de etichetare ale autorului imaginii.

Citeste si  Cum se comandă albume foto și tipărituri de pe Google Foto

De exemplu, extragerea unei noi versiuni de node:14 vă va oferi cea mai recentă versiune de patch-uri a Node.js 14. Pulling node:latest va livra cea mai recentă versiune Node.js, în prezent 16. Dacă un container vechi folosea această imagine, un proces de tragere și înlocuire ar declanșa o versiune majoră pentru versiunea binară a nodului din interiorul containerului.

Reconstruirea imaginilor

Până acum am văzut cum să gestionăm containerele pornite de la imagini pe care le extrageți direct din Docker Hub sau dintr-un alt registru. Imaginile pe care le construiți singure trebuie să fie reconstruite atunci când imaginea lor de bază se schimbă.

Mai întâi reconstruiți imaginea:

docker build --pull -t my-image:latest .

Apoi înlocuiți containerele:

# Delete old container by name
docker rm my-container

# Start a new container
docker run -d --name my-container my-image:latest

The --pull steag dat docker build îi instruiește lui Docker să tragă imaginea de bază la care se face referire în Dockerfile. Fără acest semnal, Docker ar refolosi referința de etichetă existentă dacă imaginea ar fi deja prezentă pe sistem.

Utilizatorii Docker Compose pot obține aceleași rezultate cu cele corespunzătoare docker-compose comenzi:

docker-compose build --pull

docker-compose up -d

Compune din nou oferă un proces mai simplu, deși încă în două etape. Puteți uita nume și etichete specifice imaginii, în loc să aveți încredere în Compunere pentru a trage imagini de bază modificate, pentru a vă reconstrui straturile deasupra lor și apoi pentru a vă recrea containerele.

Software în interiorul containerelor

Uneori poate fi tentant să actualizați manual software-ul interior containerele dvs. Acest lucru ar trebui evitat deoarece merge din nou principiile lui Docker.

Citeste si  Cum se instalează macOS Monterey public beta

Alergare apt-get update && apt get upgrade -y pe un program (sau colegii managerului de pachete) este o practică standard atunci când se administrează un server Linux bare metal. Aceste comenzi nu sunt executate în mod normal într-un container Docker, deși pot fi incluse ca parte a unui Dockerfile pentru a obține cele mai recente patch-uri de securitate în timpul unei construcții de imagini.

Tragerea periodică a imaginii de bază și recreerea containerelor dvs. este modalitatea preferată de a le menține actualizate. Acest lucru vă oferă toate remediile de securitate din amonte și scurtează durata de viață a containerelor individuale. Mediile de containere nu sunt menite să fie modificate după crearea unei instanțe; modificările sistemului de fișiere ar trebui să fie limitate la scrieri pe căi temporare și volume dedicate Docker care supraviețuiesc containerului.

Automatizarea actualizărilor de containere

Puteți automatiza procesul de verificare a etichetelor de imagine actualizate și de repornire a containerelor folosind proiecte de la terți. Watchtower este o alegere populară care monitorizează containerele care rulează și le înlocuiește atunci când imaginea lor Docker Hub se schimbă.

Watchtower în sine este implementat ca un container:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

Acum aveți o instalare funcțională Watchtower. Soclul Docker al gazdei dvs. este montat în containerul Watchtower, permițându-i să ruleze comenzi Docker pentru a crea și șterge containere.

Watchtower va detecta automat noi lansări de imagini pe Docker Hub, le va trage la aparatul dvs. și va înlocui containerele folosind imaginea. Containerele existente vor fi închise și vor fi create noi identice în locul lor. Aceleași steaguri cărora le-ați dat docker run vor fi furnizate containerelor de schimb.

Citeste si  Economisiți 200 USD pe iPad Pro 2020 astăzi

Watchtower funcționează numai cu Docker Hub în mod implicit. Puteți să-l utilizați cu registre de imagini private furnizând acreditări într-un fișier de configurare.

Creați un fișier JSON cu următorul conținut:

{
    "auths": {
        "example.com": {
            "auth": "credentials"
        }
    }
}

A inlocui example.com cu calea către registrul dvs.

Apoi generați un șir de acreditări din numele de utilizator și parola din registru:

echo -n 'username:password' | base64

Lipiți șirul codat Base64 rezultat în fișierul de configurare, înlocuind credentials text substituent.

Montați fișierul de configurare în containerul Watchtower pentru a permite accesul la registru:

docker run -d 
    -v config.json:/config.json
    -v /var/run/docker.sock:/var/run/docker.sock 
    containrrr/watchtower

Concluzie

Docker nu are niciun mecanism pentru a detecta și a aplica actualizări de imagine în amonte la containerele dvs. care rulează. Puteți utiliza comenzile Docker CLI în ordine, docker-compose ca o abstractizare la nivel superior sau ca un instrument terță parte, cum ar fi Watchtower, pentru a vă înlocui containerele atunci când sunt lansate noi versiuni de imagine.

În funcție de circumstanțele dvs., este posibil să nu simțiți deloc nevoia de a actualiza containerele în acest mod. Dacă echipa dvs. folosește conducte CI pentru a crea o imagine Docker pe fiecare commit, este posibil să fiți deja producători și implementați imagini actualizate de mai multe ori pe zi. În acest caz, asigurați-vă că utilizați fișierul --pull steag cu docker build deci remedierile din amonte sunt incluse în imaginile dvs.

Articole Similare

Lasă un răspuns

Adresa ta de email nu va fi publicată.

Back to top button