Docker i Docker Compose to popularne wśród deweloperów narzędzia do konteneryzacji i orkiestracji kontenerów, które wypierają wcześniej stosowaną wirtualizację. Dzięki nim możemy opisywać infrastrukturę za pomocą kodu, utrzymywać jej spójność w ramach zespołu deweloperskiego oraz wersjonować ją. Znacznie ułatwia to rozwijanie złożonych z wielu usług aplikacji.
Prezentacja zawiera krótkie wprowadzenie do tych narzędzi oraz pokazuje kilka użytecznych i ułatwiających pracę trików. Prezentuje również stworzone przeze mnie open-source'owe narzędzie Feater, służące do dynamicznego tworzenia izolowanych środowisk testowych i demonstracyjnych. Dzięki wykorzystaniu przez nie konteneryzacji, można je szybko wdrożyć w typowym wykorzystującym Docker Compose projekcie
Exam: 70-511 Enhancing Usability - Windows Application
Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose
1. Przenieś się do kontenera
czyli korzyści z Docker i Docker Compose
Mariusz Bąk
PHPers Silesia, 26 czerwca 2019
2. Mariusz Bąk
Od 9 lat pracuje jako programista
PHP/Symfony w Boldare/XSolve.
Programuje nałogowo, ale
szczęśliwie ktoś mu za to płaci.
Najbardziej lubi implementować
złożoną logikę biznesową,
na przykład złożone warstwy
kontroli dostępu.
Używa jasnego motywu w IDE.
Twitter:
@mariuszalefbak
LinkedIn:
linkedin.com/in/mariuszalefbak/
GitHub:
github.com/malef
4. Cechy konteneryzacji
Zamiast emulować warstwę sprzętu i izolować system operacyjny,
izolujemy aplikację (procesy) z wymaganymi przez nie zależnościami.
Podstawowe cechy to:
standaryzacja, przenośność, lekkość oraz izolacja.
Pozwala przedstawić infrastrukturę jako kod i zmniejszyć ilość
wymaganej dokumentacji.
9. Używanie
narzędzi
bez lokalnej
instalacji
$ docker run --rm --interactive --tty
-v /home/malef/my_app:/app
composer
install --ignore-platform-reqs --no-scripts
$ docker run --rm
-v /home/malef/my_app:/app
phpstan/phpstan
analyze /app/src
Instalacja zależności
za pomocą Composera
oraz analiza statyczna
z wykorzystaniem
PHPStan
15. Używanie
narzędzi
bez lokalnej
instalacji
$ docker run --rm
-v /var/run/docker.sock:/var/run/docker.sock
-v /home/malef/my_app:/app
-w /app/.docker
-e COMPOSE_PROJECT_NAME=foo
docker/compose:1.24.1
up -d
W ten sam sposób
można używać
Docker Compose
19. version: "3"
services:
# ...
db:
image: mysql:5.7
container_name: my_app_db
volumes:
- ./mysql/config.cnf:/etc/mysql/conf.d/config.cnf
Przykładowa
konfiguracja
Docker Compose
projektu
Szybki import
bazy danych
20. version: "3"
services:
# ...
db:
image: mysql:5.7
container_name: my_app_db
volumes:
- ./mysql/config.cnf:/etc/mysql/conf.d/config.cnf
- my_app_db_data:/var/lib/mysql
volumes:
my_app_db_data:
external: true
Dodanie
zewnętrznego
wolumenu Dockera
na dane MySQL
Szybki import
bazy danych
21. $ docker volume create my_app_db_data
$ docker-compose up -d
# Import bazy danych w tradycyjny sposób.
Uruchomienie
konfiguracji
i pierwszy import
bazy danych
Szybki import
bazy danych
22. $ docker volume create my_app_db_data_backup
$ docker run --rm
-v my_app_db_data:/source
-v my_app_db_data_backup:/target
alpine:latest
ash -c "cp -rTv /source /target"
Utworzenie kopii
zapasowej wolumenu z
danymi MySQL
Szybki import
bazy danych
23. Szybki import
bazy danych
$ docker stop my_app_db
$ docker rm my_app_db
$ docker volume rm my_app_db_data
$ docker volume create my_app_db_data
$ docker run --rm
-v my_app_db_data_backup:/source
-v my_app_db_data:/target
alpine:latest
ash -c "cp -rTv /source /target"
$ docker-compose up -d
Odtworzenie danych
z kopii zapasowej
24. Szybki import bazy danych
Bardziej szczegółowy opis na blogu technicznym Boldare:
tech.boldare.com/quick-import-of-mysql-database-dump/
Gotowy skrypt do klonowania wolumenów Dockera
autorstwa Guido Diepena:
guidodiepen.nl/2016/05/cloning-docker-data-volumes/
github.com/gdiepen/docker-convenience-scripts
26. Problemy, które rozwiązuje Feater
Testowanie funkcjonalności w izolacji.
Nowe funkcjonalności powinny być testowane
przed scaleniem ich z główną gałęzią
repozytorium, żeby zapewnić jej maksymalną
stabilność. Wymaga to jednak wielu
niezależnych środowisk testowych.
27. Problemy, które rozwiązuje Feater
Łatwe demonstrowanie.
Jeśli bez dużego nakładu pracy możemy
przygotować środowisko demonstracyjne,
łatwiej jest dyskutować nad kierunkiem rozwoju
produktu. Dzięki temu wcześniej możemy
identyfikować potencjalne problemy.
28. Czym jest Feater
Feater jest narzędziem do szybkiego
udostępniania wybranych funkcjonalności
aplikacji za pośrednictwem izolowanych
środowisk testowych lub demonstracyjnych.
29. Czym jest Feater
Jest rozwiązaniem open-source.
Jest udostępniany na licencji MIT. Możesz
używać go za darmo, jak również wprowadzać
dowolne modyfikacje.
30. Czym jest Feater
Jest niezależny od technologii.
Może być użyty dla aplikacji napisanych w
dowolnym języku i korzystających z dowolnych
zależności. Jest to możliwe, ponieważ do
tworzenia środowisk wykorzystuje kontenery
Dockera oraz konfiguracje Docker Compose.
31. Czym jest Feater
Jest łatwy w użyciu.
Jeżeli dany projekt wykorzystuje już
konfigurację Docker Compose i skrypty służące
do jego zbudowania, to niewiele potrzeba, aby
móc uruchamiać go za pomocą Featera.
32. Czym jest Feater
Jest łatwy w hostowaniu.
Sam działa w kontenerze Dockera, więc łatwo
możesz użyć go zarówno lokalnie, jak i na
dedykowanym serwerze.
34. Podstawowe pojęcia
Instancja to pojedyncze środowisko zbudowane
w oparciu o definicję oraz kod pochodzący
z określonych rewizji repozytozytoriów
wchodzących w skład produktu.
35. Podstawowe pojęcia
Definicja zawiera przepis na stworzenie instancji
wskazujący rewizje kodu źródłowego, źródła
danych dla wolumenów, komendy do wykonania,
zmienne środowiskowe czy porty do
wyeksponowania. W oparciu o jedną definicję
można zbudować wiele niezależnych instancji.
36. Podstawowe pojęcia
Zasób to plik, który może być skopiowany do
kontenera należącego do instancji albo
wykorzystany do stworzenia wstępnie
wypełnionego danymi wolumenu Dockera.
40. Uruchomienie
Dostępna jest przykładowa aplikacja PHP/Symfony.
Wykorzystuje ona MySQL, Elasticsearch oraz Mailcatchera
i jest dostosowana do wykorzystania z Featerem:
github.com/feater-dev/symfony-example
45. Ograniczenia konfiguracji Docker Compose
Niektóre elementy konfiguracji nie mogą być wykorzystywane
w przypadku użycia Featera, bo uniemożliwiałyby stworzenie
jednocześnie kilku instancji.
Nie jest możliwe eksponowanie portów za pomocą expose
- zamiast tego należy wykorzystać sekcję proxied_ports receptury.
Nie jest możliwe nazywanie kontenerów za pomocą container_name
- nazwy zostaną wygenerowane dynamicznie, a identyfikatory
kontenerów będą dostępne jako zmienne środowiskowe.
48. Opinie klientów i użytkowników
Our development process heavily depends on
Feater. It is a flexible, easily configurable and reliable
solution for acceptance environments.
Issam Najm
CTO at MATIC
49. Opinie klientów i użytkowników
Feater makes our lives easier. I can easily provide our
QA testing environment for my PRs in isolation
even if it includes changes in multiple
repositories/micro-services.
Muhammad Shaker
Tech Lead at MATIC
50. Opinie klientów i użytkowników
Feater allows us to create our entire stack of
applications and microservices having different
technologies with a single click. In an environment
where we have multiple teams working together,
it has empowered us to implement Git Flow
and all the right processes. We could not have asked
for a better tool.
Juzer Shabbir Husain
Senior Software Engineer at MATIC
51. Opinie klientów i użytkowników
Feater helps a lot. I cannot imagine testing tasks
without it. Testing in isolation using Feater is a real
heaven for QAs because it is easier to spot issues
early on.
Jollyver Basbas
Software Quality Assurance at MATIC