Obraz dokera vs pojemnik

Obraz dokera vs pojemnik

Zrozumienie procesu, który Docker używa do przechowywania danych za pomocą obrazów i kontenerów, pomoże Ci lepiej zaprojektować aplikacje Docker. Obrazy Docker są jak szablony, podczas gdy kontenery Docker to działające instancje utworzone z tych szablonów. Docker używa warstwowego podejścia do przechowywania obrazów i kontenerów.

Obrazy i warstwy

Obraz dokera jest tworzony z wielu warstw. Jeśli weźmiemy przykład pliku dokera, każda instrukcja jest konwertowana na warstwę. Oto prosty plik dokujący:

Od węzła: 6.9.2
Kopiuj serwer.JS .
Serwer węzłów CMD.JS

Każda linia w powyższym pliku Dockerfile utworzy warstwę. Oświadczenie będzie szukało węzła: 6.9.2 Zdjęcie w rejestrze lokalnym. Jeśli go tam nie znajdzie, pobierze go z hub Docker. Wtedy Docker utworzy pierwszą warstwę. Następna instrukcja kopii dodaje serwer.plik JS do obrazu jako druga warstwa. Ostatnia warstwa obsługuje węzeł.Aplikacja JS. Wszystkie te warstwy są ułożone na siebie. Każda dodatkowa warstwa jest dodawana jako różnica od warstwy przed nią.


Pojemniki i warstwy

Pojemniki są tworzone z obrazów. Gdy pojemnik jest tworzony z obrazu, na obrazie umieszczana jest cienka warstwa odczytu/zapisu (zauważ, że warstwy obrazu są niezmienne, warstwy pojemnika nie). Wszelkie zmiany wprowadzone w pojemniku są umieszczane na tej warstwie odczytu/zapisu podczas życia kontenera. Gdy pojemnik zostanie usunięty, powiązana cienka warstwa odczytu/zapisu jest usuwana. Oznacza to, że wiele kontenerów może udostępniać ten sam obraz. Każda warstwa kontenera będzie bezpiecznie utrzymywać własne dane na obrazie Docker.


Obrazy i pojemniki

Wypróbujmy prosty przykład. Możesz użyć polecenia Docker Images, aby znaleźć wszystkie obrazy:

$ Docker Images
Repozytorium znacznika obrazu utworzone rozmiar

I polecenie Docker PS, aby znaleźć kontenery:

$ Docker Ps
Polecenie obrazu ID kontenera utworzone porty statusu nazwy

To jest nowa instalacja Docker. Więc nie ma obrazu ani pojemnika. Możesz uruchomić Docker Run -it Node: 6.9.2 polecenie, aby uruchomić pojemnik.

$ Docker Run -it Node: 6.9.2
Nie można znaleźć w węźle obrazu: 6.9.2 'lokalnie
6.9.2: pobieranie z biblioteki/węzła
75a822cd7888: Pull Complete
57DE64C72267: Pull Complete
4306be1e8943: Pull Complete
871436AB7225: Pull Complete
0110C26A367A: Pull Complete
1F04FE713F1B: Pull Complete
AC7C0B5FB553: Pull Complete
Digest: SHA256: 2E95BE60FAF429D6C97D928C762CB36F1940F4456CE4BD33FBDC34DE94A5E043
Status: pobrano nowszy obraz dla węzła: 6.9.2
>

Teraz, jeśli ponownie sprawdzimy obrazy Docker, znajdziemy:

$ Docker Images
Repozytorium znacznika obrazu utworzone rozmiar
Węzeł 6.9.2 FAAADB4AAF9B 11 miesięcy temu 655 MB

A jeśli sprawdzimy kontener, znajdziemy:

$ Docker Ps
Polecenie obrazu ID kontenera utworzone porty statusu nazwy
8C48C7E03BC7 Węzeł: 6.9.2 „węzeł” 20 sekund temu w górę 18 sekund Reverent_jackson

Jeśli uruchomimy inny pojemnik z tego samego obrazu za pomocą polecenia:

$ Docker Run -it Node: 6.9.2

I sprawdź ponownie, widzimy:

$ Docker Images
Repozytorium znacznika obrazu utworzone rozmiar
Węzeł 6.9.2 FAAADB4AAF9B 11 miesięcy temu 655 MB

I

$ Docker Ps
Polecenie obrazu ID kontenera utworzone porty statusu nazwy
96E6DB955276 Węzeł: 6.9.2 „węzeł” 24 sekundy temu w górę 23 sekundy cocky_dijkstra
8C48C7E03BC7 Węzeł: 6.9.2 „węzeł” 4 minuty temu 4 minuty reverent_jackson

Dwa pojemniki z ID pojemnika 96E6DB955276 i 8C48C7E03BC7 działają na obrazie Docker z ID FAAADB4AAF9B. Cienkie warstwy odczytu/zapisu pojemników Docker przebywają na warstwie obrazu dokera.

Poradnik:

Możesz usunąć kontenery Docker za pomocą Docker RM [Container ID] i usunąć obrazy Docker z Docker RMI [Image Id].

Węzeł obrazu: 6.9.2 Pobraliśmy z Docker Hub jest również tworzone przez łączenie wielu warstw. Możesz sprawdzić warstwy obrazów za pomocą Docker History [Image Id].

$ Docker History faaadb4aaf9b
Zdjęcie utworzone według rozmiaru
FAAADB4AAF9B 11 miesięcy temu /bin /sh -c #(nop) cmd [„node”] 0b
11 miesięcy temu/bin/sh -c curl -slo "https: // nodejs.org/d 42.5 MB
11 miesięcy temu /bin /sh -c #(nop) enve_version = 6.9.2 0b
11 miesięcy temu /bin /sh -c #(nop) env npm_config_loglevel 0b
11 miesięcy temu /bin /sh -c set -ex && dla klucza w 955 108 kb
11 miesięcy temu /bin /sh -c grupa
11 miesięcy temu /bin /sh -c apt-get aktualizacja && apt-get Insta 323MB

Wniosek

Popularnym sposobem wyjaśnienia obrazów i kontenerów jest porównanie obrazu z klasą i pojemnikiem z instancją tej klasy. Warstwowe podejście obrazów i kontenerów Docker pomaga utrzymać małe rozmiar obrazów i pojemników.

Bibliografia:

  • https: // dokumenty.doker.com/silnik/userguide/przechowywanie/imagesandContainers/
  • Obraz dokera vs pojemnik
  • https: // stackoverflow.COM/PYTANIA/23735149/DOCKER-IMAGE-VS-CONTAINER