Docker dla programistów


Spis treści:



Wstęp

Zgaduję że słyszałeś o Dockerze w kontekście mikroserwisów, lub konteneryzacji aplikacji, a już na pewno usłyszałeś słowo skalowalność co najmniej tysiąc razy...

Ten artykuł przedstawi wszystko w przystępny sposób. Po przeczytaniu go będziesz w stanie bez problemu stworzyć obraz Dockera dla swojej aplikacji.


Czym jest Docker

Pomijając wszystkie aspekty związane z aplikacjami webowymi, Docker to narzędzie do wirtualizacji na poziomie systemu operacyjnego.

Ale co to znaczy?

Pewnie jesteś zaznajomiony z wirtalnymi maszynami, które wykorzystają Hyper-V. One wirtualizują całą fizyczną maszynę. Docker wykorzystuje funkcję jądra Linux pod nazwą namespaces. W skrócie to dzięki nim możliwa jest separacja np. rootfs i interfejsów sieciowych. Dzięki czemu możemy odseparować od siebie pewne części systemu operacyjnego, uzyskując np. osobny root file system z osobnym interfejsem sieciowym, w którym możemy uruchomić, chociażby serwer HTTP.

Wszystko zaczyna się kleić. Prawda?


Do czego służy Docker

Aby nadal nie wchodzić w temat architektury, jako przykład podam tworzenie środowiska testowego.

Gdyby zaszła pilna potrzeba stworzenia środowiska testowego dla aplikacji, najprostszym sposobem byłoby stworzenie obrazu do jej testowania. Dzięki czemu nie będzie trzeba utrzymywać dwóch wersji aplikacji.

Jakieś obrazy, kontenery, co to dokładnie jest? - do tego przejdziemy w następnym punkcie


Instalacja i środowisko

Nie ma potrzeby opisywać instalacji dockera, bo została dobrze przedstawiona w jego dokumentacji https://docs.docker.com/engine/install/.


PRZECZYTAJ PO INSTALACJI

W przykładach poleceń nie występuje komenda sudo, aby również móc korzystać z dockera bez potrzeby ciągłego proszenie o uprawnienia trzeba stworzyć grupę użytkowników o nazwie docker i dodać do niej swojego użytkownika.

  1. Stworzenie grupy docker: sudo groupadd docker
  2. Dodanie użytkownika do grupy: sudo usermod -aG docker $USER
  3. Wylogowanie i zalogowanie sie do konta dodanego użytkownika

Obraz Docker

Obraz (docker image) - można nazwać szablonem, ponieważ zawiera szereg instrukcji do zbudowania kontenera.

Obraz można stworzyć za pomocą pliku Dockerfile z szeregiem instrukcji lub pobrać gotowy obraz ze zdalnego repozytorium DockerHub.

I jak to w praktyce wygląda? - Pobieranie obrazu ze zdalnego repozytorium

Na początku pokażę jak pobrać obraz ze zdalnego repozytorium. Posłużę się obrazem z serwerem Nginx https://hub.docker.com/r/nginxdemos/hello/.

Aby pobrać obraz należy użyć komendy pull.

nginxdemos/hello - to tak zwany tag obrazu

docker pull nginxdemos/hello

Teraz obraz nginxdemos/hello powinien znajdować się w lokalnym repozytorium. Można to sprawdzić za pomocą komendy images.

docker images

Zatem wiemy już jak pobrać gotowy obraz z repozytorium, do uruchomienia kontenera przejdziemy w następnym punkcie.

W jaki sposób samodzielnie stworzyć obraz?

W tym celu przygotowałem prosty skrypt w pythonie, który będzie częścią obrazu https://github.com/Techniczniej/Docker-1.

Dockerfile - jak już wcześniej wspominałem plik Dockerfile przechowuje szereg instrukcji, które budują obraz. ``` FROM python

RUN mkdir /app WORKDIR /app COPY main.py requirements.txt /app/ RUN pip3 install -r requirements.txt

CMD "python3" "main.py" ``` Teraz po kolei, co oznaczają te wszystkie instrukcje:

  1. FROM python

    • pobiera obraz pythona ze zdalnego repozytorium

  2. RUN mkdir /app
    • uruchamia polecenie mkdir /app
  3. WORKDIR /app
    • ustawia katalog roboczy na /app
  4. COPY main.py requirements.txt /app/
    • kopiuje dane pliki do katalogu /app
  5. RUN pip3 install -r requirements.txt
    • uruchamia dane polecenie
  6. CMD "python3" "main.py"
    • python3 main.py będzie domyślnym poleceniem wykonanym po uruchomieniu kontenera

Więc jak teraz zbudować ten obraz?

Do budowania obrazu służy komenda build.

docker build . -t techniczniej-hello

Flaga -t określa tag obrazu.


Kontener Docker

Kontener - to w skrócie instancja obrazu.

Zatem mamy już gotowe obrazy. Teraz spróbujmy uruchomić kontener z obrazem, który sami stworzyliśmy. Służy do tego komenda run.

docker run techniczniej-hello

Następny kontener, tym razem z obrazem nginxdemos/hello.

W tym wypadku w kontenerze będzie działał serwer HTTP, kontener ma własny interfejs sieciowy. Jeśli chcemy, aby serwer był dostępny na localhoście, musimy zmapować porty.

docker run -p 80:80 nginxdemos/hello

Jak widać serwer jest dostępny z poziomu localhosta, ale działa na interfejsie sieciowym kontenera 172.17.0.2.


Jak uruchomić kontener w tle?

docker run -d [obraz]


Jak sprawdzić działające kontenery?

docker ps


Jak zatrzymać kontener?

docker stop [id-kontenera]

ID kontenera uzyskasz przez polecenie docker ps.


Podobne artykuły