3. Agenda
1) Organizacja warsztatu.
2) Instalacja i konfiguracja Dockera.
3) Docker – kilka definicji.
4) Czym jest Docker? Dlaczego go używać?
5) Kontenery – koncepcja, uruchamianie, usługi.
6) Wolumeny.
7) Obrazy kontenerów – definiowanie, tworzenie, zarządzanie.
8) Komunikacja pomiędzy kontenerami i światem zewnętrznym.
9) Docker Compose.
10) Retrospekcja.
11) Dyskusja.
3
4. Organizacja warsztatu
▪ Warsztat - wykłady przeplatane dużą ilością
ćwiczeń
▪ Po każdym ćwiczeniu pokazuję rozwiązanie
▪ Ściśle ustalony harmonogram
▪ Przerwy co około 1 – 1,5h
▪ Lunch około 13:00
▪ Pytania – w trakcie
▪ Ankiety pod koniec warsztatu
4
5. Instalacja - wersje
▪ Darmowa wersja Community Edition
▪ Płatna wersja Enterprise Edition
▪ Natywna instalacja na dystrybujcach Linuxa
– CentOS, RHEL, Fedora, Ubuntu, ...
▪ Mac OS X korzysta z HyperKit VM
▪ Windows korzysta z Hyper-V
▪ Wsparcie dla Azure
▪ Wsparcie dla AWS
5
6. Czym jest kontener?
▪ Kompletna paczka zawierająca:
– Uruchomione procesy
– Aplikację
– Biblioteki
– Konfigurację środowiska
uruchomieniowego
– Zasoby
▪ Kontener jest odizolowany
6
8. Czym jest obraz kontenera?
▪ Cała zawartość dyskowa potrzebna do
uruchomienia kontenera.
▪ Zrzut, ‘snapshot’ kontenera
▪ Obraz w Dockerze ma historię
8
9. Obraz a kontener
▪ Uruchomienie obrazu tworzy kontener
– Do obrazu jest dodane środowisko
uruchomieniowe – pamięć, CPU
– Do obrazu są dodane procesy
▪ Zapisanie kontenera tworzy/aktualizuje obraz
9
10. Po co korzystać z Dockera?
▪ Prostota przygotowania złożonego środowiska od podstaw
▪ Łatwość dostarczenia aplikacji wraz z zależnościami
▪ Uproszczone wdrożenia
▪ Kontrola zużycia zasobów
▪ Izolacja od hosta oraz innych kontenerów
▪ Niewielki narzut zużycia zasobów
▪ Mikroserwisy
10
11. Ćwiczenie 1 – 5 minut
1) Uruchomić VirtualBox
2) Połączyć się po ssh (root/password)
3) Sprawdzić wersję Dockera
4) Sprawdzić listę dostępnych obrazów
11
docker --version
docker images
12. Uruchamianie kontenerów
Pomoc
1) Wyświetlenie opisu komendy
2) Wyświetlenie szczegółów obiektu, np. kontenera
3) Dokumentacja:
https://docs.docker.com/
12
docker help KOMENDA
docker inspect NAZWA lub HASH
13. Uruchamianie kontenerów
Uruchomienie POLECENIA wewnątrz kontenera:
Kontener działa tak długo, jak długo działa POLECENIE!
Obraz może definiować domyślne polecenie.
Przykład:
13
docker run [--name=NAZWA] OBRAZ [POLECENIE]
docker run centos echo "Pierwszy kontener"
16. Uruchamianie kontenerów
Dobre praktyki:
1) Jeden kontener – jedno zadanie
2) Uruchomienie kontenera powinno zajmować jak najmniej
czasu – większość konfiguracji w obrazie
3) Usługa uruchomiona w kontenerze powinna zapewnić
obsługę sygnałów („docker stop” wysyła SIGTERM)
4) Współdzielone dane w wolumenach
16
17. Ćwiczenie 2 – 10 minut
1) Uruchomić kontener z obrazu centos
2) Kontener o nazwie „hello-container”
3) Kontener ma wyświetlić „Hello Container””
4) Sprawdzić, czy kontener jest aktywny
17
18. Uruchamianie kontenerów
Kopiowanie plików do kontenera
Kopiowanie plików z kontenera
18
docker cp PLIK KONTENER:MIEJSCE_DOCELOWE
docker cp KONTENER:PLIK MIEJSCE_DOCELOWE
19. Uruchamianie usług w
kontenerach
Wariant 1 – polecany
1) Utworzyć plik sterujący wywołaniem – uruchamiający usługi
i kontrolujący stan
2) Plik sterujący nie może się kończyć przez zakończeniem
aplikacji
3) Wywołać plik sterujący jako KOMENDĘ dla kontenera
19
20. Uruchamianie usług w
kontenerach
Wariant 2
Warunki konieczne wyboru wariantu:
1) Pewność, że uruchamiany program się nie kończy.
2) Pewność, że program obsługuje sygnały.
Program jest KOMENDĄ polecenia docker run, np.
20
docker run -d … … … mysql:5.7 mysqld
21. Uruchamianie usług w
kontenerach
Wariant 3
1) Uruchomić kontener z nieskończonym procesem, np.
2) Uruchomić program
21
docker run -dt OBRAZ tail -f /dev/null
docker exec KONTENER KOMENDA
23. Uruchamianie usług w
kontenerach
Zatrzymanie kontenera
Proces wewnątrz kontenera otrzyma sygnał SIGTERM, a po
określonym czasie SIGKILL.
Alternatywa – zatrzymanie głównego procesu
uruchomionego w kontenerze
23
docker stop KONTENER
25. Ćwiczenie 3 – 20 minut
Uruchomić serwer www Apache Http
UWAGA – polecenie docker run musi mieć dodatkowy argument:
Wykorzystać obraz „centos” - ma zainstalowany httpd
Polecenie uruchamiające usługę – httpd
Polecam wariant 3
Wynik – wyświetlona strona http://localhost:8080/
Dodatkowe zadanie: umieścić plik ~/index.html w
kontenerze w lokalizacji /var/www/html
25
docker run -p 8080:80 ...
26. Kontenery – zasoby i pamięć
Proces w kontenerze może spowodować „Out of Memory
Error” hosta!
Ustawienie limitu pamięci dla kontenera:
Jednostkę ustawiamy jako:
b, k, m, g
26
docker run --memory=”10m” ...
27. Kontenery – zasoby i pamięć
Proces wewnątrz kontenera może wykorzystać cały czas
procesora
Ograniczenie przydzielonego czasu procesora:
Liczba określa ile rdzeni ma zostać przydzielone
27
docker run --cpus=”0.5” …
28. Ćwiczenie 4 – 15 minut
1) Uruchomić kontener w trybie interaktywnym
2) Uruchomić test obciążenia
3) Zamknąć kontener, uruchomić ponownie:
4) Z ograniczeniem 100MB pamięci
5) Z ograniczeniem 0.2 CPU
6) Obserwować zużycie zasobów w top
28
stress --cpu 2 --vm 1 --vm-bytes 1G --timeout 120s &
29. Storage driver
●
Mechanizm zarządzania danymi wewnątrz kontenerów i
obrazów
●
Dostępnych jest kilka implementacji, w zależności od wersji
Dockera oraz systemu operacyjnego hosta
●
Docker przedstawia posortowaną listę rekomendowanych
implementacji:
Select a storage driver
29
30. Wolumeny
Dane wewnątrz kontenerów są zarządzane przez Docker
Dane współdzielone/trwałe powinny być zarządzane
bezpośrednio przez system plików hosta
▪ Wydajność (storage driver)
▪ Przenaszalność
▪ Współdzielenie
▪ Bezpieczeństwo
30
34. Obrazy kontenerów
Jeśli obraz nie jest dostępny lokalnie, Docker szuka obrazu
w repozytorum DockerHub
https://hub.docker.com/
Manualne pobranie obrazu:
34
docker pull NAZWA_OBRAZU
37. Obrazy kontenerów
Wczytanie pliku i utworzenie z niego obrazu systemu:
Wczytanie obrazu Docker
37
docker import PLIK.tar
docker load -i PLIK.tar
38. Ćwiczenie 6 – 10 minut
1) Zapisać stan kontenera jako obraz o nazwie httpd:warsztat
2) Wyeksportować powyższy obraz do pliku
3) Usunąć obraz httpd poleceniem:
4) Wczytać obraz z pliku
Podpowiedź:
Nie można usunąć obrazu, jeśli istnieją uruchomione z
niego kontenery.
38
docker rmi OBRAZ
39. Dockerfile
Dockerfile - plik zawierający definicję obrazu
1) Obraz źródłowy
2) Lista komend do wykonania podczas tworzenia obrazu
3) Komendy do automatycznego uruchomienia
4) Udostępnione porty
5) Wolumeny danych
39
40. Dockerfile - uruchomienie
Uruchomienie w katalogu z plikiem „Dockerfile”
Zazwyczaj kontekst to aktualny katalog
Kontekst – tylko niezbędna zawartość!
40
docker build KONTEKST
docker build .
42. Dockerfile - składnia
Polecenie uruchamiające komendy w trakcie tworzenia
obrazu
42
RUN KOMENDA
RUN ["KOMENDA", "PARAM1", "PARAM2"]
43. Dockerfile - składnia
Domyślne polecenie które zostanie uruchomione podczas
tworzenia kontenera:
Tylko ostatnie polecenie jest efektywne!
43
CMD KOMENDA
CMD ["KOMENDA", "PARAM1", "PARAM2"]
45. Dockerfile - składnia
Kopiowanie pliku z kontekstu do kontenera
Zmiana katalogu dla kolejnych poleceń
45
COPY CO_SKOPIOWAĆ MIEJSCE_DOCELOWE
WORKDIR /katalog
47. Dockerfile - oficjalny przykład
Źródło: Docker Labs - NodeJS application
47
FROM node:4.4.5
COPY . /app
WORKDIR /app
RUN npm install
CMD ["npm","start"]
48. Ćwiczenie 7 – 30 minut
1) Stworzyć Dockerfile dla MongoDB
2) Stworzyć obraz z MongoDB
3) Uruchomić kontener z MongoDB
4) Wykorzystać obraz centos
5) Plik z binariami dla MongoDB:
/root/mongodb-linux-x86_64-3.4.10.tgz
Dokumentacja instalacji MongoDB
48
49. Ćwiczenie 7 – 30 minut
Mongodb – części składowe
Uruchomienie serwera:
Uruchomienie Mongo Shell
49
mongod
mongo
50. Ćwiczenie 7 – 30 minut
Użyć obrazu centos
1) Skopiować i rozpakować binaria MongoDB
2) Dodać lokalizację binariów do zmiennej PATH
3) Utworzyć volumen /data/db
4) Uruchomić kontener w trybie interaktywnym
5) Uruchomić serwer MongoDB w tle - „mongod &”
6) Uruchomić konsolę MongoDB - „mongo”
7) W konsoli wpisać „db”, co zweryfikuje połączenie
50
51. Komunikacja ze światem
zewnętrznym
Udostępnienie i mapowanie portów
Możliwość podania zakresu, np.
Dockerfile - polecenie EXPOSE – tylko jako dokumentacja!
51
docker run -p [IP]:[PORT_HOSTA]:PORT_KONTENERA …
docker run -p 8080-8090:8080-8090
52. Ćwiczenie 8 – 10 minut
Uruchomić kontener MongoDB o nazwie „mongo_server”
z wystawionym portem domyślnym: 27017.
Połączyć się do MongoDB z hosta.
Mongo Shell jest zainstalowane na hoście.
52
53. Komunikacja kontenerów
Stare podejście – linki
Link pomiędzy kontenerami pozwala na komunikację
sieciową korzystając z nazwy kontenera jako nazwy
sieciowej
Utworzenie linku
53
docker run --link INNY_KONTENER:ALIAS ...
54. Komunikacja kontenerów
Nowe podejście – Docker networks
●
Wykorzystanie niezależnych sieci
●
Kontenery można podłączać do sieci
●
Wiele kontenerów podłączonych do wielu sieci
●
Kontenery komunikują się korzystając ze swoich nazw
54
55. Komunikacja kontenerów
Nowe podejście – Docker networks
Wszystkie kontenery podpięte do jednej sieci mogą się
komunikować
●
Kontenery można podłączać do sieci
●
Trzy sieci dostępne automatycznie:
– bridge - domyślna
– none – brak zdefiniowanej komunikacji
– host – współdzielenie sieci z hostem
55
58. Ćwiczenie 9 – 15 minut
1) Utworzyć nową sieć o nazwie „mongo”
2) Podłączyć kontener mongo_server do sieci
3) Uruchomić nowy kontener (klienta) podłączony do sieci.
4) Kontener (klienta) w trybie interaktywnym.
5) Połączyć się z serwerem:
58
mongo mongo_server:27017
59. Docker Compose
●
Dockerfile - tworzenie pojedynczego obrazu
●
Docker compose – uruchomienie wielu kontenerów
●
Komenda CLI „docker-compose”
●
Konfiguracja za pomocą pliku „docker-compose.yml”
59
60. Docker Compose
Polecenia najlepiej wykonywać w katalogu z plikiem yml.
Uruchomienie
Zatrzymanie
60
docker-compose up
docker-compose down
61. Docker Compose
Elementy definiowane w pliku konfiguracyjnym:
●
services – usługi, kontenery które mają być uruchomione
●
networks – sieci, które mają być utworzone
●
volumes - wolumeny, które mają być utworzone
Specyfikacja
https://docs.docker.com/compose/compose-file/
61
63. Docker Compose
●
Domyślnie tworzona jest sieć „myapp_default”
●
Domyślnie kontenery są podłączane do powyższej sieci
63
networks:
NOWA_SIEĆ:
driver: bridge
ISTNIEJĄCA_SIEĆ:
external:
name: wcześniej-utworzona-sieć
64. Ćwiczenie 10 – 40 minut
Za pomocą Compose uruchomić mysql i wordpress.
Najlepiej korzystać z dokumentacji docker-compose
Wykorzystać dostępne obrazy:
●
mysql:5.7
●
Wordpress
Dodatkowo – zainstalować phpmyadmin.
64
65. Retrospekcja
1) Instalacja i konfiguracja Dockera.
2) Docker – kilka definicji.
3) Czym jest Docker? Dlaczego go używać?
4) Kontenery – koncepcja, uruchamianie, usługi.
5) Wolumeny.
6) Obrazy kontenerów – definiowanie, tworzenie, zarządzanie.
7) Komunikacja pomiędzy kontenerami i światem zewnętrznym.
8) Docker Compose.
9) Dyskusja.
65
67. Szkolenie dedykowane dla Ciebie
67
Interesuje Cię tematyka warsztatu?
Zapoznaj się z programem szkolenia Sages:
• Wprowadzenie do technologii Docker
Dla uczestników dzisiejszego warsztatu zniżka na to
szkolenie w wysokości 35%
70. Dyskusja
1) Docker Swarm
2) Alternatywy dla Dockera
3) Problemy z korzystaniem z kontenerów
4) Docker na inne platformy – ARM
5) Docker a obliczenia na kartach graficznych
6) Bezpieczeństwo
7) Przykłady użycia z mojego doświadczenia
8) Dyskusja.
70