Wprowadzenie
Konteneryzacja zyskała w ostatnich latach ogromną popularność w branży oprogramowania. Można to przypisać Docker który jest platformą kontenerową upraszczającą zarządzanie procesami wewnątrz kontenerów.
Kontenery to lekkie, zwirtualizowane, przenośne, zdefiniowane programowo, standaryzowane środowiska, które pozwalają oprogramowaniu działać w izolacji od innego oprogramowania uruchomionego na fizycznej maszynie hosta. Ta cecha przenośności pozwala programistom na modularyzację ich aplikacji na izolowane usługi. Ponadto mogą być one obsługiwane niezależnie, co daje przestrzeń do skalowania.
Choć podział aplikacji na wiele usług jest zdecydowanie świetnym rozwiązaniem, wiąże się on z dodatkowym nakładem pracy związanym z zarządzaniem wieloma kontenerami. Musisz upewnić się, że komunikują się one ze sobą, uruchamiają i wyłączają w tym samym czasie. Dzięki narzędziu o nazwie Docker Compose, staje się to łatwym zadaniem. Docker Compose pozwala programistom na uruchamianie wielokontenerowych aplikacji Docker przy użyciu reguł zdefiniowanych w pliku YAML. Plik YAML zawiera definicje usług aplikacji oraz sposobu, w jaki mogą one współdzielić wolumeny danych i sieci. Po zdefiniowaniu usług możesz uruchomić je wszystkie za pomocą jednego polecenia. W tym samouczku, pokażemy Ci, jak zainstalować, skonfigurować i rozpocząć pracę z Docker Compose na systemie Ubuntu 20.04.
Wymagania wstępne
-
Ponieważ jest to praktyczny samouczek, powinieneś mieć zainstalowany system Ubuntu 20.04 jako początkowe środowisko operacyjne. Powinieneś także posiadać użytkownika niebędącego administratorem (non-root) z uprawnieniami sudo. Oto krok po kroku samouczek, który pomoże Ci skonfigurować serwer Ubuntu. Postępuj zgodnie z tym samouczkiem, aby skonfigurować plik sudoers.
-
Musisz także zainstalować Dockera. Zapoznaj się z tym samouczkiem dotyczącym tego, jak zainstalować i obsługiwać Dockera na Ubuntu 18.04.
Krok 1: Instalacja Docker Compose
Pobierzemy najnowszą stabilną wersję Docker Compose z jego oficjalnego repozytorium GitHub. Najnowszą wersję możesz sprawdzić na stronie wydań (releases), w momencie pisania tego samouczka najnowsza wersja to 1.28.5.
Najpierw zaloguj się na swój serwer Ubuntu jako użytkownik non-root z uprawnieniami sudo i wprowadź następujące polecenie. Pobierze ono najnowsze wydanie (1.28.5) i zapisze plik wykonywalny w katalogu /usr/local/bin/docker-compose. Dzięki temu będzie on dostępny globalnie jako docker-compose:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
Po pobraniu wprowadź następujące polecenie, aby ustawić odpowiednie uprawnienia, tak aby polecenie docker-compose było wykonywalne:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
Teraz zweryfikuj, czy instalacja zakończyła się sukcesem i czy polecenie można wywołać, uruchamiając następującą komendę:
|
1 |
docker-compose –version |
Powinieneś otrzymać wynik podobny do tego:

Potwierdza to, że Docker Compose został pomyślnie zainstalowany w Twoim systemie.
Krok 2: Tworzenie pliku docker-compose.yml
Aby pomóc Ci zrozumieć, jak pracować z docker-compose.yml, skonfigurujemy środowisko serwera WWW przy użyciu oficjalnego obrazu Nginx z Docker Hub. Po wdrożeniu powinniśmy być w stanie serwować podstawową stronę HTML z kontenera.
Utworzymy nasz katalog roboczy w folderze domowym, z którego będziemy pracować. Wprowadź następujące polecenie, aby utworzyć katalog:
|
1 |
mkdir ~/compose-example |
Następnie przejdź do tego katalogu:
|
1 |
cd ~/compose-example |
Po wejściu do katalogu utwórz folder aplikacji, który będzie głównym katalogiem dokumentów (document root) dla środowiska Nginx. Możemy nazwać ten folder app:
|
1 |
mkdir app |
- Tworzenie strony HTML
Użyjmy edytora tekstu nano do utworzenia pliku index.html wewnątrz folderu app:
|
1 |
nano app/index.html |
Następnie dodaj do pliku następujący kod HTML:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="pl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>Przykład Docker Compose</title> <!-- Główny plik CSS Bootstrap --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">Świetny przykład Docker Compose z CloudSigma</h1> <p class="h4"> To jest podstawowa statyczna strona HTML. </p> <p class="lead text-muted"> Ta strona jest serwowana z kontenera Docker Nginx zbudowanego przy użyciu <b>docker-compose </b> </p> </div> </div> </section> </main> </body> </html> |
Aby zapisać plik, naciśnij CTRL +O, ENTER. Następnie zamknij za pomocą CTRL +X. Następnie utworzymy docker-compose.yml plik w katalogu głównym naszego projektu.
- Hostowanie strony HTML przy użyciu docker-compose
Następnie wprowadź poniższe polecenie, aby otworzyć plik za pomocą edytora nano :
|
1 |
nano docker-compose.yml |
Następnie dodaj poniższy fragment kodu wewnątrz pliku:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
Plik docker-compose.yml plik rozpoczyna się od numeru wersji, który informuje Docker Compose, z której wersji konfiguracji korzystamy. Skorzystaj z tego linku, aby dowiedzieć się więcej o wersjonowaniu Docker Compose.
Po numerze wersji znajduje się blok services, który zawiera usługi tworzące środowisko. W tym samouczku określiliśmy tylko jedną usługę o nazwie webserver. Usługa webserver będzie używać obrazu nginx:alpine. Zdefiniowaliśmy również przekierowanie portów 8000:80. Oznacza to, że wszystkie żądania z portu 8000 na maszynie hosta będą przekierowywane do kontenera webserver na port 80, na którym działa Nginx.
Dyrektywa volumes pozwala na utworzenie współdzielonego woluminu między maszyną hosta a kontenerem, którego możemy użyć do trwałego przechowywania danych. W naszym yml fragmencie kodu udostępniamy lokalny folder app kontenerowi. Wewnątrz kontenera zostanie on umieszczony w lokalizacji /usr/share/nginx/html. Tym samym nadpisuje on domyślny katalog główny dokumentów dla Nginx. Możesz teraz zapisać i zamknąć plik.
Do tego momentu utworzyłeś przykładową stronę internetową HTML oraz plik docker-compose.yml z instrukcjami budowy skonteneryzowanego środowiska serwera WWW. Zobaczmy w następnym kroku, jak możemy uruchomić tę konfigurację.
Krok 3: Wykonanie polecenia Docker Compose
W tym kroku uruchomimy polecenie, które uruchomi nasze skonteneryzowane środowisko. Poniżej znajduje się pojedyncze polecenie, które zainicjuje proces pobierania obrazów Docker, utworzy kontener dla usługi webserver i uruchomi skonteneryzowane środowisko w tle:
|
1 |
docker-compose up -d |
Docker został zaprojektowany tak, aby działać szybko i wydajnie, więc po uruchomieniu powyższego polecenia najpierw sprawdza lokalny system pod kątem zdefiniowanego obrazu. Jeśli go brakuje, pobierze go z repozytorium Docker Hub. Powinien pojawić się wynik podobny do tego:

Po zakończeniu wykonywania polecenia środowisko kontenera zacznie działać w tle. Możesz zweryfikować, czy działa, używając polecenia:
|
1 |
docker-compose ps |
Powinieneś otrzymać podobny wynik:

Jeśli przejdziesz pod adres IP lub nazwę domeny swojego serwera i dodasz port 8000, tj. server_domain_or_IP:8000 powinieneś zobaczyć utworzoną przez nas przykładową stronę HTML:

Jeśli pamiętasz, skonfigurowaliśmy współdzielony wolumin między kontenerem a systemem hosta. Dzięki temu pliki w kontenerze są synchronizowane z plikami w systemie hosta. W związku z tym, jeśli dokonasz zmiany w pliku index.html, zsynchronizuje się on automatycznie z kontenerem, co zostanie odzwierciedlone po ponownym załadowaniu strony w przeglądarce. Możesz spróbować użyć edytora nano. W następnym kroku poznamy więcej poleceń.
Krok 4: Dodatkowe polecenia Docker Compose do zarządzania środowiskami kontenerów
Nowat, gdy pomyślnie wdrożyłeś stronę internetową za pomocą jednego polecenia docker-compose-up, zobaczmy kilka dodatkowych poleceń, które mogą być przydatne w zarządzaniu skonteneryzowanymi środowiskami.
Zaczniemy od polecenia logs. Logi mogą mieć kluczowe znaczenie podczas rozwiązywania problemów z awariami aplikacji. Najpierw uruchom następujące polecenie, aby wyświetlić logi wygenerowane przez kontener Nginx:
|
1 |
docker-compose logs |
Oto przykładowy wynik logów:

Możesz wstrzymać wykonywanie środowiska bez zmiany stanu kontenerów za pomocą polecenia:
|
1 |
docker-compose pause |
![]()
Następnie, aby wznowić działanie, użyj polecenia:
|
1 |
docker-compose unpause |
![]()
Możesz chcieć zatrzymać kontenery bez niszczenia ich danych. Aby to zrobić, użyj następującego polecenia:
|
1 |
docker-compose stop |
![]()
Aby usunąć kontenery, sieci i woluminy powiązane ze skonteneryzowanym środowiskiem, użyj polecenia:
|
1 |
docker-compose down |
![]()
Pamiętaj, że powyższe polecenie nie usuwa obrazów bazowych używanych przez Docker Compose do uruchomienia środowiska. Zapewnia to szybsze budowanie przy uruchamianiu środowiska, ponieważ sprawdza ono lokalną maszynę pod kątem pasujących obrazów. Jeśli chcesz całkowicie usunąć obraz bazowy, musisz określić to w poleceniu. W naszym przykładzie możemy usunąć nginx:alpine obraz za pomocą polecenia:
|
1 |
docker image rm nginx:alpine |

Na koniec więcej poleceń można znaleźć w oficjalnej dokumentacji Docker Compose Command-line reference.
Podsumowanie
W tym samouczku zainstalowałeś Docker Compose na Ubuntu 20.04, utworzyłeś skonteneryzowane środowisko oparte na obrazie serwera WWW Nginx i dowiedziałeś się, jak zarządzać różnymi usługami za pomocą poleceń Docker Compose.
Jeśli chcesz dowiedzieć się, jak wdrożyć rzeczywistą dynamiczną aplikację, która zależy od kilku kontenerów, przeczytaj nasz samouczek dotyczący Wdrażania Laravel, Nginx i MySQL za pomocą Docker Compose. Pełną listę poleceń docker-compose można również znaleźć w oficjalnej dokumentacji Docker Compose.
Powodzenia!
Komentarze
Brak komentarzy. Bądź pierwszy.