2022-09-08-11-09-56-szkolenie-dockera-czesc-1-co-to-jest-docker.png

Szkolenie dockera część 3 - Obrazy dockera

W tym artykule zajmiemy się dockerem pierwszy raz w sposób praktyczny. Dowiesz się w jaki pobierać oraz zarządzać obrazami. Bez dalszego rozpisywania, poznajmy narzędzie o którym tyle przeczytaliśmy w poprzednich artykułach.

Nasz blog może się rozwijać dzięki naszym sponsorom. Nasz kurs dockera powstał dzięki współpracy z chmurami Vultr i tam dokładnie został przetestowany. Nasz szablon pochodzi z Envato MarketPlace. Wszystkie pluginy i elementy stron internetowych, jakie opisujemy, pochodzą z Envato Elements. Wszystkie książki, opisane na tym blogu, są dostepne u wydawcy Helion. Jesteśmy także partnerem Respondent.io, platformy, która płaci za testowanie aplikacji.

Korzystanie z dockera na koncie bez uprawnień administracyjnych

To co chcę zaprezentować w tym podrozdziale jest opcjonalne. Dlatego jeżeli nie chcesz dodać swojego konta do grupy docker tak aby nie korzystać z sudo możesz przejść do następnego.

Po pierwsze musimy sprawdzić czy została stworzona grupa przy instalacji dockera. Zrobimy to przy pomocy polecenia:

cat /etc/group | grep docker
docker:x:998:

Informacja którą otrzymaliśmy potwierdza, że została dodana grupa docker, ale nie jest przypisany do niej żaden użytkownik oprócz administratora. Naszym dalszym celem będzie dodanie naszego konta to grupy dockera tak aby wszelkie czynności w nim wykonywane nie wymagały uprawnień administracyjnych. Dokonamy tego przy pomocy polecenia:

sudo usermod -a -G docker nazwa-użytkownika 

cat /etc/group | grep docker
docker:x:998:nazwa-użytkownika

W bardzo prosty sposób dodaliśmy naszego użytkownika do grupy docker. Jednak aby można było skorzystać z udogodnień które wprowadziliśmy należy uruchomić ponownie komputer.

Po wykonaniu powyżej czynności sprawdźmy czy dodanie do grupy konta użytkownika zakończyło się powodzeniem:

docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:80f31da1ac7b312ba29d65080fddf797dd76acfb870e677f390d5acba9741b17
Status: Downloaded newer image for hello-world:latest

Hello from Docker!

Bez wykorzystania sudo pobraliśmy oraz uruchomiliśmy obraz hello-world. Tej czynności bez obecności w grupie nie bylibyśmy w stanie wykonać. W związku z tym wszystko działa poprawnie.

Moim zdaniem warto skorzystać z powyższego sposobu ponieważ przyspiesza nasze działania. Pozbywamy się konieczności pisania sudo, dzięki czemu ułatwiamy sobie pracę ponieważ nie musimy pamiętać o umieszczeniu go na początku polecenia.

Jesteśmy już w grupie dockera, dlatego teraz zajmijmy się nim bezpośrednio.

Obrazy w dockerze

Obraz jest pierwszym elementem z jakiego musimy skorzystać by móc stworzyć kontener. O tym pisałem w pierwszym artykule tej serii o dockerze dlatego jeżeli nie wiesz czym jest obraz to wróć właśnie tam.

Obrazy dockera możemy podzielić na dwa rodzaje:

  • obrazy podstawowe – są to obrazy najczęściej systemów operacyjnych takich jak debian czy też ubuntu;
  • obrazy pokrewne – są to zmodyfikowane obrazy podstawowe którym dodano na przykład nowe funkcje;

Powyższy podział dotyczy ogólnego rozumienia obrazów dockera. Wyjaśnić to bardziej logicznie można tak, że pobierasz obraz podstawowy który modyfikujesz dodając mu jakąś nową konfigurację czyli funkcję, a następnie udostępniasz. Taki obraz nazywamy obrazem pokrewnym.

Drugim podziałem występującym w obrazach dockera jest podział na:

  • obrazy oficjalne – czyli takie które są obsługiwane oraz utrzymywane na serwerze przez dockera. Takie obrazy są nazywane jednym słowem jak na przykład ubuntu czy też debian. Jednak występują wyjątki jak wcześniej poznany obraz hello-world;
  • obrazy użytkownika – czyli stworzone przez użytkownika. Różnią się samym zapisem przy ściągnięciu otóż w tym wypadku wpisujemy nazwa-użytkownika/nazwa-obrazu;

Na samym początku zajmiemy się obrazami oficjalnymi.

Obrazy oficjalne

Tak naprawdę jeżeli sprawdziłeś czy docker działa tak jak wskazałem przy instalacji to ściągnięcie oraz uruchomienie swojego pierwszego obrazu masz za sobą. Obraz hello-world jest obrazem oficjalnym, nadzorowanym przez samego dockera.

Jak pamiętasz przepisałeś polecenie nie wiedząc co dokładnie robisz. Dotrzymam swojej obietnicy którą złożyłem, ale jeszcze nie teraz. Zrobię to gdy zajmiemy się poleceniem run. Opiszę je dokładniej gdy rozpoczniemy uruchamiać obrazy oraz tworzyć kontenery. Czyli w następnym artykule tej serii. Dlatego mam nadzieję, że mi wybaczysz to, na jeszcze jakiś czas.

W tej chwili chciałbym byś wiedział, że jeżeli obraz jest zapisany w taki sposób to oznacza, że pochodzi z oficjalnego źródła.

Drugim i dla nas bardziej istotnym jest obraz systemu Ubuntu, z którego będziemy korzystać w przyszłości. Ubuntu jest oficjalnym obrazem dockera dlatego pobranie go polega na wpisaniu polecenia:

docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
125a6e411906: Pull complete 
Digest: sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Samo polecenie jest bardzo proste jak widać na powyższym przykładzie. W dockerze pobrać obraz można na kilka sposobów, ale jeżeli chcemy wykonać jedynie tę czynność bez uruchomienia powinniśmy skorzystać z polecenia pull.

Polecenie w tej formie ściągnie najnowszą dostępną wersję o czym świadczy informacja:

Using default tag: latest

Standardowo docker po wpisaniu jedynie nazwy obrazu dodaje do niego drugi człon jakim jest latest. Słowo latest z języka angielskiego oznacza najnowszy. Jednak nie zawsze tak musi być. Mamy możliwość wybrania wersji ściąganego obrazu. Aby tego dokonać należy dodać dwukropek po nazwie obrazu i wpisać jego wersję, jak w poniższym przykładzie:

docker pull ubuntu:17.10
17.10: Pulling from library/ubuntu
4ccdce43d1e0: Pull complete 
c95f13c88d92: Pull complete 
82656eee95ad: Pull complete 
78ff727be57a: Pull complete 
448bb314afa5: Pull complete 
Digest: sha256:3b811ac794645dfaa47408f4333ac6e433858ff16908965c68f63d5d315acf94
Status: Downloaded newer image for ubuntu:17.10
docker.io/library/ubuntu:17.10

Jak sam widzisz, nie jest to nic skomplikowanego. Po prostu wpisujesz wersję jakiej potrzebujesz, a docker automatycznie ściąga obraz.

Jednak nie będziesz korzystał tylko z oficjalnych źródeł, dlatego teraz zajmiemy się sposobami pobierania obrazów stworzonych przez użytkowników.

Obrazy użytkownika

W tej serii artykułów tworzymy laboratorium dzięki któremu rozpoczniemy swoją naukę hakingu. Z tego względu w tym miejscu ściągniemy system Kali Linux.

Kali Linux jest dystrybucją opartą o system Debian. Został wydany 13 marca 2013 roku jako przebudowa swojego poprzednika BackTrack Linux. Dystrybucja jest całkowicie zgodna ze standardami Debiana, a powstała z myślą o testach penetracyjnych oraz ogólną tematyką bezpieczeństwa w związku z tym jest idealnym dla nas narzędziem.

Kali Linux nie wchodzi w skład oficjalnych obrazów dockera. Tak naprawdę różnica pomiędzy oficjalnymi, a obrazami użytkownika polega jedynie w samym zapisie oraz o tym kto dba o aktualizowanie tych obrazów. W wypadku obrazów nieoficjalnych osobą odpowiedzialną za aktualizację jest sam użytkownik bądź jak w przypadku Kali Linux grupa użytkowników nad tym pracująca.

Pobranie obrazu nie wiele różni się od poznanego wcześniej sposobu co potwierdza poniższy przykład:

docker pull kalilinux/kali-rolling
Using default tag: latest
latest: Pulling from kalilinux/kali-rolling
2a33a7071311: Pull complete 
Digest: sha256:027783740ea9851480904cd0e2701bd5c356de66607869b124ed2d76ee00cba3
Status: Downloaded newer image for kalilinux/kali-rolling:latest
docker.io/kalilinux/kali-rolling:latest

Jedyną różnicą jest sam zapis.

Wiemy jak pobierać oficjalne oraz nieoficjalne obrazy dockera, nadeszła pora wyświetlić wszystkie jakie do tej pory pobraliśmy.

Wyświetlanie obrazów

Polecenie służące wyświetlaniu pobranych obrazów również nie jest skomplikowane dlatego od razu przejdźmy do przykładu:

docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
kalilinux/kali-rolling   latest    cd70c686e299   16 hours ago   126MB
ubuntu                   latest    d2e4e1f51132   2 weeks ago    77.8MB
hello-world              latest    feb5d9fea6a5   7 months ago   13.3kB
ubuntu                   17.10     e211a66937c6   3 years ago    100MB

Jeżeli wykonałeś wszystkie polecenia prezentowane dotychczas, twoja lista powinna być identyczna jak ta z przykładu. Przeanalizujmy wynik otrzymany po wprowadzenia docker image.

Myślę, że pierwsze dwie kolumny nie sprawią Ci żadnych kłopotów ze zrozumieniem. Następna czyli IMAGE ID, w niej znajduje się specjalny numer identyfikacyjny pod którym występuje dany obraz. W następnej znajduje się informacja kiedy ostatnio odbyła się aktualizacja pobranej wersji obrazu. Uwaga, chodzi tutaj o informację kiedy twórca, właściciel zaktualizował swój obraz, a nie kiedy go pobraliśmy. Ostatnia kolumna została określona jako SIZE czyli rozmiar. I w tym miejscu warto wspomnieć, że obrazy ściągnięte zabierają bardzo mało miejsca co potwierdza ta kolumna.

Pamiętaj, że nie mogą istnieć dwa obrazy o tych samych nazwach i wersjach.

Usuwanie zbędnych obrazów

Jak istotną umiejętnością jest usuwanie, nie muszę nikogo przekonywać. Nie raz zdarzy się, że pobierzemy jakiś obraz który będzie zajmował nam tylko miejsce, a my i tak nie będziemy z niego korzystać.

Zresztą, my taki obraz posiadamy.

Otóż pobraliśmy dwie wersje systemu Ubuntu. Jedna z nich jest najnowsza druga o parę wersji starsza. Z tej starszej nie będziemy korzystali, dlatego powinniśmy się jej pozbyć by zwolnić zajęte miejsce. Spójrz na poniższy przykład:

REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
ubuntu                   latest    d2e4e1f51132   2 weeks ago    77.8MB
ubuntu                   17.10     e211a66937c6   3 years ago    100MB

W tym wypadku mamy dwie możliwości. Pierwsza z nich polega na użyciu nazwy, natomiast druga na skorzystaniu z id. Spójrzmy co się się stanie jeżeli wybierzemy opcję pierwszą:

docker rmi ubuntu
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d
Deleted: sha256:d2e4e1f511320dfb2d0baff2468fcf0526998b73fe10c8890b4684bb7ef8290f
Deleted: sha256:e59fc94956120a6c7629f085027578e6357b48061d45714107e79f04a81a6f0c

Jak zauważyłeś do usuwania obrazów służy polecenie rmi. Rozwinięcie tego skrótu z języka angielskiego brzmi remove image czyli usuń obraz.

Korzystając z polecenia w taki sposób zrobiliśmy niepożądaną rzecz. Otóż usunęliśmy nie ten obraz który planowaliśmy. Zgodnie z informacjami z przykładu został usunięty najnowszy ponieważ nie użyliśmy określenia wersji czyli nie skorzystaliśmy z dwukropka. Jak już wiemy w tej sytuacji docker sam dodaje dwukropek i wpisuje tam słowo latest. Ponownie wpiszmy polecenie do wyświetlenia pobranych obrazów:

docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
kalilinux/kali-rolling   latest    cd70c686e299   17 hours ago   126MB
hello-world              latest    feb5d9fea6a5   7 months ago   13.3kB
ubuntu                   17.10     e211a66937c6   3 years ago    100MB

Jak widać na powyższym przykładzie wersji najnowszej ubuntu nie ma, została usunięta. Pozostała tylko 17.10 czyli ta której chcieliśmy się pozbyć. Aby usunąć konkretną wersję powinniśmy skorzystać z polecenia w trochę zmieniony sposób:

docker rmi ubuntu:17.10
Untagged: ubuntu:17.10
Untagged: ubuntu@sha256:3b811ac794645dfaa47408f4333ac6e433858ff16908965c68f63d5d315acf94
Deleted: sha256:e211a66937c610743566e2f0ac7d7e7652e2641d224af1c8c95f5402e59b0cc9
Deleted: sha256:1ba6859e98cc77dee89aea96a549e468ceb8e8f7af349abab81f54fb2f9dd8e2
Deleted: sha256:30e2a4b681368e2693403efc0ac196ef1a961fe6a82b40d1d2b4dbd7ab8942d8
Deleted: sha256:4f7e114f884bc8bbd2101e433e5fea3e6a29773801eb72015f4f44e769db458c
Deleted: sha256:cc08fb0d283cab25b3ecb532b6e9f20330d2409db519f99daae552ce8ab56940
Deleted: sha256:f1b91f8d903cf1125f78407b85f7513a427bfc69d851fff778461e53cc58acce

Możemy potwierdzić usunięcie przy pomocy wcześniej poznanego polecenia do wyświetlania obrazów:

docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
kalilinux/kali-rolling   latest    cd70c686e299   17 hours ago   126MB
hello-world              latest    feb5d9fea6a5   7 months ago   13.3kB

Obraz został usunięty. Z Ubuntu będziemy jeszcze później korzystać. Natomiast teraz chciałbym abyś samodzielnie pobrał obraz najnowszego Ubuntu i na przykład wersji 19.04. Następnie wrócił do tego miejsca i czytał dalej.

Po wykonaniu powyższych czynności twoja tablica obrazów powinna wyglądać mniej więcej tak jak w poniższym przykładzie:

docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
kalilinux/kali-rolling   latest    cd70c686e299   17 hours ago   126MB
ubuntu                   latest    d2e4e1f51132   2 weeks ago    77.8MB
hello-world              latest    feb5d9fea6a5   7 months ago   13.3kB
ubuntu                   19.04     c88ac1f841b7   2 years ago    70MB 

Lepszym sposobem na usunięcie obrazów jest skorzystanie z jego ID. W ten sposób jesteś pewny, że niezależnie od wersji jaką reprezentuje usuniesz ten którego chcesz się pozbyć. Spójrzmy na poniższy przykład gdzie usuwamy obraz Ubuntu w wersji 19.04:

docker rmi c88ac1f841b7
Untagged: ubuntu:19.04
Untagged: ubuntu@sha256:2adeae829bf27a3399a0e7db8ae38d5adb89bcaf1bbef378240bc0e6724e8344
Deleted: sha256:c88ac1f841b72add46f5a8b0e77c2ad6864d47e5603686ea64375acd55e27906
Deleted: sha256:abdb7d8268875cb246b29336cdc3e26a820e646829f852fa9c4420466398c1e6
Deleted: sha256:f7968871e4c6f0b9babd441ec117f6d7e43dd6a0ef75459170e84ca66707fe7b
Deleted: sha256:18a328936bc497aecff04c40fa53db558d31faac2f4edce2068d5e219758fbaa
Deleted: sha256:873cbe4bd21ee6f6ea264cfc50c0b35b0c3a00e2be3f82b30884c3b9da5db2db

Ubuntu u mnie zostało zapisane pod numerem id c88ac1f841b7, natomiast u Ciebie na pewno pojawi się pod innym, dlatego musisz zastąpić go swoim.

Na zakończenie potwierdzamy, że usunęliśmy obraz:

docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
kalilinux/kali-rolling   latest    cd70c686e299   18 hours ago   126MB
ubuntu                   latest    d2e4e1f51132   2 weeks ago    77.8MB
hello-world              latest    feb5d9fea6a5   7 months ago   13.3kB

Na liście mamy tylko najnowszą wersję wspomnianego systemu dlatego udało się usunąć niepotrzebny obraz.

Uwaga. Jeżeli będziesz chciał usunąć obraz hello-world otrzymasz informację:

docker rmi feb5d9fea6a5
Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced) - image is being used by stopped container 0e6886ec52df

Otrzymałeś taki błąd ponieważ do danego obrazu został stworzony kontener. Aby usunąć obraz posiadający stworzony kontener należy skorzystać z polecenia jak poniżej:

docker rmi -f feb5d9fea6a5

Korzystamy z dodatkowej opcji polecenia -f która wymusi usunięcie obrazu nawet jak ma stworzony kontener. Pamiętaj, aby po wymienionej opcji wpisać odpowiednie ID obrazu.

Obrazy Linuksowe, a Windowsowe

Zapewne pamiętasz jak wspomniałem, że możesz pobierać różne dystrybucje systemu Linux. W ten sposób instalujemy system bazowy, nie zawierający nic poza narzędziami niezbędnymi do jego uruchomienia. W taki sam sposób możemy pobierać obrazy Windowsowe.

W prezentowanych materiałach skupiam się jedynie na obrazach pochodzenia linuksowego. Przyczyną takiej decyzji jest ograniczenie jakie nałożył Microsoft na swoje obrazy czy też kontenery. Otóż na systemie Linux czy też MacOS nie jesteśmy w stanie oficjalnie uruchomić obrazów pochodzenia Windowsowego. Obrazy Microsoftu działają tylko i wyłącznie na systemach Windows i to na minimalnej wersji Profesional. Kolejnym elementem jest konieczność uruchomienia Hyper-V odpowiadającej za wirtualizację. Niestety uruchamiając ten program uniemożliwiamy działanie maszynom wirtualnym takich jak VirtualBox czy też VMWare. Oprogramowanie docker do kontenerów Windowsowych posiada swój system zarządzania wirtualizacją który zastępuje ten z którego korzystają wymienione programy.

W związku z powyższym nie będę zajmował się tematyką obrazów czy też kontenerów powiązanych z Windowsem.

Obrazy jak i również kontenery Linuksowe bez problemu uruchomisz na każdej z trzech platform. Możesz nawet do kontenerów po odpowiedniej konfiguracji doinstalować GUI czyli interfejs graficzny i korzystać z kontenera jak z systemu operacyjnego. Nie masz tutaj żadnych wymagań co do rodzaju systemu z jakiego korzystasz.

Jak szukać obrazów

W ostatnim podrozdziale zajmiemy się sposobem szukania obrazów. Otóż większość z was w tym i ja skorzysta z wyszukiwarki typu google. Jest to bardzo dobre rozwiązanie i w wielu przypadkach sprawdzi się doskonale. Jednak mamy jeszcze jedną opcje, szczególnie jeżeli znamy frazę poszukiwanego obrazu. W jednym z wcześniejszych podrozdziałów pobieraliśmy obraz o nazwie ubuntu. Teraz zobaczmy jakie możliwości otworzy przed nami polecenie do wyszukiwania po wpisaniu nazwy tego obrazu:

docker search ubuntu
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   14270     [OK]       
websphere-liberty                WebSphere Liberty multi-architecture images …   284       [OK]       
ubuntu-upstart                   DEPRECATED, as is Upstart (find other proces…   112       [OK]       
neurodebian                      NeuroDebian provides neuroscience research s…   89        [OK]       
open-liberty                     Open Liberty multi-architecture images based…   53        [OK]       
ubuntu/nginx                     Nginx, a high-performance reverse proxy & we…   48                   
ubuntu-debootstrap               DEPRECATED; use "ubuntu" instead                46        [OK]       
ubuntu/mysql                     MySQL open source fast, stable, multi-thread…   33                   
ubuntu/apache2                   Apache, a secure & extensible open-source HT…   30                   
kasmweb/ubuntu-bionic-desktop    Ubuntu productivity desktop for Kasm Workspa…   26                   
ubuntu/prometheus                Prometheus is a systems and service monitori…   24                   
ubuntu/squid                     Squid is a caching proxy for the Web. Long-t…   20                   
ubuntu/bind9                     BIND 9 is a very flexible, full-featured DNS…   19                   
ubuntu/postgres                  PostgreSQL is an open source object-relation…   17                   
ubuntu/redis                     Redis, an open source key-value store. Long-…   10                   
ubuntu/grafana                   Grafana, a feature rich metrics dashboard & …   6                    
ubuntu/prometheus-alertmanager   Alertmanager handles client alerts from Prom…   6                    
ubuntu/memcached                 Memcached, in-memory keyvalue store for smal…   5                    
ubuntu/kafka                     Apache Kafka, a distributed event streaming …   4                    
ubuntu/telegraf                  Telegraf collects, processes, aggregates & w…   4                    
ubuntu/cortex                    Cortex provides storage for Prometheus. Long…   3                    
ubuntu/zookeeper                 ZooKeeper maintains configuration informatio…   3                    
ubuntu/cassandra                 Cassandra, an open source NoSQL distributed …   2                    
ubuntu/loki                      Grafana Loki, a log aggregation system like …   0                    
bitnami/ubuntu-base-buildpack    Ubuntu base compilation image                   0                    [OK] 

Jak można zauważyć po samych wynikach wyszukiwania obrazów powiązanych z systemem Ubuntu jest bardzo dużo. Z informacji które otrzymaliśmy jesteśmy w stanie wyczytać wszystko co nam potrzebne. Czyli czym dany obraz jest, czy jest obrazem oficjalnym i tak dalej.

Osobiście rzadko korzystam z tego dobrodziejstwa, ale czasami może się przydać jeżeli szukamy jakiejś alternatywy do obrazu którego potrzebujemy.

Podsumowanie

Obrazy są podstawowym składnikiem funkcjonowania dockera. To z nich powstają kontenery którymi zajmiemy się w następnym artykule. Ważne jest abyś dobrze zrozumiał ogólny zarys obrazu, do czego jest Ci potrzebny oraz jak go pobrać. Nabyta wiedza tutaj jest podwaliną całości dlatego jeżeli czujesz się w jakiś sposób niepewnie przeczytaj jeszcze raz wszystkie informacje zawarte w tym materiale. Na pewno się przydadzą w twoim dalszym poznawaniu dockera.

Udostępnij

Porozmawiajmy o Twoich potrzebach

POROZMAWIAJMY O USŁUGACH, JAKICH POTRZEBUJESZ DLA SWOJEGO BIZNESU

Z chęcia pomożemy Ci wzrastać w wybranym przez Ciebie biznesie.