SlideShare a Scribd company logo
1 of 52
Download to read offline
Przenieś się do kontenera
czyli korzyści z Docker i Docker Compose
Mariusz Bąk
PHPers Silesia, 26 czerwca 2019
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
Docker
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.
Uruchomienie
pierwszego
kontenera
$ docker volume create portainer_data
$ docker run -d 
-p 9000:9000 
--name portainer 
--restart always 
-v /var/run/docker.sock:/var/run/docker.sock 
-v portainer_data:/data 
portainer/portainer
Uruchomienie
narzędzia Portainer
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
Uproszczona
instalacja
narzędzi
w Dockerfile
COPY --from=composer:latest 
/usr/bin/composer /usr/bin/composer
COPY --from=docker:latest 
/usr/local/bin/docker /usr/local/bin/docker
Instalacja binarek
Composera i Dockera
(bez daemona)
Oficjalne
obrazy
php:7.3-fpm
php:7-cli
redis:5.0-alpine
mysql:8-0
mailhog/mailhog:latest
adminer:4-standalone
node:12.4.0-stretch
Przykładowy
plik
Dockerfile
FROM node:10-alpine AS main
WORKDIR /app
RUN apk add --update --no-cache 
bash curl unzip git openssh openssh-keygen 
sshpass nginx mongodb
COPY --from=docker /usr/local/bin/docker /usr/local/bin/docker
COPY ./.docker/prod/default.conf /etc/nginx/conf.d/default.conf
COPY ./.docker/prod/command.sh /command.sh
RUN yarn global add pm2
RUN (cd ./server && yarn install --prod --frozen-lockfile) 
&& yarn cache clean
COPY --from=server-builder /app/dist ./server
COPY --from=client-builder /app/dist ./client
EXPOSE 9010 9011
CMD ["/command.sh"]
Przykładowy
plik
Dockerfile
FROM node:10-alpine AS client-builder
WORKDIR /app
COPY ./client/package.json ./client/yarn.lock ./
RUN yarn install --frozen-lockfile 
&& yarn cache clean
COPY ./client .
RUN touch src/environments/environment.ts 
&& yarn run ng build --prod
W poprzednim kroku
skopiowaliśmy
zbudowaną aplikację
SPA wykorzystując
multistage build.
Docker Compose
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
Przykładowa
konfiguracja
Docker
Compose
version: "3"
services:
symfony_app:
build: .
environment:
SYMFONY_ENV: "$SYMFONY_ENV"
SYMFONY__DATABASE_HOST: symfony_db
SYMFONY__DATABASE_PORT: 3306
SYMFONY__DATABASE_NAME: "$DATABASE_NAME"
SYMFONY__DATABASE_USER: "$DATABASE_USER"
depends_on:
- symfony_db
symfony_db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_DATABASE: "$DATABASE_NAME"
MYSQL_USER: "$DATABASE_USER"
MYSQL_PASSWORD: "$DATABASE_PASSWORD"
Warstwowa
konfiguracja
Docker
Compose
version: "3"
services:
symfony_app:
volumes:
- "..:/var/www/html"
ports:
- "$SYMFONY_APP_PORT:8000"
symfony_db:
ports:
- "$SYMFONY_DB_PORT:3306"
$ docker-compose 
-f docker-compose-base.yml 
-f docker-compose-dev.yml 
up -d
Łączenie wielu
konfiguracji
Docker
Compose
version: '3'
services:
first_component:
image: example/first
# ...
networks:
default:
external:
name: my_app
$ docker network create my_app_setup
$ COMPOSE_PROJECT_NAME=my_app_first 
docker-compose -f docker-compose-first.yml up -d
$ COMPOSE_PROJECT_NAME=my_app_second 
docker-compose -f docker-compose-second.yml up -d
version: '3'
services:
second_component:
image: example/second
# ...
networks:
default:
external:
name: my_app
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
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
$ 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
$ 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
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
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
Feater
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.
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.
Czym jest Feater
Feater jest narzędziem do szybkiego
udostępniania wybranych funkcjonalności
aplikacji za pośrednictwem izolowanych
środowisk testowych lub demonstracyjnych.
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.
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.
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.
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.
Czym jest Feater
Feature + Docker = Feater
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.
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.
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.
Podstawowe pojęcia
Projekt grupuje definicje, instancje i zasoby
wchodzące w skład określonego produktu.
Uruchomienie
Gotowe obrazy dostępne na DockerHub:
hub.docker.com/r/feater/feater
Kod źródłowy:
github.com/feater-dev/feater
Uruchomienie
$ docker network create feater_proxy
$ docker volume create feater_data
$ docker run -d 
-p 9010:9010 -p 80:9011 
-v /var/run/docker.sock:/var/run/docker.sock 
-v feater_data:/data 
-e FEATER_PROXY_NETWORK_NAME=feater_proxy 
--name feater 
feater/feater:latest-docker-18.06.3
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
Demo
Wykorzystane technologie
TypeScript
Node.js 10
Angular 7
Nest
GraphQL
MongoDB
Nginx
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.
Zmiany w
konfiguracji
Docker
Compose
dla Featera
version: "3"
services:
symfony_app:
volumes:
- "symfony_example:/var/www/html"
environment:
FEATER__INSTANCE_HASH: "$FEATER__INSTANCE_HASH"
symfony_db:
volumes:
- "test_db:/var/lib/mysql"
volumes:
symfony_example:
external:
name: "$FEATER__SOURCE_VOLUME__SYMFONY_EXAMPLE"
test_db:
external:
name: "$FEATER__ASSET_VOLUME__TEST_DB"
Zmiany w
konfiguracji
Docker
Compose
dla Featera
version: "3"
services:
symfony_app:
volumes:
- "symfony_example:/var/www/html"
environment:
FEATER__INSTANCE_HASH: "$FEATER__INSTANCE_HASH"
symfony_db:
volumes:
- "test_db:/var/lib/mysql"
volumes:
symfony_example:
external:
name: "$FEATER__SOURCE_VOLUME__SYMFONY_EXAMPLE"
test_db:
external:
name: "$FEATER__ASSET_VOLUME__TEST_DB"
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
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
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
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
Dziękuję za uwagę!

More Related Content

Similar to Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose

“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...The Software House
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackThe Software House
 
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaDelphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaWydawnictwo Helion
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiGrzegorz Bartman
 
Kubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz WoszczynskiKubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz Woszczynskiduchowe50k
 
Debugowanie skryptow php za pomoca xdebug
Debugowanie skryptow php za pomoca xdebugDebugowanie skryptow php za pomoca xdebug
Debugowanie skryptow php za pomoca xdebugXSolve
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerLukas Lesniewski
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyWydawnictwo Helion
 
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]Droptica
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawySages
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Natalia Stanko
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcjiMarcin Kurzyna
 
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Semihalf
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linuxbm9ib2r5
 
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wojciech Barczyński
 
Exam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows ApplicationExam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows ApplicationMaciej Zbrzezny
 

Similar to Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose (20)

Docker
DockerDocker
Docker
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStack
 
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaDelphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązania
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
 
Kubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz WoszczynskiKubernetes i Docker Swarm - Tomasz Woszczynski
Kubernetes i Docker Swarm - Tomasz Woszczynski
 
Grok Artykul
Grok ArtykulGrok Artykul
Grok Artykul
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Debugowanie skryptow php za pomoca xdebug
Debugowanie skryptow php za pomoca xdebugDebugowanie skryptow php za pomoca xdebug
Debugowanie skryptow php za pomoca xdebug
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - Docker
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
 
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
Drupal Commerce - konfiguracja prostego sklepu internetowego [PL]
 
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawy
 
Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010Ruby, Ruby on Rails 2010
Ruby, Ruby on Rails 2010
 
PHP@Docker - w produkcji
PHP@Docker - w produkcjiPHP@Docker - w produkcji
PHP@Docker - w produkcji
 
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linux
 
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
 
Exam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows ApplicationExam: 70-511 Enhancing Usability - Windows Application
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.
  • 5. Uruchomienie pierwszego kontenera $ docker volume create portainer_data $ docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer Uruchomienie narzędzia Portainer
  • 6.
  • 7.
  • 8.
  • 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
  • 10. Uproszczona instalacja narzędzi w Dockerfile COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --from=docker:latest /usr/local/bin/docker /usr/local/bin/docker Instalacja binarek Composera i Dockera (bez daemona)
  • 12. Przykładowy plik Dockerfile FROM node:10-alpine AS main WORKDIR /app RUN apk add --update --no-cache bash curl unzip git openssh openssh-keygen sshpass nginx mongodb COPY --from=docker /usr/local/bin/docker /usr/local/bin/docker COPY ./.docker/prod/default.conf /etc/nginx/conf.d/default.conf COPY ./.docker/prod/command.sh /command.sh RUN yarn global add pm2 RUN (cd ./server && yarn install --prod --frozen-lockfile) && yarn cache clean COPY --from=server-builder /app/dist ./server COPY --from=client-builder /app/dist ./client EXPOSE 9010 9011 CMD ["/command.sh"]
  • 13. Przykładowy plik Dockerfile FROM node:10-alpine AS client-builder WORKDIR /app COPY ./client/package.json ./client/yarn.lock ./ RUN yarn install --frozen-lockfile && yarn cache clean COPY ./client . RUN touch src/environments/environment.ts && yarn run ng build --prod W poprzednim kroku skopiowaliśmy zbudowaną aplikację SPA wykorzystując multistage build.
  • 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
  • 16. Przykładowa konfiguracja Docker Compose version: "3" services: symfony_app: build: . environment: SYMFONY_ENV: "$SYMFONY_ENV" SYMFONY__DATABASE_HOST: symfony_db SYMFONY__DATABASE_PORT: 3306 SYMFONY__DATABASE_NAME: "$DATABASE_NAME" SYMFONY__DATABASE_USER: "$DATABASE_USER" depends_on: - symfony_db symfony_db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: root_pass MYSQL_DATABASE: "$DATABASE_NAME" MYSQL_USER: "$DATABASE_USER" MYSQL_PASSWORD: "$DATABASE_PASSWORD"
  • 17. Warstwowa konfiguracja Docker Compose version: "3" services: symfony_app: volumes: - "..:/var/www/html" ports: - "$SYMFONY_APP_PORT:8000" symfony_db: ports: - "$SYMFONY_DB_PORT:3306" $ docker-compose -f docker-compose-base.yml -f docker-compose-dev.yml up -d
  • 18. Łączenie wielu konfiguracji Docker Compose version: '3' services: first_component: image: example/first # ... networks: default: external: name: my_app $ docker network create my_app_setup $ COMPOSE_PROJECT_NAME=my_app_first docker-compose -f docker-compose-first.yml up -d $ COMPOSE_PROJECT_NAME=my_app_second docker-compose -f docker-compose-second.yml up -d version: '3' services: second_component: image: example/second # ... networks: default: external: name: my_app
  • 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.
  • 33. Czym jest Feater Feature + Docker = Feater
  • 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.
  • 37. Podstawowe pojęcia Projekt grupuje definicje, instancje i zasoby wchodzące w skład określonego produktu.
  • 38. Uruchomienie Gotowe obrazy dostępne na DockerHub: hub.docker.com/r/feater/feater Kod źródłowy: github.com/feater-dev/feater
  • 39. Uruchomienie $ docker network create feater_proxy $ docker volume create feater_data $ docker run -d -p 9010:9010 -p 80:9011 -v /var/run/docker.sock:/var/run/docker.sock -v feater_data:/data -e FEATER_PROXY_NETWORK_NAME=feater_proxy --name feater feater/feater:latest-docker-18.06.3
  • 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
  • 41. Demo
  • 43.
  • 44.
  • 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.
  • 46. Zmiany w konfiguracji Docker Compose dla Featera version: "3" services: symfony_app: volumes: - "symfony_example:/var/www/html" environment: FEATER__INSTANCE_HASH: "$FEATER__INSTANCE_HASH" symfony_db: volumes: - "test_db:/var/lib/mysql" volumes: symfony_example: external: name: "$FEATER__SOURCE_VOLUME__SYMFONY_EXAMPLE" test_db: external: name: "$FEATER__ASSET_VOLUME__TEST_DB"
  • 47. Zmiany w konfiguracji Docker Compose dla Featera version: "3" services: symfony_app: volumes: - "symfony_example:/var/www/html" environment: FEATER__INSTANCE_HASH: "$FEATER__INSTANCE_HASH" symfony_db: volumes: - "test_db:/var/lib/mysql" volumes: symfony_example: external: name: "$FEATER__SOURCE_VOLUME__SYMFONY_EXAMPLE" test_db: external: name: "$FEATER__ASSET_VOLUME__TEST_DB"
  • 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