Docker de la sol lucrul cu containerele, partea 2

Aceasta este partea a doua a unei serii în două părți despre lucrul cu containerele Docker. În prima parte, ne-am axat pe numeroasele moduri și opțiuni de a rula o imagine și despre modul în care gazda poate interacționa cu un container Docker. 

În această parte, vom include listarea, pornirea, oprirea și repornirea containerelor, precum și executarea comenzilor cu privire la rularea containerelor. În special, veți afla diferența între containerele care rulează și oprite (ieșite) și cum să controlați cu precizie informațiile și afișarea când listați containerele prin filtrare și formatare. 

Apoi, veți obține experiența hands-on, oprirea, pornirea, repornirea și atașarea containerelor. În cele din urmă, veți executa comenzi unice și veți obține accesul shell interactiv la un container care rulează. 

Înainte de a începe, asigurați-vă că Docker este instalat corect în mediul dvs. În funcție de modul în care a fost instalat și de utilizatorul dvs., este posibil să fie necesar să îl executați ca sudo. Voi sari peste sudo. 

Listarea containerelor

Când lucrați cu recipiente, doriți să listați, să vizualizați și să filtrați recipientele. docker ps comanda este cheia și are câteva opțiuni interesante.

Rularea containerelor

Comanda cea mai de bază este simplă docker ps fără argumente, care arată toate containerele care rulează în prezent.

$ docker ps CONTAINER ID IMAGE COMANDA CREAT STATUS PORTS NAMES 2f542e1cb88b nginx "nginx -g 'daemon ..." Cu 12 ore în urmă Sus 12 ore 443 / tcp, 0.0.0.0:9000->80/tcp nginx 

Veți obține o mulțime de informații despre fiecare container, inclusiv id-ul containerului, imaginea, comanda, când a fost creat, statutul său curent, porturile și numele acestuia. Este puțin dificil de analizat datorită ambalajului. Vom vedea mai târziu cum să filtrați și să formatați ieșirea. Rețineți că comanda este trunchiată (precum și id-ul containerului). Pentru a afișa comanda completă, adăugați --no-TRUNC:

$ docker ps - nu-trunc COMMAND DE IMAGINE nginx "nginx -g" daemon off; "" 

Acum, comanda completă este vizibilă: nginx -g "daemon off;"

Toate containerele

După cum vă amintiți, Docker păstrează containerele oprite în jur (cu excepția cazului în care le-ați rulat --rm). adăugare -A arată toate containerele:

$ docker ps -a CONTAINER ID IMAGE STATUS nume cc797c61dc21 busybox ieșit din busybox 67f3cb5a9647 busybox a plecat exstatic_jones 898fb562e535 hello-world A ieșit hopeful_spence 6dd210fda2d8 hello-world Creat infallible_curie 2f542e1cb88b nginx Sus 12 ore nginx

Formatarea

Producția de docker ps poate fi prea verbose și de multe ori arată o mulțime de domenii care nu sunt interesante. Puteți utiliza formatul de șablon de navigare pentru a afișa doar câmpurile care vă interesează. Aici sunt afișate doar numele și comanda:

$ docker ps --no-trunc --format '.Names \ t .Comandă "nginx" nginx -g "daemon off" 

Aceasta funcționează, dar pentru ao prezenta cu numele câmpurilor, adăugați "tabel" la începutul șirului de format:

$ docker ps -a -no-trunc -format 'tabel .Names \ t .Comand "NAMES COMMAND busybox" cat /data/1.txt "ecstatic_jones" cat / data / 1. txt "hopeful_spence" / salut "infallible_curie" ls -la "nginx" nginx -g "daemon off;" 

Numele formatului pentru id-ul containerului (nu este selectat aici) este .ID (toate capacele).

Filtrarea

docker ps comanda acceptă mai multe filtre. Ele sunt destul de ușor de utilizat. Sintaxa este -f "=". Filtrele acceptate sunt id, etichetă, nume, ieșite, statutul, strămoș, înainte, deoarece izolarea, rețeaua și sănătatea.

Aici se filtrează numele containerului și se afișează numai containerul din cutia de depozitare:

$ docker ps -a -f "nume = busybox" \ --format "tabel .ID \ t .Statele \ t .Names" STATUTE ID CONTAINER nume cc797c61dc21 A ieșit (0) Acum 11 minute busybox

Steagul -q

Dacă tot ce doriți este id-ul containerului, utilizați -q pavilion (steagul liniștit). E mai simplu decât --format "ID". Acest lucru este adesea necesar atunci când doriți să efectuați operații pe mai multe containere (veți vedea un exemplu mai târziu).

$ docker ps -aq cc797c61dc21 67f3cb5a9647 898fb562e535 6dd210fda2d8 2f542e1cb88b 

Oprirea, Pornirea și Repornirea containerelor

Puteți să opriți rularea containerelor și să porniți un container oprit. Există mai multe diferențe între pornirea unui container oprit și difuzarea unei noi instanțe a aceleiași imagini:

  • Utilizați aceleași variabile de mediu, volume, porturi și alte argumente ale comenzii inițiale de rulare.
  • Nu trebuie să creați încă un alt container.
  • Dacă instanța oprită a modificat sistemul de fișiere, containerul inițiat va folosi același lucru.

Să oprim Nginx container și apoi porniți-l. Când te referi la un container, poți să-i folosești numele sau un prefix neambiguu al id-ului. De obicei, eu numesc containerele mele de lungă durată, așa că am un mâner semnificativ și nu trebuie să se ocupe de numele auto-generat de Docker sau de prefixele de containere.

$ docker stop nginx nginx $ docker ps -a -f "nume = nginx" --format 'tabel .Names \ n .Status NAMES STATUS nginx Exit (0) 

O.K. Nginx este oprit (starea este "Ieșită"). Să începem:

$ docker start nginx nginx $ docker ps -a -f "nume = nginx" --format "tabel .Names \ t .Status 'NAMES STATUS nginx Sus 33 secunde 

Repornirea unui container care rulează este o altă opțiune, care este echivalentă cu stația de andocare urmat de docker start.

$ docker reporni nginx

nginx $ docker ps -a -f "nume = nginx" --format "tabel .Names \ t .Status 'NAMES STATUS nginx Sus 2 secunde 

Atașați-vă la un container care rulează

Când porniți un recipient oprit sau dacă ați rulat recipientul în modul detașat (-d linia de comandă argument), nu puteți vedea de ieșire. Dar vă puteți atașa.

$ docker atașați nginx 172.17.0.1 - - [19 / Mar / 2017: 08: 40: 03 +0000] "HEAD / HTTP / 1.1" 200 0 " 

Scoaterea containerelor

Puteți elimina containerele oprite cu comanda:  docker rm

$ docker rm. ecstatic_jones ecstatic_jones 

Dacă doriți să eliminați un container care rulează, puteți să îl opriți mai întâi sau să îl utilizați -f (forță) argumentul liniei de comandă:

$ docker rm -nginx Răspuns de eroare de la daemon: Nu puteți elimina un container care rulează 3dbffa955f906e427298fbeb3eadfd229d64365dd880c9771a31b0aedb879d6d. Opriți containerul înainte de a încerca eliminarea sau utilizați -f $ docker rm -f -nginx nginx 

Dacă doriți să eliminați toate containerele, aici este un fragment frumos:

docker rm -f $ (docker ps -aq)

Dacă doriți să eliminați numai recipientul oprit, scoateți-l -f (forță).

Executarea unei comenzi în interiorul unui container rulant

Docker rulează un singur proces în interiorul unui container, dar puteți executa comenzi suplimentare împotriva unui container care rulează. Este foarte asemănător cu furnizarea unei comenzi personalizate către docker alerga comanda, cu excepția faptului că în acest caz rulează una lângă cealaltă cu comanda de rulare.

Comenzi simple

Rularea unei comenzi simple se face prin docker exec. Furnizați un cod sau un nume de container care rulează și comanda pe care doriți să o executați. Să verificăm nginx.conf fișier în interiorul Nginx container și a vedea câte procese de lucru sunt configurate.

$ docker exec nginx pisică /etc/nginx/nginx.conf | grep worker_processes worker_processes 1; 

Shell interactiv

Una dintre cele mai bune tehnici de depanare cu containerele Docker este să vă conectați la o coajă interactivă și să explorați sistemul de fișiere intern. Pentru a atașa stdin și au un tty, trebuie să oferiți -aceasta linii de comandă (pot fi grupate ca -aceasta) și apoi numele unui executabil shell (de obicei bash). 

Voi ajungeți cu accesul în shell la containerul dvs. Iată un exemplu de verificare a proceselor lucrătorului interactiv din "interiorul" containerului.

$ docker exec -n nginx rooth bash @ b010e854bb98: / # cat /etc/nginx/nginx.conf | grep worker_processes worker_processes 1; root @ b010e854bb98: / # 

Concluzie

Docker-ul este o platformă puternică și, din moment ce containerul este unitatea de lucru, furnizează o mulțime de instrumente pentru a gestiona și a lucra cu containerele. Am descris majoritatea aspectelor importante ale lucrului cu containerele, dar există multe caracteristici mai avansate, opțiuni și nuanțe pentru comenzile pe care le-am acoperit, precum și câteva comenzi suplimentare. 

Dacă lucrați îndeaproape cu containerele Docker, luați-vă timpul să vă aruncați cu capul în jos și aflați totul despre ele. Se va plăti cu mândrie.

Cod