Docker część I: podstawy podstaw

Mój poprzedni post dotyczył stworzenia środowiska służącego do programowania w Assemblerze opartym na Dockerze. Jednak czym ten Docker jest i dlaczego nie należy się go bać? W tym wpisie przedstawię podstawową wiedzę o Dockerze. Podzielony on będzie na 3 części: podstawy teoretyczne(baardzo krótkie ;)), kilka podstawowych komend oraz uruchomienie przykładowego hello world na kontenerze dockerowym w Pythonie. Zaczynajmy

Nieco teorii

Więc czym ten Docker jest? Jest to platforma służąca konteneryzacji, czyli tworzeniu odizolowanych środowisk, na działanie których nie ma wpływu nasza maszyna. Konteneryzacja ma wiele zalet, eliminuje na przykład problemy związane z różnicami pomiędzy maszyną developerską, maszyną testową oraz maszyną produkcyjną – program odpalony na kontenerze dockerowym na każdej z tych maszyn będzie działał tak samo.
Każdy kontener jest tworzony na podstawie obrazu, zawierającego jedynie podstawowe biblioteki potrzebne do działania kontenera, co czyni obrazy oraz kontenery znacznie lżejszymi od obrazów odpalanych na VirtualBoxie.
Jak już wspomniałem o VirtualBoxie warto nadmienić, iż nomenklatura(takie trudne słowo ;D) jest w obu przypadkach inna. Na VirtualBoxie odpalamy obrazy systemu, którego aktualnie potrzebujemy. Na Dockerze obrazy są swego rodzaju szkieletem, na podstawie którego tworzymy po prostu kontener. Tak więc obraz na VirtualBoxie!=obraz na Dockerze, należy o tym pamiętać.
To na tyle z podstawowej teorii, miało być jej w końcu tylko nieco 😉

Podstawowe komendy

Aby zacząć korzystać z dockera należy go najpierw zainstalować.Kiedy już to zrobimy, odpalamy go a następnie odpalamy konsolę/terminal, w zależności od tego, na jakim systemie operujemy. Poniżej przedstawiam listę komend, które trzeba znać, zaczynając swoją przygodę z dockerem:

docker help

Podstawowa komenda, dzięki której możemy sprawdzić składnię oraz wyszukać inne komendy

docker images

Komenda, która pokazuje nam wszystkie nasze pobrane obrazy

docker search [imageName:imageTag]

Komenda, która wyszukuje w internecie obrazy o podanej nazwie oraz tagu. Tag określa nam na przykład wersję systemu na obrazie (dla przykładu ubuntu:14.04 oraz ubuntu:16.04). Jeśli nie podamy tagu zostanie użyty domyślny tag :latest.

docker run [args] [imageName:imageTag/imageId]

Komenda która służy do stworzenia oraz uruchomienia kontenera z obrazu, którego nazwę lub id podamy(w przypadku id wystarczą nam pierwsze 3 znaki). Jeśli posiadamy kilka wersji tego samego systemu(patrz przykład wyżej) podajemy również tag.
Run to funkcja, która przyjmuje argumenty, w zależności od których wykonuje dodatkowe zadania. Podstawowe argumenty to:
“-i”-dodanie strumienia wejścia do naszego kontenera
“-t”-dodanie sztucznego terminala, dzięki któremu możemy zarządzać kontenerem(link)
“–expose [containerPort]”-pozwala nam wystawić port naszego kontenera za zewnątrz, najczęściej używany razem z “-p”
“-p localPort:containerPort”-mapujemy wystawiony port naszego kontenera na port naszego localhosta, najczęściej używany razem z “–expose”
“-d”-odpala nasz kontener w tle, mamy dostęp tylko do portów wystawionych przez komendę wyżej

docker ps [args]

Komenda pokazująca nam nasze działające kontenery. Jeśli chcemy zobaczyć również te niedziałające, należy podać argument “-a”.

docker kill/stop [containerName/containerId]

Komendy służące do wyłączenia działającego kontenera. Komenda “kill” wyłącza kontener od razu, przerywając działanie wszystkich procesów, przez co jest mniej bezpieczna od “stop”, która czeka na zakończenie każdego procesu.

docker docker start [args] [containerName/containerId]

Komenda służąca do odpalenia wyłączonego uprzednio kontenera. Posiada takie same argumenty jak komenda “run”.

docker docker rename [containerOldName] [containerNewName]

Komenda służąca zmianie nazwy kontenera.

docker rm [containerName/containerId]

Komenda służąca do usunięcia z naszego komputera kontenera o podanej nazwie lub id.

docker rmi [imageName:imageTag/imageId]

Komenda służąca do usunięcia z naszego komputera obrazu o podanej nazwie i tagu lub id.
To tyle, jeśli chodzi o podstawowe komendy dotyczące dockera. Po więcej informacji zapraszam tutaj

Przykład

Na sam początek zrobimy coś bardzo prostego, czyli odpalimy hello world w pythonie na ubuntu 16.04. Zaczynajmy ;>
Pierwszym naszym krokiem będzie znalezienie naszego obrazu:

Screen Shot 2017-08-10 at 19.29.20
Skoro wiemy, że taki istnieje, pobierzemy go, a następnie sprawdzimy, czy na pewno się pobrał:

Screen Shot 2017-08-10 at 19.32.26.png
Czas więc odpalić nasz pierwszy kontener. Odpalamy go z argumentami “-i” oraz “-t”, abyśmy mogli nim zarządzać. Argumenty można łączyć, tak więc nasz a komenda wygląda tak:

Screen Shot 2017-08-10 at 19.34.25
Jak widać na załączonym obrazku znajdujemy się na roocie, przez co nie musimy używać sudo do instalacji. Kolejnym krokiem będzie odpalenie komendy

 apt-get update && apt-get install python3 nano -y

aby zainstalować w naszym kontenerze pythona w wersji 3.6 oraz nano, w którym będziemy pisać nasz kod. Aby nie musieć ciągle potwierdzać naszej decyzji odpalimy to z argumentem “-y” 😉
Po skończonej instalacji tworzymy katalog hello oraz plik hello.py komendami

 mkdir hello && cd hello && nano hello.py

Odpaliliśmy właśnie nano, czyli terminalowy edytor tekstu. Piszemy nasz program w pythonie:

Screen Shot 2017-08-10 at 19.40.38.png
a następnie zapisujemy wszytko kombinacją klawiszy ctrl+x, zapisując zmiany, kiedy nano nas o to zapyta. Pozostało nam tylko odpalić naszego hello worlda:

Screen Shot 2017-08-10 at 19.42.11

Podsumowanie

Tym sposobem odpaliliśmy nasz pierwszy kontener oraz uruchomiliśmy w nim typowego hello worlda. Dotarliśmy również do końca tego artykułu 😉 Okazał się on nieco dłuższy niż zakładałem. W kolejnej, nieco krótszej, części przedstawię podobny przykład w ASP.Net Core.

Do przeczytania niedługo 😉

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s