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.