kzen.dev
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
 bibstha
bibstha
Question

Aký je rozdiel medzi obrazom Docker a kontajnerom?

Pri používaní nástroja Docker začíname so základným obrazom. Spustíme ho, vytvoríme zmeny a tieto zmeny sa uložia do vrstiev, ktoré tvoria ďalší obraz.

Takže nakoniec mám obraz pre inštanciu PostgreSQL a obraz pre webovú aplikáciu, ktorých zmeny sa neustále uchovávajú.

Čo je to kontajner?

802 2014-05-19T10:15:27+00:00 3
Peter Mortensen
Peter Mortensen
Edited question 11 november 2019 в 2:17
Programovanie
docker
docker-container
docker-image
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
Thomas Uhrig
Thomas Uhrig
19 máj 2014 в 11:40
2014-05-19T11:40:01+00:00
Viac na
Zdroj
Upraviť
#24619877

Inštancia obrazu sa nazýva kontajner. Máte obraz, ktorý je súborom vrstiev, ako popisujete. Ak tento obraz spustíte, máte spustený kontajner tohto obrazu. Môžete mať veľa spustených kontajnerov toho istého obrazu.

Všetky svoje obrazy môžete vidieť pomocou docker images, zatiaľ čo bežiace kontajnery môžete vidieť pomocou docker ps (a všetky kontajnery môžete vidieť pomocou docker ps -a).

Bežiaca inštancia obrazu je teda kontajner.

Alex Telon
Alex Telon
Edited answer 20 október 2017 в 5:41
1089
0
Artificial intelligence to parse product page
productapi.dev
 paislee
paislee
16 november 2014 в 7:07
2014-11-16T19:07:00+00:00
Viac na
Zdroj
Upraviť
#24619880

Z môjho článku Automatizácia nasadenia Docker:

Docker Images vs. Containers

V Dockerlande existujú images a containers. Tieto dva typy sú úzko prepojené, ale odlišné. Pochopenie tejto dichotómie pre mňa nesmierne objasnilo Docker.

Čo je to obrázok?

Obraz je inertný, nemenný súbor, ktorý je v podstate snímkou kontajnera. Obrazy sa vytvárajú príkazom build a po spustení príkazom run vytvoria kontajner. Obrazy sa ukladajú do registra Docker, napríklad registry.hub.docker.com. Keďže obrazy môžu byť pomerne veľké, sú navrhnuté tak, aby sa skladali z vrstiev iných obrazov, čo umožňuje posielať minimálne množstvo údajov pri prenose obrazov po sieti.

Miestne obrazy možno zobraziť spustením príkazu docker images:

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
<none>                    <none>              4ab0d9120985        3 months ago        486.5 MB

Niekoľko vecí, ktoré treba poznamenať:

  1. IMAGE ID je prvých 12 znakov skutočného identifikátora obrázka. Môžete vytvoriť mnoho značiek daného obrázka, ale ich ID budú všetky rovnaké (ako je uvedené vyššie).
  2. VIRTUÁLNA VEĽKOSŤ je virtuálna, pretože sa sčítavajú veľkosti všetkých odlišných podkladových vrstiev. To znamená, že súčet všetkých hodnôt v tomto stĺpci je pravdepodobne oveľa väčší ako priestor na disku, ktorý využívajú všetky tieto obrázky.
  3. Hodnota v stĺpci REPOSITORY pochádza z príznaku -t príkazu docker build alebo z príkazu docker tag-ing existujúceho obrazu. Obrazy môžete ľubovoľne označovať pomocou nomenklatúry, ktorá vám dáva zmysel, ale vedzte, že docker použije značku ako umiestnenie registra v príkaze docker push alebo docker pull.
  4. Úplný tvar tagu je [REGISTRYHOST/][USERNAME/]NAME[:TAG]. Pre vyššie uvedené ubuntu je REGISTRYHOST odvodený ako registry.hub.docker.com. Ak teda plánujete uložiť svoj obraz s názvom my-application do registra na adrese docker.example.com, mali by ste tento obraz označiť ako docker.example.com/my-application.
  5. Stĺpec TAG je len [:TAG] časť tagu full. Je to nešťastná terminológia.
  6. Tag latest nie je magický, je to jednoducho predvolený tag, keď nezadáte žiadny tag.
  7. Môžete mať neoznačené obrázky, ktoré sú identifikovateľné len pomocou ich IMAGE ID. Tie dostanú <none> TAG a REPOSITORY. Je'ľahké na ne zabudnúť.

Viac informácií o obrazoch nájdete v dokumentácii k nástroju Docker a slovníku pojmov.

Čo je to kontajner?

Ak použijeme metaforu programovania, ak je obraz trieda, potom kontajner je inštancia triedy - objekt na spustenie. Kontajnery sú, dúfajme, dôvodom, prečo používate Docker; sú to ľahké a prenosné zapúzdrenia prostredia, v ktorom sa spúšťajú aplikácie.

Zobrazenie lokálne spustených kontajnerov pomocou 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

Tu spúšťam dockerizovanú verziu docker registra, takže mám súkromné miesto na ukladanie svojich obrazov. Opäť si treba všimnúť niekoľko vecí:

  1. Podobne ako IMAGE ID, aj CONTAINER ID je skutočný identifikátor kontajnera. Má rovnaký tvar, ale identifikuje iný druh objektu.
  2. docker ps vypíše iba spustené kontajnery. Všetky kontajnery (spustené alebo zastavené) môžete zobraziť pomocou príkazu docker ps -a.
  3. Na identifikáciu spusteného kontajnera možno použiť príznak --name.

Ako sa vyhnúť hromadeniu obrazu a kontajnerov

Jednou z mojich prvých frustrácií z Dockera bolo zrejme neustále hromadenie neoznačených obrazov a zastavených kontajnerov. Pri niekoľkých príležitostiach malo toto hromadenie za následok maximálne vyťažené pevné disky, ktoré spomaľovali môj notebook alebo zastavovali môj automatizovaný build pipeline. Hovoríme o "kontajneroch všade"!

Všetky neoznačené obrazy môžeme odstrániť kombináciou docker rmi s nedávnym dotazom dangling=true:

docker images -q --filter "dangling=true" | xargs docker rmi

Docker nebude schopný odstrániť obrazy, ktoré sú za existujúcimi kontajnermi, takže možno budete musieť najprv odstrániť zastavené kontajnery pomocou docker rm:

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

Toto sú známe boľavé miesta nástroja Docker a môžu byť riešené v budúcich vydaniach. S jasným pochopením obrazov a kontajnerov sa však týmto situáciám dá predísť pomocou niekoľkých postupov:

  1. Vždy odstráňte nepoužiteľný, zastavený kontajner pomocou docker rm [CONTAINER_ID].
  2. Vždy odstráňte obraz za nepoužiteľným, zastaveným kontajnerom pomocou príkazu docker rmi [IMAGE_ID].
Peter Mortensen
Peter Mortensen
Edited answer 11 november 2019 в 2:27
549
0
Artificial intelligence to parse product page
productapi.dev
Adrian Mouat
Adrian Mouat
12 november 2014 в 11:14
2014-11-12T11:14:45+00:00
Viac na
Zdroj
Upraviť
#24619878

Hoci je najjednoduchšie predstaviť si kontajner ako bežiaci obraz, nie je to celkom presné.

Obraz je v skutočnosti šablóna, ktorú možno zmeniť na kontajner. Aby sa obraz zmenil na kontajner, mechanizmus Docker vezme obraz, pridá naň súborový systém na čítanie a zápis a inicializuje rôzne nastavenia vrátane sieťových portov, názvu kontajnera, ID a limitov zdrojov. Bežiaci kontajner má aktuálne vykonávaný proces, ale kontajner možno aj zastaviť (alebo exitovať v terminológii Docker'a). Ukončený kontajner nie je to isté ako obraz, pretože ho možno reštartovať a zachová si svoje nastavenia a všetky zmeny súborového systému.

Rob Bednark
Rob Bednark
Edited answer 1 január 2017 в 6:10
119
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
Анна Литвиненко
Registered pred dňom
2
Inessa bu
Registered pred mesiacom
3
Denis Babushkin
Registered pred mesiacom
4
asakuno asakuno
Registered pred mesiacom
5
aldo salerno
Registered pred mesiacom
Artificial intelligence to parse product page
productapi.dev
BG
DE
EL
ES
FR
ID
IT
JA
KO
NL
NO
PT
RO
RU
SK
SL
TR
ZH
© kzen.dev 2023
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora