Docker dla programistów. Rozwijanie aplikacji i narzędzia ciągłego dostarczania DevOps - ebook
Docker dla programistów. Rozwijanie aplikacji i narzędzia ciągłego dostarczania DevOps - ebook
Docker zyskuje coraz większe uznanie programistów. Dzięki swojej niezależności od platformy kontenery pozwalają na uruchamianie kodu w różnych środowiskach, zarówno w centrach danych, jak i w chmurze. Zastosowanie kontenerów bardzo upraszcza opracowanie, testowanie, wdrażanie i skalowanie aplikacji. Pozwala też na automatyzację przepływu pracy i stałe doskonalenie aplikacji. Aby skorzystać ze wszystkich tych zalet, architekci, projektanci i programiści muszą wszechstronnie i głęboko poznać wiele różnych aspektów zarządzania środowiskiem kontenerowym.
Oto wyczerpujące omówienie wszystkich zagadnień niezbędnych do tworzenia i rozwijania aplikacji w Dockerze. W książce zaprezentowano różne metody wdrażania i uruchamiania kontenerów, pokazano również, jak wykorzystuje się je w środowisku produkcyjnym. Wskazano właściwe techniki używania narzędzi Jenkins, Kubernetes i Spinnaker. Przedstawiono metody monitorowania, zabezpieczania i skalowania kontenerów za pomocą takich narzędzi jak Prometheus i Grafana. Nie zabrakło opisu wdrażania kontenerów w różnych środowiskach, między innymi w chmurowej usłudze Amazon Elastic Kubernetes Service, a także - na koniec - kwestii bezpieczeństwa Dockera i związanych z tym dobrych praktyk.
W książce:
- gruntowne wprowadzenie do Dockera i programowania w VirtualBox
- tworzenie systemów z kontenerów i ich wdrażanie w środowisku produkcyjnym
- ciągłe wdrażanie oprogramowania
- skalowanie, testy obciążeniowe i zagadnienia bezpieczeństwa
- stosowanie zewnętrznych narzędzi: AWS, Azure, GCP i innych
Docker. Wszechstronne wdrożenia w najlepszym stylu
Spis treści
O autorach 15
O recenzencie 17
Przedmowa 19
CZĘŚĆ I. WPROWADZENIE DO PLATFORMY DOCKER - KONTENERY I PROGRAMOWANIE W LOKALNYM ŚRODOWISKU 25
Rozdział 1. Wprowadzenie do platformy Docker 27
- Geneza platformy Docker 28
- Hosting kolokacyjny 28
- Hosting samodzielny 29
- Centra danych 29
- Wirtualizacja jako sposób na ekonomiczne wykorzystanie zasobów 31
- Rosnące zapotrzebowanie na energię 33
- Wirtualizacja i chmura obliczeniowa 34
- Dalsza optymalizacja zasobów centrów danych przy użyciu kontenerów 36
- Podsumowanie 38
- Dalsza lektura 38
Rozdział 2. Tworzenie aplikacji z użyciem VirtualBox i kontenerów Docker 39
- Wymagania techniczne 40
- Problem zanieczyszczania systemu plików hosta 40
- Tworzenie maszyn wirtualnych za pomocą programu VirtualBox 41
- Wprowadzenie do wirtualizacji 41
- Tworzenie maszyny wirtualnej 42
- Dodatki do systemu gościa 43
- Instalacja programu VirtualBox 44
- Kontenery Docker 45
- Wprowadzenie do kontenerów 45
- Tworzenie aplikacji przy użyciu platformy Docker 47
- Pierwsze kroki z platformą Docker 48
- Automatyzacja poleceń za pomocą skryptów 49
- Podsumowanie 59
- Dalsza lektura 60
Rozdział 3. Udostępnianie kontenerów w serwisie Docker Hub 61
- Wymagania techniczne 62
- Wprowadzenie do serwisu Docker Hub 62
- Korzystanie z serwisu Docker Hub za pomocą wiersza poleceń 63
- Korzystanie z serwisu Docker Hub za pomocą przeglądarki 64
- Implementacja kontenera MongoDB w aplikacji 66
- Uruchomienie powłoki kontenera 69
- Wprowadzenie do architektury mikrousługowej 71
- Skalowalność 72
- Komunikacja między kontenerami 72
- Implementacja prostej aplikacji mikrousługowej 75
- Udostępnianie kontenerów w serwisie Docker Hub 79
- Podsumowanie 82
- Dalsza lektura 82
Rozdział 4. Tworzenie systemów przy użyciu kontenerów 83
- Wymagania techniczne 84
- Wprowadzenie do narzędzia Docker Compose 84
- Problem ze skryptami 85
- Pliki konfiguracyjne narzędzia Docker Compose 86
- Dziedziczenie konfiguracji 89
- Sekcja depends_on 90
- Definiowanie udostępnianych portów 91
- Lokalne sieci w platformie Docker 94
- Definiowanie sieci za pomocą skryptów 94
- Tworzenie sieci za pomocą narzędzia Docker Compose 96
- Wiązanie systemów plików hosta i kontenera 97
- Optymalizacja wielkości kontenera 98
- Skrypt build.sh 100
- Inne narzędzia kompozycyjne 101
- Docker Swarm 101
- Kubernetes 101
- Packer 102
- Podsumowanie 102
- Dalsza lektura 103
CZĘŚĆ II. PLATFORMA DOCKER W ŚRODOWISKU PRODUKCYJNYM 105
Rozdział 5. Wdrażanie i uruchamianie kontenerów w środowisku produkcyjnym 107
- Wymagania techniczne 108
- Przykładowa aplikacja ShipIt Clicker 108
- Uruchamianie kontenerów Docker w środowisku produkcyjnym 109
- Minimalne środowisko produkcyjne 109
- Niezbędne minimum - Docker i Docker Compose na jednym hoście 110
- Wsparcie dla platformy Docker 110
- Problemy z wdrażaniem na pojedynczym hoście 110
- Zarządzane usługi chmurowe 111
- Google Kubernetes Engine 111
- AWS Elastic Beanstalk 112
- AWS ECS i Fargate 112
- AWS EKS 112
- Microsoft Azure Kubernetes Service 113
- DigitalOcean Docker Swarm 113
- Tworzenie własnych klastrów Kubernetes 113
- Dobieranie właściwej konfiguracji produkcyjnej 114
- Ćwiczenie - dołącz do zespołu ShipIt Clicker 116
- Ćwiczenie - wybór właściwej metody wdrożenia 119
- Ćwiczenie - ocena plików Dockerfile i docker-compose.yml 121
- Podsumowanie 121
Rozdział 6. Wdrażanie aplikacji przy użyciu Docker Compose 123
- Wymagania techniczne 124
- Przykładowa aplikacja - ShipIt Clicker v2 124
- Dobór sprzętu i systemu operacyjnego dla aplikacji jednoserwerowej 124
- Wymagania dla wdrożenia jednoserwerowego 124
- Przygotowanie hosta do uruchomienia platformy Docker i narzędzia Docker Compose 125
- Instalacja platformy Docker i narzędzia Git 126
- Wdrażanie aplikacji przy użyciu plików konfiguracyjnych i skryptów 127
- Weryfikacja pliku Dockerfile 127
- Weryfikacja pliku docker-compose.yml 129
- Przygotowanie produkcyjnego pliku .env 131
- Skrypty 132
- Ćwiczenie - przechowywanie plików aplikacyjnych poza serwerem produkcyjnym 135
- Ćwiczenie - zabezpieczenie środowiska produkcyjnego 135
- Monitorowanie niewielkich aplikacji - dzienniki i alarmy 136
- Dzienniki 136
- Alarmy 137
- Ograniczenia aplikacji jednoserwerowych 137
- Brak automatycznego przełączania awaryjnego 138
- Brak skalowalności w poziomie wraz ze wzrostem obciążenia 138
- Niestabilność działania z powodu błędnej konfiguracji 138
- Katastrofalne skutki awarii w przypadku braku kopii zapasowej 139
- Studium przypadku - migracja z systemu CoreOS i usługi DigitalOcean do CentOS 7 i AWS 139
- Podsumowanie 139
- Dalsza lektura 140
Rozdział 7. Ciągłe wdrażanie oprogramowania przy użyciu systemu Jenkins 141
- Wymagania techniczne 142
- Przykładowa aplikacja - ShipIt Clicker v3 142
- Wykorzystanie systemu Jenkins w procesie ciągłej integracji oprogramowania 143
- Pułapki, których powinieneś unikać 143
- Wykorzystanie istniejącego serwera 144
- Instalacja systemu Jenkins 144
- Ciągłe wdrażanie oprogramowania przy użyciu systemu Jenkins 148
- Plik Jenkinsfile i połączenie z serwerem 148
- Testowanie systemu Jenkins i platformy Docker za pomocą skryptu procesowego 148
- Łączenie z serwerem produkcyjnym za pomocą usługi SSH 150
- Modyfikowanie konfiguracji za pomocą systemu Jenkins 154
- Umieszczenie pliku Jenkinsfile w serwisie GitHub 154
- Zmiana źródeł wszystkich repozytoriów 156
- Definiowanie zmiennych środowiskowych dla serwera produkcyjnego 157
- Budowanie kontenerów i umieszczanie ich w serwisie Docker Hub 158
- Umieszczanie kontenerów w serwisie Docker Hub i wdrażanie ich w środowisku produkcyjnym 159
- Wdrażanie różnych odgałęzień oprogramowania w kilku środowiskach 162
- Utworzenie środowiska testowego 162
- Definiowanie zmiennych środowiskowych dla serwera testowego 163
- Wymuszenie wdrożenia testowego odgałęzienia projektu 163
- Złożoność i ograniczenia skalowalności systemu Jenkins 165
- Zarządzanie wieloma hostami 165
- Złożoność skryptów 166
- Kiedy wiadomo, że została osiągnięta granica? 166
- Podsumowanie 167
- Dalsza lektura 167
Rozdział 8. Wdrażanie kontenerów Docker przy użyciu platformy Kubernetes 169
- Wymagania techniczne 170
- Opcje lokalnej instalacji platformy Kubernetes 170
- Docker Desktop i platforma Kubernetes 170
- Minikube 171
- Sprawdzenie poprawności działania platformy Kubernetes 172
- Wdrożenie przykładowej aplikacji ShipIt Clicker v4 172
- Instalacja programu Helm 172
- Lokalne wdrożenie aplikacji ShipIt Clicker i kontrolera NGINX Ingress Controller 173
- Dobór dystrybucji platformy Kubernetes 175
- Google Kubernetes Engine 175
- AWS EKS 175
- Red Hat OpenShift 176
- Microsoft Azure Kubernetes Service 176
- Inne opcje 177
- Pojęcia stosowane w platformie Kubernetes 178
- Obiekty 178
- Mapy ConfigMap 179
- Pody 180
- Węzły 180
- Usługi 180
- Kontrolery wejściowe 181
- Skrytki 182
- Przestrzenie nazw 187
- Konfigurowanie usługi AWS EKS za pomocą szablonu CloudFormation 187
- Wprowadzenie do szablonów AWS EKS Quick Start CloudFormation 188
- Przygotowanie konta AWS 188
- Szablony AWS EKS Quick Start CloudFormation 192
- Konfigurowanie klastra EKS 195
- Wdrożenie aplikacji w klastrze AWS ESK i ograniczenie zasobów 197
- Konfigurowanie ograniczeń chroniących przed wyciekiem pamięci i przeciążeniem procesora 197
- Przygotowanie aplikacji ShipIt Clicker do korzystania z kontrolera ALB 198
- Wdrożenie aplikacji ShipIt Clicker w klastrze EKS 198
- Repozytorium AWS Elastic Container Registry w klastrze AWS EKS 199
- Tworzenie repozytorium ECR 200
- Rozdzielanie środowisk za pomocą etykiet i przestrzeni nazw 202
- Przykład - oznaczenie etykietami środowisk w domyślnej przestrzeni nazw 202
- Środowiska programistyczne, akceptacyjne, testowe i produkcyjne 203
- Podsumowanie 204
- Dalsza lektura 204
Rozdział 9. Ciągłe wdrażanie oprogramowania w chmurze przy użyciu platformy Spinnaker 207
- Wymagania techniczne 208
- Zaktualizowana wersja aplikacji ShipIt Clicker v5 208
- Usprawnienie platformy Kubernetes pod kątem utrzymywania aplikacji 209
- Zarządzanie klastrem EKS za pomocą lokalnej stacji roboczej 209
- Diagnozowanie problemów z połączeniem narzędzia kubectl z klastrem 210
- Przełączanie pomiędzy kontekstem klastra i lokalnej stacji 210
- Sprawdzenie poprawności działania kontrolera wejściowego ALB 211
- Przygotowanie domeny Route 53 i certyfikatu 211
- Utworzenie i wdrożenie aplikacji ShipIt Clicker v5 212
- Platforma Spinnaker - kiedy i dlaczego są niezbędne bardziej zaawansowane wdrożenia 215
- Wprowadzenie do platformy Spinnaker 215
- Instalacja platformy Spinnaker w klastrze AWS EKS za pomocą programu Helm 217
- Komunikacja z platformą Spinnaker za pomocą proxy kubectl 218
- Udostępnianie platformy za pomocą kontrolera wejściowego ALB 218
- Konfiguracja platformy Spinnaker za pomocą programu Halyard 220
- Połączenie platformy Spinnaker z systemem Jenkins 220
- Integracja systemu Jenkins z platformą Spinnaker i repozytorium ECR 221
- Połączenie platformy Spinnaker z serwisem GitHub 226
- Połączenie platformy Spinnaker z serwisem Docker Hub 226
- Diagnozowanie problemów z platformą Spinnaker 227
- Prosta strategia wdrożenia aplikacji ShipIt Clicker za pomocą platformy Spinnaker 228
- Definiowanie aplikacji w platformie Spinnaker 228
- Definiowanie procesu w platformie Spinnaker 229
- Utworzenie wpisu DNS dla kontrolera wejściowego 234
- Funkcjonalności wdrożeniowe i testowe platformy Spinnaker 235
- Wdrożenie kanarkowe 235
- Wdrożenie "czerwone/czarne" 235
- Anulowanie wdrożenia 236
- Testowanie aplikacji 236
- Podsumowanie 237
- Dalsza lektura 237
Rozdział 10. Monitorowanie kontenerów Docker przy użyciu systemów Prometheus, Grafana i Jaeger 239
- Wymagania techniczne 240
- Wdrożenie demonstracyjnej aplikacji ShipIt Clicker v7 240
- Dzienniki kontenerów Docker i programów uruchomieniowych 243
- Dzienniki kontenerów Docker 243
- Cechy idealnego systemu zarządzania dziennikami 244
- Diagnozowanie problemów z warstwą sterowania platformy Kubernetes na podstawie dzienników 245
- Zapisywanie dzienników w usłudze CloudWatch Logs 246
- Długotrwałe przechowywanie dzienników w usłudze S3 247
- Analiza dzienników za pomocą usług CloudWatch Insights i Amazon Athena 248
- Ćwiczenie - sprawdzenie liczby uruchomień gry ShipIt Clicker 249
- Testy dostępności, gotowości i uruchamiania w platformie Kubernetes 249
- Sprawdzanie za pomocą testów dostępności, czy kontener odpowiada na zapytania 250
- Sprawdzanie za pomocą testów gotowości, czy usługa może przetwarzać ruch 250
- Przystosowanie aplikacji ShipIt Clicker do osobnych testów dostępności i gotowości 251
- Ćwiczenie - wymuszenie negatywnego wyniku testu gotowości aplikacji ShipIt Clicker 252
- Zbieranie wskaźników i wysyłanie alarmów za pomocą systemu Prometheus 252
- Historia systemu 253
- Zapytania i interfejs WWW 253
- Definiowanie w aplikacji wskaźników dla systemu Prometheus 254
- Odczytywanie niestandardowych wskaźników 256
- Konfiguracja alarmów 256
- Wysyłanie powiadomień za pomocą modułu Alertmanager 258
- Szczegóły zapytań i zewnętrznego monitoringu 260
- Wizualizacja danych operacyjnych za pomocą systemu Grafana 260
- Dostęp do systemu 260
- Dodawanie paneli opracowanych przez społeczność użytkowników 261
- Utworzenie nowego panelu z niestandardowym zapytaniem 262
- Monitorowanie wydajności aplikacji za pomocą systemu Jaeger 264
- Interfejs OpenTracing API 264
- Wprowadzenie do systemu Jaeger 265
- Instalacja klienta systemu Jaeger w aplikacji ShipIt Clicker 267
- Instalacja rozszerzenia Jaeger Operator 270
- Podsumowanie 272
- Dalsza lektura 272
Rozdział 11. Skalowanie i testy obciążeniowe aplikacji w środowisku Docker 275
- Wymagania techniczne 276
- Nowa aplikacja ShipIt Clicker v8 276
- Skalowanie klastra Kubernetes 278
- Ręczne skalowanie klastra 279
- Dynamiczne skalowanie klastra 281
- Siatka usług Envoy i jej zastosowania 285
- Zarządzanie ruchem w sieci 286
- Instalacja siatki Envoy 287
- Testowanie skalowalności i wydajności aplikacji za pomocą narzędzia k6 291
- Rejestrowanie i odtwarzanie sesji 292
- Ręczne tworzenie realistycznego testu 293
- Wykonanie testu obciążeniowego 297
- Podsumowanie 298
- Dalsza lektura 299
CZĘŚĆ III. BEZPIECZEŃSTWO KONTENERÓW DOCKER 301
Rozdział 12. Wprowadzenie do bezpieczeństwa kontenerów 303
- Wymagania techniczne 304
- Wirtualizacja i modele bezpieczeństwa hiperwizora 304
- Wirtualizacja i pierścienie ochronne 304
- Platforma Docker i pierścienie ochronne 306
- Kontenerowe modele bezpieczeństwa 308
- Docker Engine, containerd i zabezpieczenia w systemie Linux 309
- Przestrzeń PID 310
- Przestrzeń MNT 311
- Przestrzeń NET 311
- Przestrzeń IPC 311
- Przestrzeń UTS 311
- Przestrzeń USER 312
- Uwaga dotycząca grup cgroups 312
- Dobre praktyki w skrócie 312
- Regularnie instaluj poprawki 313
- Zabezpieczaj gniazdo sieciowe 313
- Nie uruchamiaj błędnego kodu 315
- Zawsze twórz konto użytkownika z minimalnymi uprawnieniami 315
- Podsumowanie 315
Rozdział 13. Podstawy bezpieczeństwa i dobre praktyki korzystania z platformy Docker 317
- Wymagania techniczne 318
- Bezpieczeństwo obrazów kontenerów 318
- Weryfikacja obrazu 320
- Minimalny obraz bazowy 322
- Ograniczanie uprawnień 323
- Zapobieganie wyciekowi danych 324
- Bezpieczne korzystanie z poleceń w platformie Docker 326
- Polecenia COPY i ADD - jaka jest różnica? 326
- Kopiowanie rekurencyjne - bądź ostrożny 327
- Bezpieczeństwo procesu budowania kontenerów 328
- Wieloetapowy proces budowania obrazu 329
- Ograniczanie możliwości i zasobów wdrażanego kontenera 330
- Ograniczanie zasobów 330
- Ograniczanie możliwości 331
- Podsumowanie 332
Rozdział 14. Zaawansowane zabezpieczenia: skrytki, poufne polecenia, znaczniki i etykiety 333
- Wymagania techniczne 334
- Bezpieczne przechowywanie poufnych danych w platformie Docker 334
- Dziennik Raft 335
- Tworzenie, edytowanie i usuwanie skrytek 336
- Tworzenie skrytek 336
- Odczytywanie skrytek 336
- Usuwanie skrytek 337
- Skrytki w akcji - przykłady 338
- Zabezpieczanie kontenerów za pomocą znaczników 340
- Umieszczanie w etykietach metadanych aplikacji 341
- Podsumowanie 342
Rozdział 15. Skanowanie, monitorowanie i zewnętrzne narzędzia 343
- Wymagania techniczne 344
- Skanowanie i monitorowanie a bezpieczeństwo kontenerów w chmurze i środowisku programistycznym 344
- Skanowanie obrazów kontenerów za pomocą programu Anchore Engine 345
- Chef InSpec 349
- Lokalny monitoring platformy Docker za pomocą natywnego narzędzia stats 350
- Agregowanie danych monitoringowych w chmurze za pomocą narzędzia Datadog 353
- Zabezpieczanie kontenerów w chmurze AWS 356
- Alarmy bezpieczeństwa w usłudze AWS GuardDuty 357
- Zabezpieczanie kontenerów w chmurze Azure 358
- Monitorowanie kontenerów w chmurze Azure 358
- Zabezpieczanie kontenerów przy użyciu usługi Security Center 359
- Zabezpieczanie kontenerów w chmurze GCP 360
- Analiza kontenerów i uwierzytelnienie binarne 361
- Wykrywanie ataków za pomocą usługi Security Command Center 362
- Podsumowanie 363
- Dalsza lektura 364
Rozdział 16. Wnioski - koniec drogi, ale nie podróży 365
- Wymagania techniczne 365
- Kontenery w skrócie 366
- Czego się dowiedziałeś o tworzeniu aplikacji 366
- Wzorce projektowe 366
- Poszerzenie wiedzy o tworzeniu i utrzymaniu aplikacji 369
- Inżynieria chaosu i tworzenie niezawodnych systemów produkcyjnych 369
- Bezpieczeństwo i dalsze kroki 371
- Metasploit i testy penetracyjne 371
- Podsumowanie 373
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-7728-8 |
Rozmiar pliku: | 15 MB |