Software Development

Docker: obraz, podstawowe operacje

Luty 4, 2016 0
Podziel się:

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.

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)

Spis wpisów w serii

Kolejna seria postów dostępna od 10.02.2016

4.7 / 5
Tagi: ,
Piotr Wierzgała
Autor: Piotr Wierzgała
Programista Python zainteresowany tematyką uczenia maszynowego.

Imię i nazwisko (wymagane)

Adres email (wymagane)

Temat

Treść wiadomości

Zostaw komentarz