Wyślij zapytanie Dołącz do Sii

Obraz to jedno z podstawowych pojęć Dockera. Zrozumienie go stanowi punkt wyjścia do pracy z kontenerami. W tym wpisie zostało zdefiniowanie pojęcie obrazu oraz przedstawiono podstawowe operacje jakie można wykonać na obrazie.

Ten wpis jest częścią serii wpisów o Dockerze. Jeżeli jakieś pojęcie jest używane bez wyjaśnienia to prawdopodobnie zostało wprowadzone w jednym z wcześniejszych wpisów.

* Zachęcamy również do zapoznania się z odświeżonymi w grudniu 2021 i styczniu 2022 artykułami nt. Dockera, które znajdziecie pod tym wpisem.

Wstęp

Obraz jest ujednoliconą kolekcją warstw UFS (Union File System). Każda warstwa jest wynikiem wykonania pewnej czynności podczas tworzenia obrazu, np. instalacji pakietu, skopiowania danych, ustawienia zmiennej środowiskowej. Warstwy obrazu są dostępne tylko do odczytu (Rys. 1).

Graficzna interpretacja obrazu.
Rys. 1. Graficzna interpretacja obrazu.

Obraz stanowi podstawę do stworzenia kontenera. Nawiązując do programowania obiektowego relację pomiędzy obrazem i kontenerem można porównać do relacji pomiędzy klasą i jej instancją.

Pobieranie

Podstawowym źródłem obrazów jest repozytorium obrazów Dockera: docker hub. W repozytorium znajduje się wiele oficjalnych obrazów, np. ubuntu, postgres, redis, node oraz nieoficjalne obrazy stworzone przez użytkowników Dockera.

Obraz z repozytorium Dockera można pobrać za pomocą polecenia:

docker pull [nazwa obrazu]

Wszystkie nazwy obrazów zbudowane są w formacie: [nazwa repozytorium]:[tag]. Składowa [tag] pozwala zidentyfikować konkretną wersję obrazu w repozytorium, np. 15.04, stable. Składowa [tag] jest opcjonalna i w przypadku jej braku zostanie pobrana najnowsza wersja obrazu z repozytorium, która domyślnie jest oznaczana tagiem latest. Nazwy obrazów nieoficjalnych są dodatkowo poprzedzone nazwą użytkownika, do którego należy repozytorium: [nazwa użytkownika]/[repozytorium]:[tag].

docker pull ubuntu:15.10

Jeżeli obraz został już wcześniej pobrany wtedy Docker wykryje to i w razie potrzeby zaktualizuje go pobierając najnowsze warstwy. Jeżeli obraz nie istnieje lokalnie wtedy Docker pobierze wszystkie jego warstwy.

b3309467c75a: Pulling fs layer
3d46f652aa89: Pulling fs layer
b90ed059f9d0: Pulling fs layer
a427f0b2488f: Pulling fs layer

Wyświetlanie

Wszystkie lokalnie dostępne obrazy można wyświetlić za pomocą polecenia:

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              15.10               5eb72b199374        4 weeks ago         131.4 MB
redis               latest              0643f0c7d17d        4 weeks ago         109.2 MB
postgres            latest              b305a133422a        4 weeks ago         265.1 MB

Historia

Każdy obraz Dockera powstaje w wyniku wykonania szeregu poleceń. Każde z tych poleceń tworzy osobną warstwę obrazu. Listę wszystkich warstw składających się na obraz można wyświetlić za pomocą polcenia:

docker history [id lub nazwa obrazu]

Zapoznanie się z tym poleceniem może pomóc lepiej zrozumieć warstwową naturę obrazów i kontenerów Dockera. Poniżej znajduje się skrócony wykaz warstw obrazu postgres. Widać po nim, że każda warstwa jest wynikiem wykonania jakiegoś polecenia, np. instalacji pakietu, stworzenia zmiennej środowiskowej, stworzenia katalogu.

IMAGE               CREATED             CREATED BY                                      SIZE
[...]                               
11f38e247778        4 weeks ago         /bin/sh -c mkdir /docker-entrypoint-initdb.d    0 B          
f114dda4521b        4 weeks ago         /bin/sh -c ENV LANG=en_US.utf8                  0 B       
c27cdb916a4a        4 weeks ago         /bin/sh -c apt-get update && apt-get install    19.47 MB   
[...]

Polecenia tworzące warstwy obrazu można też przejrzeć czytając kod źródłowym obrazu. Plik z kodem źródłowym jest nazywany „Dockerfile”. Pliki źródłowe wszystkich obrazów znajdujących się w repozytorium Dockera są publicznie dostępne. Omówienie składni plików źródłowych obrazów jest tematem na osobny wpis i na tym etapie dobrze jest podejść do nich czysto poglądowo.

Usuwanie

Obraz można usunąć za pomocą polecenia:

docker rmi [nazwa lub id obrazu]

Docker nie dostarcza pojedynczego polecenia usuwającego wszystkie obrazy. Efekt ten można osiągnąć poprzez złożenie dwóch standardowych poleceń: znanego już docker rmi oraz docker images -q, które zwraca listę identyfikatorów wszystkich obrazów.

docker rmi $(docker images -q)

* Zaktualizowane w 2021 i 2022 artykuły nt. Dockera

Spis wpisów w serii

Kolejna seria postów dostępna od 10.02.2016

4.7/5 ( głosy: 6)
Ocena:
4.7/5 ( głosy: 6)
Autor
Avatar
Piotr Wierzgała

Programista Python zainteresowany tematyką uczenia maszynowego.

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Może Cię również zainteresować

Pokaż więcej artykułów

Bądź na bieżąco

Zasubskrybuj naszego bloga i otrzymuj informacje o najnowszych wpisach.

Otrzymaj ofertę

Jeśli chcesz dowiedzieć się więcej na temat oferty Sii, skontaktuj się z nami.

Wyślij zapytanie Wyślij zapytanie

Natalia Competency Center Director

Get an offer

Dołącz do Sii

Znajdź idealną pracę – zapoznaj się z naszą ofertą rekrutacyjną i aplikuj.

Aplikuj Aplikuj

Paweł Process Owner

Join Sii

ZATWIERDŹ

This content is available only in one language version.
You will be redirected to home page.

Are you sure you want to leave this page?