Care este diferența dintre un Docher imagine și un container?

Atunci când se utilizează Docker, vom începe cu o imagine de bază. Am boot, de a crea schimbări și aceste schimbări sunt salvate în straturi formand o altă imagine.

Deci, în cele din urmă am o imagine pentru PostgreSQL exemplu și o imagine pentru cererea mea de web, schimbări la care ține pe a fi persistat.

Ce este un container?

Soluția

Un exemplu de o imagine este numit un container. Ai o imagine, care este un set de straturi ca te descriu. Dacă începeți această imagine, veți avea o funcționare recipient de această imagine. Puteți avea mai multe de funcționare recipiente de aceeași imagine.

Puteți vedea toate imaginile cu docker imaginiîntrucât puteți vedea funcționare containere cu docker ps (și puteți vedea toate containerele cu docker ps-o`).

Deci o instanță în execuție a unei imagini este un container.

Comentarii (14)

Din articolul meu pe Automatizarea Docker Implementări:

Docker Imagini vs Containere

În Dockerland, sunt imaginilor și sunt containere. Cele două sunt strâns înrudite, dar distincte. Pentru mine, apucând această dihotomie a clarificat Docker foarte mult.

Ce's-o Imagine?

O imagine este inert, imuabil, fișier care's, în esență, o imagine dintr-un container. Imaginile sunt create cu construi comandă, și-au'll produce un container atunci când a început cu run. Imaginile sunt stocate într-un Docher de registry, cum ar fi registry.hub.docker.com. Pentru că ele pot deveni destul de mare, imaginile sunt proiectate pentru a fi alcatuita din straturi de alte imagini, care permite o cantitate minimă de date pentru a fi trimise atunci când transferul de imagini prin rețea.

Imagini locale pot fi enumerate prin rularea docker imagini:

REPOSITORY                TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu                    13.10               5e019ab7bf6d        2 months ago        180 MB
ubuntu                    14.04               99ec81b80c55        2 months ago        266 MB
ubuntu                    latest              99ec81b80c55        2 months ago        266 MB
ubuntu                    trusty              99ec81b80c55        2 months ago        266 MB
                                  4ab0d9120985        3 months ago        486.5 MB

Unele lucruri să rețineți:

  1. IMAGINE ID-ul este primul de 12 caractere de adevărat identificator pentru o imagine. Puteți crea mai multe tag-uri de o anumită imagine, dar id-Urile lor vor fi toate la fel (ca mai sus).
  2. DIMENSIUNE VIRTUALĂ este virtual deoarece's adăugând până la dimensiuni de toate distincte straturile subiacente. Acest lucru înseamnă că suma tuturor valorilor din coloana care este, probabil, mult mai mare decât spațiul de pe disc utilizat de toate aceste imagini.
  3. Valoarea în DEPOZIT coloana vine de la -t steagul docker construi comandă, sau din docker tag-ing o imagine existentă. Te're gratuit pentru a eticheta imaginile folosind o nomenclatură care are sens pentru tine, dar să știi că docker va folosi tag-ul ca locație registry într-un docher push " sau " docker trage`.
  4. Forma completă a unui tag este [REGISTRYHOST/][nume de UTILIZATOR/]NUME[:ETICHETA]. Pentru ubuntu de mai sus, REGISTRYHOST se deduce a fi registry.hub.docker.com. Deci, dacă aveți de gând pe stocarea imagine numit mi-aplicație într-un registru la docker.example.com, ar trebui să-tag acea imaginedocker.example.com/my-application`.
  5. TAG coloana este doar [:ETICHETA] o parte din full tag. Acest lucru este regretabil terminologie.
  6. La "cea mai recentă" tag-ul nu este magic, l's pur și simplu tag implicit atunci când don't specifica o etichetă.
  7. Puteți avea fără taguri imagini poate fi identificat doar prin IMAGINEA lor acte de identitate. Acestea vor primi ` TAG și DEPOZIT. L's ușor pentru a uita de ele.

Mai multe informații pe imagini este disponibil de la Docker documentația și glosar.

Ce's-un container?

Pentru a utiliza o programare metaforă, dacă o imagine este o clasă, apoi un container este o instanță a unei clase—un runtime object. Containerele sunt, sperăm, de ce ai're folosind Docker; ei're usoare si portabile encapsulations de un mediu în care pentru a rula aplicații.

Vedere de funcționare locale containere cu docker ps`:

CONTAINER ID        IMAGE                               COMMAND                CREATED             STATUS              PORTS                    NAMES
f2ff1af05450        samalba/docker-registry:latest      /bin/sh -c 'exec doc   4 months ago        Up 12 weeks         0.0.0.0:5000->5000/tcp   docker-registry

Aici am'm execută o dockerized versiune a docker registry, astfel încât să am un loc privat pentru a stoca imaginile mele. Din nou, unele lucruri de reținut:

  1. Ca IMAGINE de IDENTITATE, CONTAINER ID-ul este valabil de identificare pentru container. Are aceeași formă, dar se identifică un alt fel de obiect.
  2. docker ps numai ieșiri running containere. Puteți vizualiza toate containerele (running sau stopped) cu docker ps-o`.
  3. NUMELE poate fi folosit pentru a identifica un început recipient prin intermediul nume pavilion.

Cum pentru a evita imagine și recipient de acumulare

Una din primele mele frustrări cu Docker a fost aparent constantă acumularea de neetichetate imagini și s-a oprit recipiente. În câteva rânduri acest lucru a dus la acumularea maxed afară hard disk-uri încetinirea laptop-ul meu sau stoparea meu automată a construi conducta. Vorbim despre "containere peste tot"!

Putem elimina toate neetichetate imagini prin combinarea docker rmi cu recentul marionetă=true` interogare:

docker imagini prezentare-q-filtru "marionetă=true" | xargs docker rmi

Docker câștigat't fi capabil de a elimina imaginile care sunt în spatele containerelor existente, astfel încât va trebui pentru a elimina oprit containere cu docker rm` prima:

docker rm `docker ps --no-trunc -aq`

Acestea sunt cunoscute puncte de durere]7 cu Docker și pot fi abordate în edițiile viitoare. Cu toate acestea, cu o înțelegere clară a imaginilor și de containere, aceste situații pot fi evitate cu un cuplu de practici:

  1. Scoateți întotdeauna inutil, s-a oprit recipient cu docker rm [CONTAINER_ID]`.
  2. Scoateți întotdeauna imagine în spatele inutil, s-a oprit recipient cu docker rmi [IMAGE_ID]`.
Comentarii (11)

În timp ce-l's simplu să se gândească la un container ca imagine, e't destul exacte.

O imagine este într-adevăr un șablon care poate fi transformat într-un container. Pentru a transforma o imagine într-un recipient, Docker motor are imagine, adaugă o citire-scriere fișiere pe partea de sus și inițializează diferite setări, inclusiv porturile de rețea, container numele, ID-ul de resurse și limite. Un recipient de funcționare a o-ului privat în procesul de executare, dar un container poate fi, de asemenea, oprit (sau exited în Docker's terminologie). O ieșit container este nu la fel ca o imagine, ca acesta poate fi repornit și va păstra setările sale și orice sistem de fișiere modificări.

Comentarii (5)

În cuvinte simple.

Imagini -

sistemul De fișiere și de configurare(read-only), aplicație care este folosit pentru a creați containere. Mai multe detalii.

Containere -

Acestea sunt instanțe în execuție ale Docker imagini. Containere rula reale aplicații. Un container include o aplicație și toate dependențe. Împărtășește kernel cu alte recipiente si ruleaza ca un proces izolat în spațiu utilizator pe sistemul de OPERARE gazdă. Mai multe detalii.


Alți termeni importanți pentru a observa:


Docker daemon -

serviciu de fundal care rulează pe gazdă, care administrează clădirea, execută și distribuirea containerelor Docker.

Docker client -

instrumentul de linie De comandă care permite utilizatorului să interacționeze cu Docker daemon.

Docker Magazin -

Magazin este, printre alte lucruri, un registru de Docker imagini. Puteți cred că de registry ca un director de toate disponibile Docker imagini.

O imagine din acest post pe blog]3 este în valoare de o mie de cuvinte.

(Pentru o înțelegere mai profundă vă rugăm să citiți acest.)

Rezumat:

  • Trage imagini din Docker hub sau de a construi de la o Dockerfile => vă Oferă un Docher imagine (nu este editabil).
  • Rula imaginea (docker rula image_name:tag_name) => vă Oferă o funcționare Imagine anume container (editabil)
Comentarii (5)

Poate explica întregul flux de lucru poate ajuta.

Totul începe cu Dockerfile. La Dockerfile este codul sursă al imaginii.

Odată ce Dockerfile este creat, puteți construi pentru a crea imagini a containerului. Imaginea este doar "versiune compilată" a "codul sursă" care este Dockerfile.

Odată ce aveți o imagine de container, ar trebui să redistribui folosind grefa. Registrul este ca un depozit Git-puteți împinge și trage imagini.

Apoi, puteți utiliza imaginea pentru a rula containere. Un recipient de funcționare este foarte asemănătoare, în multe aspecte, pentru o mașină virtuală (dar fara hypervisor).

Comentarii (2)

Fluxului de lucru

Aici este end-to-end de flux de lucru care prezintă diverse comenzi asociate acestora și intrări și ieșiri. Care ar trebui să clarifice relația dintre o imagine și un container.

+------------+  docker build   +--------------+  docker run -dt   +-----------+  docker exec -it   +------+
| Dockerfile | --------------> |    Image     | --------------->  | Container | -----------------> | Bash |
+------------+                 +--------------+                   +-----------+                    +------+
                                 ^
                                 | docker pull
                                 |
                               +--------------+
                               |   Registry   |
                               +--------------+

Pentru a lista imagini ai putea să fugi, executa:

docker image ls

Pentru a lista containerelor ai putea executa comenzi pe:

docker ps
Comentarii (3)

Nu puteam't înțeleagă conceptul de imagine și strat în ciuda de a citi toate întrebările și apoi în cele din urmă a dat peste acest documentație excelentă din Docker (duh!).

De exemplu, există într-adevăr cheia pentru a înțelege întregul concept. Este un post de lungă durată, așa că eu sunt rezumă punctele-cheie care trebuie să fie înțeles cu adevărat pentru a obține claritate.

  • Imagini: Un Docher imagine este construit dintr-o serie de read-only straturi

  • Strat: Fiecare strat reprezintă o instrucțiune în imaginea lui Dockerfile.

"Exemplu": mai jos Dockerfile conține patru comenzi, fiecare dintre care creează un strat.

DE la ubuntu:15.04

COPIA . /app

RULAȚI make /app

CMD python /app/app.py

Important, fiecare strat este doar un set de diferențe de strat înainte.

  • Container. Atunci când creați un nou container, adăugați o nouă scriere strat pe partea de sus a straturilor de bază. Acest strat este adesea numit "container strat". Toate modificările efectuate la recipient, cum ar fi scrierea de fișiere noi, modificarea celor existente fișiere, și ștergerea fișierelor, sunt scrise pentru acest subțire scriere recipient strat.

prin Urmare, diferența majoră între un recipient și o imagine este top scriere strat. Toate scrie la recipientul care se adaugă noi sau modifica datele existente sunt stocate în această scriere strat. Atunci când recipient este șters, scriere strat este, de asemenea, șterse. La imagine de fond al sistemului rămâne neschimbată.

Înțelegerea imagini cnd Containere de la o dimensiune de-pe-disc perspectivă

Pentru a vizualiza dimensiunea aproximativă a unui recipient de funcționare, puteți utiliza docker ps -s comanda. Veți obține dimensiunea " și " dimensiune virtuală` ca două ieșiri:

  • Dimensiune: cantitatea de date (de pe disc), care este folosit pentru scriere strat din fiecare recipient

  • Virtual Dimensiune: cantitatea de date utilizate pentru numai-citire a datelor de imagine utilizate de către recipient. Mai multe containere pot partaja toate sau doar în citire a datelor de imagine. Prin urmare, acestea nu sunt aditive. I. e. puteți't se adauga toate virtuală dimensiuni pentru a calcula cât de mult dimensiunea pe disc este folosit de imaginea

Un alt concept important este copy-on-write strategie

Dacă un fișier sau director există într-un strat inferior din imagine, și un alt strat (inclusiv scriere layer) are nevoie de acces de citire la aceasta, se folosește doar fișierul existent. Prima dată un alt strat trebuie să modificați fișierul (atunci când construirea imaginii sau rularea container), fișierul este copiat în acel strat și modificate.

Sper că ajută pe cineva ca mine.

Comentarii (1)

Dockerfile → (Construi) → Imagini → (Run) → Container.

  • Dockerfile: conține un set de Docker instrucțiuni dispoziții sistemul de operare așa cum vă place, și se instalează/configura toate software-ul.

  • Imagini: compilate Dockerfile. Economisește timp la reconstruirea Dockerfile de fiecare dată când aveți nevoie pentru a rula un recipient. Și-l's o modalitate de a ascunde furnizarea cod.

  • Container: sistemul de operare virtual în sine. Puteți ssh în ea și de a executa orice comenzi doriți, ca și cum ar's-un mediu real. Puteți rula 1000+ recipiente de aceeași Imagine.

Comentarii (0)

Pur și simplu spus, dacă un imagini este o class, apoi container este o instanță a unei clase este un runtime **obiect.

Comentarii (0)

Conceptul de bază de Docker este de a face ușor de a crea "mașini" care în acest caz poate fi considerat containere. Recipientul sida în reutilizarea, permițându-vă să creați și plasați recipiente cu usurinta.

Imagini descriu starea unui container la fiecare moment în timp. Deci, pe bază de flux de lucru este:

  1. a crea o imagine
  2. începe un recipient
  3. face modificări la container
  4. salva container ca o imagine
Comentarii (0)

Un container este doar un executabil binar care este de a fi condus de către sistemul de OPERARE gazdă sub un set de restricții, care sunt presetate folosind o aplicație (de exemplu, Docker), care știe cum să-i spuneți sistem de OPERARE care restricțiile se aplică.

Tipic restricții proces-izolarea legate, legate de securitate (cum ar fi utilizarea SELinux protecție) și de sistem legate de resurse (memorie, disc, CPU, și crearea de rețele).

Până de curând, doar nucleele în sistemele bazate pe Unix susținută de capacitatea de a rula executabile sub restricții stricte. Ca's de ce mai recipient vorbi astăzi implică cea mai mare parte Linux sau alte distribuții de Unix.

Docker este una dintre acele aplicații care știe cum să-i spuneți de OPERARE (Linux, cea mai mare parte) ce restricții pentru a rula un executabil sub. Executabilul este conținută în Docker imagine, care este doar un fișier tar. Că executabil este, de obicei, o versiune simplificata-jos de o distribuție de Linux (Ubuntu, CentOS, Debian, etc.) preconfigurat pentru a rula unul sau mai multe cereri în termen.

Deși cei mai mulți oameni folosesc o bază de Linux ca executabil, acesta poate fi orice alt binare aplicație atât timp cât sistemul de OPERARE gazdă poate rula (a se vedea creând o simplă imagine de bază, folosind zero). Dacă binare în Docker imagine este un sistem de OPERARE sau pur și simplu o aplicație, sistemul de OPERARE gazdă este doar un alt proces, o cuprinse proces condus de presetare sistem de OPERARE limite.

Alte aplicații care, ca Docher, pot spune sistemul de OPERARE gazdă care limitele pentru a aplica la un proces în timp ce se execută, includ LXC, libvirt, și systemd. Docker folosit pentru a utiliza aceste aplicații pentru a indirect a interacționa cu sistemul de OPERARE Linux, dar acum Docker interacționează direct cu Linux folosind propria sa bibliotecă numit "libcontainer".

Astfel de containere sunt doar procese care rulează într-un mod restricționat, similar cu ceea ce chroot folosit pentru a face.

IMO, ce seturi de Docher în afară de orice alt recipient tehnologie este repository (Docker Hub) și instrumente de management care face de lucru cu containere extrem de ușor.

Vezi Docker (software).

Comentarii (1)

Cât mai multe răspunsuri subliniat acest lucru: Te construirea Dockerfile pentru a obține un imagini și o imagini pentru a obține un container.

Cu toate acestea, următorii pași m-au ajutat obține o simt mai bine pentru ceea ce Docker imagine și recipientul sunt:

  1. A Construi Dockerfile:

docker construi -t my_image dir_with_dockerfile

  1. Salvați imaginea .tar de fișier

docker salva -o my_file.tar my_image_id

my_file.tar va stoca imaginea. Deschide-l cu tar-xvf my_file.tar, și veți obține pentru a vedea toate straturile. Dacă se arunca cu capul adânc în fiecare strat, puteți vedea ce schimbări au fost adăugate în fiecare strat. (Acestea ar trebui să fie destul de aproape de comenzi în Dockerfile).

  1. Să ia o privire în interiorul unui container, puteți face:

sudo docker este my_image bash

și puteți vedea că este foarte mult ca un sistem de OPERARE.

Comentarii (0)

Imagini este un echivalent la o clasă definiție în OOP și straturi sunt diferite metode și proprietăți de clasă.

Container este real instanțiere a imaginii ca și cum un obiect este o instanțiere sau o instanță a unei clase.

Comentarii (0)

Un Docher pachete de imagine de până la aplicație și de mediu cerute de aplicații pentru a rula, și un container este o instanță în execuție a imaginii.

Imaginile sunt de ambalare parte din Docker, analog "codul sursă" sau "programul". Containerele sunt partea de execuție de Docker, analog cu un "procesul".

În cauză, numai "programul" o parte este menționată și ca's imaginii. "care rulează" o parte din Docker container. Atunci când un recipient este de a rula și schimbări sunt făcute, l's, ca în cazul în care procesul face o schimbare în propriul său cod sursă și salvează-l ca imagine nouă.

Comentarii (0)

Ca și în programare aspect,

Imagini este codul sursă.

Când codul sursă este compilat și de a construi, este numit o aplicație.

Similare la "atunci când o instanță este creat pentru imagine", este numit un "container".

Comentarii (1)

Cred că este mai bine să-ți explic de la început.

Să presupunem că executați comanda docker rula salut lume. Ce se întâmplă?

Apeluri Docker CLI care este responsabil pentru a lua Docker comenzi și transforma pentru a apela Docker server comenzi. De indata ce Docker server primește o comandă pentru a executa o imagini, se verifică vreme de imagini cache are o imagini cu un astfel de nume.

Să presupunem salut lume nu există. Docker server se duce la Docker Hub (Docker Hub este doar un depozit gratuit de imagini) și cere, hei Hub, ai un imagini numit salutare lume? Hub răspunsuri - da, eu fac. Atunci, dă-mi, te rog. Și procesul de descărcare începe. Imediat ce Docker imagine este descărcat, Docker server pune-l în imagine cache.

Deci, înainte de a ne explica ce Docker imagini și Docker containere sunt, las's începe cu o introducere despre sistemul de operare pe calculatorul dvs. și modul în care se execută software-ul.

Atunci când a alerga, de exemplu, Chrome pe computer, se numește sistem de operare, sistemul de operare în sine apeluri kernel-ul și întreabă, hei vreau pentru a rula acest program. Kernel-ul reușește să ruleze fișierele de pe hard disk.

Acum imaginați-vă că aveți două programe, Chrome și Node.js. Chrome necesită Python versiunea 2 pentru a rula și Node.js necesită versiunea Python 3 pentru a rula. Dacă aveți doar instalat Python v2 de pe computer, doar Chrome va fi rulat.

Pentru a face ambele cazuri muncă, într-un fel aveți nevoie pentru a utiliza un sistem de operare caracteristică cunoscut sub numele de spațiu nume. Un spațiu de nume este o caracteristică care vă oferă posibilitatea de a izola procese, hard disk, rețea, utilizatorii, hostname și așa mai departe.

Deci, atunci când vorbim despre un imagini vorbim de fapt despre un sistem de fișiere instantaneu. O imagini este un fișier fizic care conține direcțiile și metadate pentru a construi o anumită container. La container în sine este un exemplu de un imagini; se izolează pe hard disk, folosind nume spațiu, care este disponibil numai pentru acest container. Deci, un container este un proces sau set de procese care grupuri diferite resurse atribuite.

Comentarii (0)

O imagini este o "imagine" de o container. Puteți face imagini dintr-un recipient (noi "instantanee"), și puteți începe, de asemenea, containere noi de la o imagine (instanția "imagine").

De exemplu, poti instantia un nou container la o imagine de bază, rula unele comenzi în container, și apoi instantaneu ca o nouă imagine. Apoi, puteți rula 100 de containere din care nouă imagine.

Alte lucruri să ia în considerare:

  • O imagine este realizat din straturi și straturi sunt instantaneu "diff" (deci, atunci când vă împinge o imagine, ai nevoie doar pentru a trimite "dif" la registru).
  • Un Dockerfile definește unele comenzi pe partea de sus de o imagine de bază, care creează noi straturi ("diff"), care duce la o nouă imagine ("imagine").
  • Tag-uri de imagine nu sunt doar etichete. Ei sunt imaginea's "numele complet" ("depozit:tag"). Dacă aceeași imagine are mai multe nume, se arată de mai multe ori, atunci când faci docker imagini.
Comentarii (0)

Pe scurt:

Containerul este o divizie (virtual) într-un nucleu care acțiuni comune de OPERARE și rulează o imagine (Docher imagine).

Un container este o auto-sustenabile cerere, care va avea pachete și toate dependențele necesare împreună pentru a rula codul.

Comentarii (0)

Un container Docker se execută un exemplu de o imagine. Te poți raporta o imagine cu un program și un recipient cu un proces :)

Comentarii (0)

O imagine este cu o clasa ca un container pentru un obiect.

Un container este un exemplu de o imagine ca un obiect este o instanță a unei clase.

Comentarii (0)