Samouczek komponuje Docker

Samouczek komponuje Docker
Popularność Dockera jako narzędzia programistycznego rośnie. Docker wdychał nowe życie w ruch pojemnika. Programiści lubią go używać, ponieważ jest szybki i łatwy do nauki. Pomaga zespołom programistów dzielić standardowe środowiska, nie martwiąc się o marnowanie czasu i zasobów.

Deweloperzy mogą skonfigurować pożądane środowisko w kontenerze Docker, zapisać kontener jako obraz i łatwo udostępniać je swoim zespołom programistów. Proces działa świetnie dla jednego kontenera. Jednak środowiska wielokrotnego są trudniejsze do utrzymania. Docker Compose zapewnia rozwiązanie.

Dzięki Docker Compose, programiści mogą zdefiniować plik YAML, aby skonfigurować konfigurację dla wielu usług. Następnie mogą uruchomić usługi wielu kontaktów z jednym poleceniem. Upraszcza proces pracy z aplikacjami wielu kontaktów.

Warunek wstępny

Zakładamy, że masz podstawowe zrozumienie Dockera. W przeciwnym razie spójrz na Jak zainstalować i korzystać z Docker na Ubuntu. Przykłady używają WordPress, MySQL, Flask i Python. Jednak żadna wcześniejsza wiedza na temat tych narzędzi nie jest konieczna.

Proces komponowania dokera: na pierwszy rzut oka

  1. Zdefiniuj środowisko aplikacji: Użyj DockerFile, aby zdefiniować środowisko aplikacji, aby łatwo było je odtwarzać.
  2. Zdefiniuj środowisko komponują Docker: Użyj kompozycji Docker.YML w celu zdefiniowania usług w aplikacji.
  3. Uruchom aplikację: Użyj Docker-Compose w górę, aby uruchomić aplikację wielokrotną.

Przykładowy plik komponowania

Wersja: „3”
Usługi:
DB:
Zdjęcie: Mysql: 5.7
wolumeny:
- db_data:/var/lib/mysql
Uruchom ponownie: Zawsze
środowisko:
Mysql_root_password: rootPassword123
MySQL_DATABase: WordPress
Mysql_user: WordPress_user
Mysql_password: WordPress_Password
WordPress:
zależy od:
- db
Zdjęcie: WordPress: najnowszy
Porty:
- „8000: 80”
Uruchom ponownie: Zawsze
środowisko:
WordPress_db_host: DB: 3306
WordPress_db_user: WordPress_user
WordPress_DB_Password: WordPress_Password
wolumeny:
db_data:

Jeśli powyższy kompozycja dokera.Plik YML jest wywoływany z Docker Up, utworzy usługę WordPress, która łączy się z usługą bazy danych MySQL.

Docker komponuje polecenia

Możesz użyć Docker -Compose -Help Aby znaleźć komendę dokowania

Kiedy używać Docker Compose?

Obecnie Docker jest używany głównie w środowiskach programistycznych. Niektóre z popularnych zastosowań Docker Compose to:

1. Prototypowanie i rozwój

Proces prototypowania i rozwoju aplikacji są spowolnione z powodu braku standardowych środowisk. Deweloperzy często muszą marnować czas na konfigurowanie tego samego środowiska wiele razy. Ponadto przewodniki odczytu w celu skonfigurowania parametrów środowiska jest czasochłonne.

Docker komponuje proces upraszczania procesu. Po skonfigurowaniu środowiska zespoły programistów mogą udostępniać pliki Docker w organizacji. Może zaoszczędzić ogromny czas na problemy związane z zarządzaniem konfiguracją.

2. Testowanie i automatyzacja procesów

Ciągła integracja i ciągła dostawa (CI/CD) stają się standardowymi procesami w dzisiejszych środowiskach zwinnych. Zautomatyzowane testowanie jest ważnym elementem CI/CD. Docker Compose pomaga zdefiniować proces zautomatyzowany testowanie. Wszystkie komplikacje związane z rozpoczęciem nowych usług można starannie umieścić w plikach konfiguracyjnych Docker. Testerzy mogą używać tych plików do odpalania usług tymczasowych, uruchomienia skryptów tekstowych i niszczenia usług po zebraniu wyników testu. Oszczędza czas, ponieważ ręczne uruchamianie usług jest czasochłonne i podatne na błędy.

3. Przyszłe wdrożenie produkcji

Docker jest używany głównie w środowiskach programistycznych. Ponieważ jednak funkcje Docker stają się bardziej solidne, Docker będzie wykorzystywany do pracy na poziomie produkcyjnym. Docker Compose może być cennym narzędziem do wdrożenia pojedynczego hosta.

Ćwiczenie: prosta aplikacja internetowa

Spróbujmy w prostej aplikacji internetowej opartej na Python, aby wypróbować Docker Compose. Użyjemy frameworka Web Flask, aby utworzyć aplikację, która komunikuje się z w pamięci Redis, aby śledzić, ile razy odwiedzano aplikację internetową.

Struktura katalogu będzie wyglądać tak:

Simple_App
Treść ├wią
│ ├wiąt Dockerfile
Code │ └�t
│ ├wiąt prosty_p.py
│ └ └t Wymagania.tekst
└wiąt kompozycja dokera.yml

Powyższa struktura katalogu nie jest konieczna do podstawowej aplikacji. Pokazuje jednak, w jaki sposób organizowanie informacji mogą być pomocne w bardziej wydajnym wdrożeniu Docker Compose.

Krok 1: Utwórz strukturę i pliki katalogu

Utwórzmy strukturę katalogu i niezbędne pliki:

$ mkdir proste_app
$ mkdir simple_app/content
$ mkdir simple_app/content/kod
$ Touch Simple_App/Docker-Compose.yml
$ Touch Simple_App/content/DockerFile
$ Touch Simple_App/content/code/simple_app.py
$ Touch Simple_App/content/kod/wymagania.tekst

Polecenie dotykowe tworzy tylko puste pliki. Możesz ręcznie wejść do folderów i utworzyć pliki.

Krok 2: Kod aplikacji internetowej

Folder kodu zawiera kod aplikacji internetowej. Umieść następujące Simple_App.py plik:

z kolby importowej kolby
z Redis Import Redis
App = Flask (__ name__)
redis = redis (host = „redis”, port = 6379)
@App.trasa('/')
def Hello ():
Count = Redis.inclu („Hits”)
powrót 'Witamy w Docker Compose Lessons!

Odwiedziłeś tę stronę czasy.\N'.format (liczba)
Jeśli __name__ == "__main__":
App.Uruchom (host = "0.0.0.0 ", debug = true)

Powyższa aplikacja tworzy stronę powitalną wyświetlającą liczbę odwiedzin strony. Licznik wizyty jest utrzymywany w bazie danych Redis. Redis używa portu 6379 jako domyślnego portu słuchania. Następnie wypełnij wymagania.tekst plik:

kolba
Redis

Umożliwi to PIP instalację zależności Pythona od kontenera internetowego. Będziemy uruchomić PIP w ramach inicjalizacji naszej usługi.

Krok 3: Dockerfile

Wypełnij simple_app/content/dockerFile Z następującym kodem:

Od Pythona: 3.6.3-Jessie
DODAĆ ./kod /kod
WorkDir /Code
Uruchom wymagania instalacyjne PIP -R.tekst
CMD [„Python”, „Simple_App.py "]

Powyższe Dockerfile Osiąga następujące czynności:

  1. Tworzy obraz z Pythona: 3.6.3-Jessie. Jeśli nie jest dostępny lokalnie, pobiera go z Docker Hub.
  2. Kopiuje elementy simple_app/content/kod do /kod na pojemniku
  3. Ustawić /kod Jako katalog roboczy na kontenerze
  4. Używa PIP do instalacji zależności Pythona
  5. Ustawia domyślny punkt początkowy dla kontenera do uruchomienia Python Simple_App.py.

Krok 4: Docker komponuje

Wypełnij Simple_App/Docker-Compose.yml Plik z następującym kodem:

Wersja: „3”
Usługi:
sieć:
zbudować: ./treść
Porty:
- „5000: 5000”
wolumeny:
- ./content/kod:/kod
Redis:
Obraz: „Redis: Alpine”

Kompozycja dokera.yml Plik definiuje dwa kontenery: Web i Redis. Używa Docker komponuj format wersji 3.

Dla usługi internetowej:

  • Buduje usługę internetową za pomocą simple_app/content/dockerFile
  • Przekaż port 5000 z kontenera internetowego do portu hosta 5000. Port 5000 to domyślny port dla aplikacji kolb.
  • Tom simple_app/content/kod jest zamontowany jako /kod na pojemniku. Oznacza to, że jeśli coś zmienisz w simple_app/content/kod, zostanie odzwierciedlone w /kod folder w pojemniku internetowym.

Dla usługi Redis:

  • Używa obrazu Redis: Alpine z Docker Hub, aby utworzyć usługę Redis.

Krok 5: Uruchamianie aplikacji za pomocą Docker Compose

Aplikacja jest gotowa do wdrożenia. Z Simple_App Folder, uruchom następujące polecenie:

$ Docker-Compose Up

Wyjście powinno zacząć się w ten sposób:

$ Docker-Compose Up
Budowanie sieci
Krok 1/5: Od Pythona: 3.6.3-Jessie
3.6.3-Jessie: pobieranie z biblioteki/Pythona
85B1F47FBA49: Pobieranie [===========>] 12.43 MB/52.6 MB
5409e9a7fa9e: Pobierz kompletnie
661393707836: Pobieranie [===============>] 13.71 MB/43.23 MB
1BB98C08D57E: Pobieranie [>] 1.081 MB/134.7 MB

Po zbudowaniu i uruchomieniu wszystkich obrazów należy zobaczyć następujące:

Status: Pobrane nowsze zdjęcie dla Redis: Alpine
Tworzenie SimpleApp_redis_1…
Tworzenie SimpleApp_Web_1…
Tworzenie SimpleApp_redis_1
Tworzenie SimpleApp_Web_1… gotowe
Dołączenie do SimpleApp_redis_1, Simpleapp_Web_1
redis_1 | 1: M 21 października 02:06:33.639 * Gotowy do przyjęcia połączeń
Web_1 | * Uruchomienie na http: // 0.0.0.0: 5000/ (naciśnij Ctrl+C, aby rzucić)
Web_1 | * Ponowne uruchomienie za pomocą STAT
Web_1 | * Debugger jest aktywny!
Web_1 | * PIN DEBUGGER: 237-189-083

Możesz przetestować aplikację, przechodząc na http: // localhost: 5000:. Jeśli odświeżasz stronę kilka razy, powinna ona odzwierciedlać liczbę wizyt. Możesz sprawdzić status działających usług lub kontenerów:

$ Docker Ps
Polecenie obrazu ID kontenera utworzone porty statusu nazwy
22852E0AD98A REDIS: Alpine „Docker-Enrypoint…” 5 minut temu w górę 5 minut 6379/TCP Simpreapp_redis_1
D51739D0A3AC Simpleapp_Web „Python Simple_App.py "5 minut temu w górę 5 minut 0.0.0.0: 5000-> 5000/TCP SimplaPP_Web_1

Jeśli uruchomisz powłokę bash w Simpleapp_Web_1 (nazwa kontenera może się różnić), zostaniesz zalogowany do działającego katalogu /kodu:

$ Docker Exec -it Simpleapp_Web_1 Bash
root@D51739D0A3AC:/kod# ls
wymagania.TXT Simple_App.py
root@D51739D0A3AC:/Code#

/kod katalog powinien odzwierciedlać treść simple_app/content/kod wewnątrz, jak widać powyżej (Simple_App.py I wymagania.tekst).

Jeśli zaktualizujesz swoje Simple_App.pyLinia od:

powrót 'Witamy w Docker Compose Lessons!

Odwiedziłeś tę stronę czasy.\N'.format (liczba)

Do:

powrót 'Witamy w Docker Compose Lessons!

Czy jesteś zaintrygowany?

Odwiedziłeś tę stronę czasy.\N'.format (liczba)

Powinien zastanowić się nad http: // localhost: 5000:

Krok 6: Zamknięcie usług

Możesz zatrzymać aplikację za pomocą:

$ Docker-Compose Stop
Zatrzymanie SimpleApp_redis_1… gotowe
Zatrzymanie Simpleapp_Web_1… gotowe

Zamontowane tomy będą trwać. Możesz całkowicie usunąć pojemniki, w tym objętości za pomocą następującego polecenia.

$ Docker-Compose Down-volume
Usuwanie SimpleApp_redis_1… gotowe
Usuwanie SimpleApp_Web_1… gotowe
Usuwanie sieci SimpleApp_Default

Gratulacje! Opanowałeś podstawy Docker Compose.

Dalsze badanie

Aby uzyskać dalsze badania, spójrz na następującą dokumentację:

  • Dokumentacja Dockera
  • Docker Compose File Reference
  • Docker komponuje sieci sieciowe

Bibliografia:

  • https: // dokumenty.doker.com/compose/przegląd/#środowiska rozwoju
  • https: // dokumenty.doker.com/compose/dostanie się/
  • https: // blog.Codeship.com/orkiestrate-containers-for-rozwój-z-docker-kompose/
  • https: // www.sumologiczne.com/blog/devops/indic-to-to-build-applications-docker-compose/
  • https: // dokumenty.doker.com/compose/wordpress/#definiuj-projekt