- Docker Compose umożliwia definiowanie i zarządzanie wieloma kontenerami z poziomu jednego pliku YAML, co ułatwia pracę z aplikacjami opartymi na mikrousługach.
- Sekcja usług jest obowiązkowa i obejmuje sieci, woluminy, konfiguracje i sekrety służące do kontrolowania komunikacji, trwałości i konfiguracji.
- Przykłady takie jak Flask+Redis czy pełna aplikacja z front-endem, back-endem i bazą danych pokazują, w jaki sposób Compose upraszcza tworzenie i wdrażanie.
- L polecenia docker compose w górę, w dół, ps i dzienniki Stanowią podstawowy obieg pracy polegający na podnoszeniu, debugowaniu i zatrzymywaniu stosów kontenerów.

Jeśli już eksperymentowałeś z kontenerami i widziałeś, że w przypadku „prawdziwej” aplikacji potrzebujesz więcej niż jedna usługa działająca w tym samym czasie (baza danych, API, frontend, pamięć podręczna…), prędzej czy później natkniesz się na Docker Compose. To narzędzie pozwala skonfigurować cały ten sprzęt za pomocą jednego pliku i kilku poleceń, bez konieczności żonglowania terminalami i niekończących się skryptów.
W tym samouczku dowiesz się, czym jest Docker Compose i jak działa jego plik compose.yaml i jak organizować aplikacje Czyste konfiguracje wielokontenerowe: od prostych przykładów z Flask i Redis po bardziej złożone architektury z front-endem, back-endem i bazą danych. Dowiesz się również o sieciach, woluminach, konfiguracjach, sekretach i kluczowych poleceniach, aby komfortowo pracować w środowiskach programistycznych i bardziej wymagających.
Czym jest Docker Compose i dlaczego warto z niego korzystać?
Docker Compose to rozszerzenie Dockera, które umożliwia definiować i zarządzać wieloma kontenerami jakby były pojedynczą aplikacją. Zamiast uruchamiać każdą usługę ręcznie za pomocą polecenia „docker run” i parametrów, opisujesz wszystko w pliku YAML i uruchamiasz ją jednym poleceniem.
Piękno Compose polega na tym, że wiele nowoczesnych aplikacji jest na nim opartych. mikrousługi znajdujące się w pojedynczych kontenerachBaza danych, API, front-end, system kolejkowy, pamięć podręczna podobna do Redis itd. Docker zaleca, aby każdy kontener obsługiwał pojedynczą usługę, więc jeśli spróbujesz zmieścić wszystko w jednym obrazie, otrzymasz monstrualną infrastrukturę, którą trudno skalować i utrzymywać.
Można uruchomić dwie lub więcej usług w tym samym kontenerze, ale To niweluje wiele zalet Dockera.Jeśli jeden zawiedzie, pociągnie za sobą spadek wydajności pozostałe. Nie można skalować tylko tej części, która otrzymuje największe obciążenie, a zarządzanie dziennikami, zasobami i awariami staje się jednym wielkim bałaganem.
Dzięki Docker Compose możesz definiować każdą usługę osobno, określając sposób ich łączenia się ze sobą, jakie dane przechowują, jakie porty udostępniają, jakich zmiennych środowiskowych używają… W ten sposób Jeśli jeden kontener ulegnie awarii, reszta będzie mogła nadal działać. w zależności od konfiguracji, skalowanie konkretnego elementu jest tak proste, jak zmiana jego ustawień lub liczby replik.
Co więcej, Compose idealnie wpasowuje się w przepływy pracy CI/CD i wdrożenie w środowisku produkcyjnymMożna go używać bezpośrednio z narzędziami takimi jak Portainer lub Docker Swarm, a jeśli pracujesz z Kubernetes, projekty takie jak Kompose umożliwiają przetłumaczenie pliku compose.yaml na manifesty Kubernetes bez konieczności ręcznego przepisywania wszystkiego.
Wymagania wstępne do skorzystania z samouczka Docker Compose
Aby wygodnie śledzić przykłady w tym samouczku, potrzebujesz: mieć zainstalowane Docker i Docker ComposeObecnie istnieją dwie główne ścieżki:
- Silnik Dockera + Docker Compose zainstalowane jako samodzielne pliki binarne.
- Pulpit Dockera, który obejmuje Docker Engine, Docker Compose i interfejs graficzny.
Ważne jest, aby mieć minimum podstawy podstawowe polecenia Dockera (obrazy, kontenery, porty, woluminy) i nie bój się korzystać z wiersza poleceń. Przykłady są zazwyczaj przyjmowane w Linux (na przykład Ubuntu 22.04), ale logika ta ma zastosowanie również w Windows i macOS z Docker Desktop.
Sprawdź, czy wszystko jest w porządku, uruchamiając go na swoim komputerze. terminal coś tak prostego jak „docker –wersja” i „docker compose wersja”Jeśli oba polecenia nie wywołają błędu, możesz kontynuować pracę nad przykładami.
Podstawowa struktura pliku compose.yaml
Sercem Docker Compose jest plik compose.yaml (lub docker-compose.yml)Tam opisujemy, jakie usługi chcemy skonfigurować i jak powinny być ze sobą powiązane. Chociaż wcześniej pole to było używane version W celu oznaczenia wersji formatu bieżąca dokumentacja zaleca, aby nie definiować jej. Zaleca się zatem, aby zawsze używana była najnowsza wersja schematu.
W pliku „Utwórz” możesz mieć kilka możliwych sekcji, chociaż tylko jedna jest obowiązkowa: BranżeNastępnie możesz dodać inne sekcje, zależnie od stopnia złożoności swojego projektu:
- Branże:definicja każdej mikrousługi (obowiązkowa).
- sieci:niestandardowe sieci kontrolujące komunikację między kontenerami.
- kłęby:woluminy służące do przechowywania danych lub udostępniania ich pomiędzy usługami.
- configs: konfiguracja usługi (np. pliki konfiguracyjne serwera WWW).
- tajniki: zarządzanie poufnymi informacjami (hasła, klucze API…).
W tym samouczku pokażemy Ci, jak połączyć wszystkie te sekcje w typowym projekcie obejmującym: aplikacja, baza danych i APIi przykład aplikacji internetowej w Python z Flask i Redis.
Usługi w Docker Compose: sedno definicji
Sekcja usługi są istotnym elementem Z dowolnego pliku Compose. Definiujesz w nim każdy z kontenerów, które będą tworzyć Twoją aplikację, nadając im dowolną nazwę (na przykład web, database, api, redisItp.).
Dla każdej usługi możesz ustalić odpowiednią liczbę parametryWśród nich znajdują się takie, które są powszechnie stosowane w rzeczywistych projektach:
Parametr build wskazuje lokalizację pliku Dockerfile z którego zostanie zbudowany obraz usługi. Zazwyczaj określa się kontekst (katalog), w którym znajduje się plik Dockerfile aplikacji, którą chcesz spakować.
Jeśli masz już utworzony obraz lub chcesz użyć obrazu z rejestru, użyj image aby się do tego odwołaćNazwa jest zgodna z formatem [<registry>/][<project>/]<image>[:<tag>|@<digest>]Jeśli chcesz kontrolować, kiedy obraz zostanie pobrany lub zaktualizowany, możesz użyć pull_policy.
pole ports Służy do mapowania portów pomiędzy hostem a konteneremSkładnia jest typu [HOST:]CONTAINER[/PROTOCOL]Na przykład, jeśli baza danych PostgreSQL nasłuchuje na porcie 5432 wewnątrz kontenera i chcesz ją udostępnić na porcie 5555 hosta, wykonaj następujące czynności: "5555:5432" na liście portów.
Zasady ponownego uruchamiania są kontrolowane za pomocą restartktóra wskazuje, co zrobić, gdy kontener zakończy działanie z powodu błędu lub się zatrzyma. Typowe wartości to no, always, on-failure y unless-stoppedumożliwiając funkcjonowanie kluczowych usług, nawet jeśli doświadczają sporadycznych przerw.
Jeśli jedna usługa wymaga dostępności innej przed rozpoczęciem, możesz użyć depends_on definiowanie zależności między konteneramiKlasycznym przykładem jest aplikacja, która wymaga uruchomienia bazy danych, aby uniknąć zerwania początkowego połączenia.
W przypadku konfiguracji i poświadczeń stosuje się dwa powszechnie stosowane podejścia: env_file y environment. Z env_file Wskazujesz na jeden lub więcej plików .env ze zmiennymi środowiskowymi, podczas gdy w environment Możesz je umieścić bezpośrednio w pliku YAML. Najlepszą praktyką jest użycie plików. .env aby zapobiec osadzaniu haseł i poufnych danych w pliku compose.yaml.
Parametr volumes umożliwia montowanie ścieżek hosta lub woluminów W kontenerze będziesz korzystać zarówno z trwałości danych, jak i udostępniania folderów między usługami. W tym przypadku będziesz odwoływać się tylko do woluminów, które później zdefiniujesz w sekcji powyżej. volumes jeśli chcesz je udostępniać lub zarządzać nimi w sposób bardziej jawny.
Dzięki tym polom możesz już tworzyć dość kompletne usługi. Specyfikacja Compose obejmuje wiele bardziej zaawansowanych opcji (zdrowie, limity zasobów, polecenia bootitd.), ale dzięki temu poznasz już najczęstsze zastosowania.
Przykład 1: Aplikacja internetowa w Pythonie z Flask i Redis
Typowym przykładem zrozumienia Docker Compose jest utworzenie prosta aplikacja internetowa w PythonieUżywamy Flaska do obsługi stron i Redisa jako magazynu w pamięci dla licznika odwiedzin. Idea polega na tym, że nie musisz instalować ani Pythona, ani Redisa na swoim komputerze: wszystko działa w kontenerach.
Przepływ pracy wyglądałby mniej więcej tak: najpierw tworzysz katalog dla projektu i dodajesz do niego plik app.py z kodem Flask. W tym kodzie używasz „redis” jako nazwa hosta i port 6379, który jest domyślnym portem usługi Redis w Twoim kontenerze.
Funkcja zarządzająca licznikiem odwiedzających Kilkakrotnie próbuje nawiązać połączenie z Redis. Zanim się poddasz, pamiętaj, że po usunięciu całego stosu może minąć kilka sekund, zanim kontener Redis stanie się dostępny.
Plus app.py, tworzysz plik requirements.txt z zależnościami Pythona (na przykład Flask i redis-py) oraz plik Dockerfile określający sposób tworzenia obrazu aplikacji internetowej: bazowy obraz Pythona (3.7, 3.10 lub inny), katalog roboczy, zmienne środowiskowe dla Flaska, instalacja gcc i zależności systemowe, kopia pliku requirements.txt, instalacja pakietu i kopia kodu.
W pliku Dockerfile zaznaczasz również port, który będzie wyświetlał kontener (na przykład 5000) i definiujesz polecenie domyślne, normalnie flask run --debug lub podobne, tak aby uruchamiał się automatycznie po utworzeniu kontenera.
Mając to wszystko gotowe, plik compose.yaml definiuje dwie usługi: jedną o nazwie na przykład web, który jest budowany na podstawie pliku Dockerfile projektu i udostępnia port 8000 zewnętrznie (mapując port 8000 hosta na port 5000 kontenera) oraz inny o nazwie redis oferuje nasz konfigurator Pobierz oficjalny obraz Redis z Docker Hub.
Aby uruchomić aplikację, wystarczy przejść do katalogu projektu i uruchomić „docker compose up”Compose zajmuje się pobraniem obrazu Redis, utworzeniem obrazu aplikacji internetowej i uruchomieniem obu usług we właściwej kolejności.
Po uruchomieniu należy wejść do przeglądarki za pomocą http://localhost:8000 (o http://127.0.0.1:8000) i powinieneś zobaczyć komunikat typu „Witaj świecie” i Licznik odwiedzin, który zwiększa się przy każdym ponownym ładowaniu strona. Jeśli obejrzysz lokalne obrazy za pomocą docker image lsZobaczysz coś takiego redis y web utworzone lub pobrane.
Kiedy chcesz wszystko zatrzymać, możesz to zrobić CTRL+C w terminalu, w którym zostawiłeś „docker compose up” lub wykonać docker compose down z katalogu projektu. Spowoduje to zatrzymanie i usunięcie kontenerów utworzonych przez tę operację.
Ulepszanie przepływu pracy: montowanie powiązań i łączenie funkcji „Compose Watch”
Praca w środowisku programistycznym z Dockerem jest wygodniejsza, jeśli Nie musisz rekonstruować obrazu Za każdym razem, gdy dotykasz kodu. Właśnie tutaj wkraczają Bind Mounts, a w nowszych wersjach Docker Compose Watch.
Montowanie metodą Bind polega na zamontowaniu folderu z komputera w kontenerze. W pliku compose.yaml dodajesz sekcję do usługi sieciowej. volumes który mapuje katalog projektu na katalog roboczy z pojemnika, na przykład .:/codeDzięki temu wszelkie zmiany wprowadzane w edytorze są natychmiast uwzględniane w kontenerze.
Jeśli aktywujesz również tryb debugowania Flaska za pomocą zmiennej FLASK_DEBUG=1, Komenda flask run Aplikacja zostanie automatycznie przeładowana po wykryciu zmian w plikach, bez konieczności jej zatrzymywania i ponownego uruchamiania.
Docker Compose Watch idzie o krok dalej: możesz użyć „docker compose watch” lub „docker compose up –watch” Dzięki temu Compose może inteligentniej monitorować pliki projektu i synchronizować zmiany z kontenerami. Po zapisaniu pliku jest on kopiowany do kontenera, a serwer programistyczny aktualizuje aplikację bez konieczności ponownego uruchamiania całego kontenera.
Spróbuj na przykład zmienić wiadomość powitalną w app.py od „Hello World!” do frazy takiej jak „Pozdrowienia z Dockera”Zapisz plik, odśwież przeglądarkę, a nowa wiadomość pojawi się natychmiast, a licznik odwiedzin będzie nadal działał bez utraty swojego stanu.
A kiedy skończysz pracę, jak zawsze, możesz wyciągnąć docker compose down dla wyłącz i wyczyść pojemniki które były realizowane przy użyciu tego stosu.
Przykład 2: Aplikacja pełnozakresowa z front-endem, back-endem i bazą danych
Aby zobaczyć Docker Compose w nieco bardziej realistycznej architekturze, wyobraź sobie aplikacja do listy zadań (Todo List) z front-endem w Vue.js, API w Node.js i bazą danych MongoDB. Każda część znajduje się w osobnym katalogu i ma swój własny Dockerfile.
W repozytorium możesz znaleźć folder frontend z aplikacją Vue i inną backend z serwerem Node. Zaplecze udostępnia punkty końcowe dla tworzenie, wyświetlanie, aktualizowanie i usuwanie zadańi łączy się z MongoDB, aby je przechowywać. Interfejs użytkownika wykorzystuje te punkty końcowe do wyświetlania i zarządzania listą zadań w przeglądarce.
plik docker-compose.yml Znajduje się u podstaw projektu i definiuje trzy usługi: frontend, backend y databaseUsługa front-end jest budowana na podstawie pliku Dockerfile w odpowiednim folderze, zwykle udostępniając wewnętrzny port 80 i mapując go na port 5173 hosta (na przykład w celu użycia tego samego adresu URL, co podczas lokalnego tworzenia).
Zaplecze jest zbudowane z pliku Dockerfile w katalogu backend, udostępnia port 3000 (zarówno wewnątrz, jak i na zewnątrz kontenera, jeśli chcesz to uprościć) i deklaruje zależność od bazy danych aby mieć pewność, że MongoDB będzie dostępne po uruchomieniu.
Usługa database użyj bezpośrednio Oficjalny obraz MongoDB i zbudujmy wolumen, powiedzmy mongodb_dataW /data/db, gdzie Mongo przechowuje swoje dane. Ten wolumin jest zadeklarowany w górnej sekcji. volumes z poziomu Compose, dzięki czemu dane zostaną zachowane nawet jeśli usuniesz i utworzysz ponownie kontenery.
Na koniec wszystkie te usługi łączą się za pośrednictwem niestandardowej sieci, na przykład my-network, zdefiniowane w sekcji networksDzięki temu można je rozwiązać według nazwy usługi (zaplecze może połączyć się z Mongo, korzystając z nazwy hosta). database) i że ruch jest kapsułkowany w tej odizolowanej sieci.
Po przygotowaniu konfiguracji uruchom docker compose up W centrum projektu leży odpowiedzialność za: zbuduj lub pobierz obrazy i uruchom trzy konteneryMożesz sprawdzić, czy wszystko jest na swoim miejscu docker compose ps, a następnie dostęp http://localhost:5173 aby wyświetlić aplikację Vue w przeglądarce i utworzyć pierwsze zadania.
Sieciowanie w Docker Compose: łączenie usług ze sobą
Sieci to warstwa, która umożliwia Twoim kontenerom „Widzą” się i rozmawiają w sposób kontrolowanyDomyślnie Docker tworzy sieci dla Compose, ale ich jawne zdefiniowanie zapewnia większą przejrzystość i kontrolę nad tym, co może się z czym komunikować.
Działa to w prosty sposób: każda usługa zawiera pole networks gdzie wskazujesz do jakich sieci należy, a następnie w górnej części networks Sieci te definiuje się za pomocą ich konfiguracji. Najczęstszym (i w wielu przypadkach zalecanym) podejściem jest użycie sterownika. bridge.
Sieć mostów tworzy prywatna przestrzeń sieć dla Twoich kontenerówz automatycznym rozpoznawaniem nazw DNS na podstawie nazwy usługi. Oznacza to, że na przykład, jeśli Twoja usługa bazy danych nazywa się databaseKażda inna usługa w tej samej sieci może połączyć się za pomocą database jako nazwa hosta.
W projekcie z frontendem, backendem i bazą danych możesz na przykład zdecydować się na utworzenie sieci frontendowej i sieci backendowej. Frontend będzie łączył się z backendem, a backend z bazą danych, ale frontend i baza danych... Nie musieliby koniecznie dzielić siecizmniejszając wewnętrzną odsłoniętą powierzchnię.
W kodzie przekłada się to na coś tak prostego, jak przypisanie odpowiedniej sieci do każdej usługi, a następnie zdefiniowanie tych sieci za pomocą mostów sterowników. Na poziomie aplikacji najprostsze podejście polega na użyciu nazwa usługi jako host podczas konfigurowania połączeń: z app a databaseNa przykład, po prostu wskazując, że hostem bazy danych jest „baza danych”.
Woluminy w Docker Compose: trwałość danych
Zalecanym sposobem jest użycie wolumenów utrwalać informacje generowane przez konteneryJak Bazy danychPliki użytkownika, kopie zapasowe itp. Służą one również do udostępniania danych między usługami w obrębie tego samego stosu.
W dziale services Możesz montować woluminy bezpośrednio za pomocą volumesJeśli jednak chcesz, aby dany wolumin był dostępny dla wielu kontenerów lub chcesz nim zarządzać w sposób bardziej jawny, możesz to również zdefiniować w górnej sekcji. volumes z compose.yaml.
Wyobraź sobie, że chcesz skonfigurować system kopii zapasowych dla swojej bazy danych. Usługa bazy danych montuje wolumin, na którym przechowuje dane, oraz inną usługę dedykowaną kopiom zapasowym, która… Zamontuj ten sam wolumin w trybie odczytu aby wykonywać eksporty lub synchronizacje bez dotykania głównego kontenera.
Docker umożliwia precyzyjne dostrojenie konfiguracji woluminów za pomocą większej liczby parametrów (typ sterownika, określone opcje dla sterowniki czynniki zewnętrzne itp.), ale w większości przypadków najbardziej praktycznym rozwiązaniem jest po prostu pozwolić, aby tak się stało. Docker automatycznie zarządza woluminami bez popadania w szaleństwo dziwnych konfiguracji.
Ważne jest, aby jasno określić, które foldery w usługach muszą być trwałe, a także zadeklarować je jako woluminy w narzędziu Compose. Dzięki temu nie utracisz danych podczas ponownego tworzenia kontenerów lub aktualizowania obrazów.
Konfiguracje: zarządzanie plikami konfiguracyjnymi
Sekcja configs Jest przeznaczony do zarządzania plikami konfiguracyjnymi usług w ramach stosu, podobnych do woluminów, ale ukierunkowanych konkretnie na konfigurację.
Pomyśl o serwerze Apache lub Nginx działającym na Dockerze. Prawdopodobnie będziesz potrzebować dostosuj swój plik konfiguracyjny Ponowne tworzenie obrazu po każdej modyfikacji tych plików jest nieefektywne i uciążliwe, zwłaszcza w środowiskach, w których parametry są często modyfikowane.
z configs Możesz określić w usłudze, którą chcesz zastosuj określoną konfigurację a następnie opisz to w sekcji configsMożna je zdefiniować na kilka sposobów, a najpopularniejszy z nich to:
fileKonfiguracja jest generowana z pliku lokalnego.external:jeśli jest oznaczony jakotrueCompose zakłada, że konfiguracja już istnieje i jest jedynie odwołaniem.name:Wewnętrzna nazwa konfiguracji w Dockerze, przydatna podczas łączenia zexternal: true.
W ten sposób możesz zaktualizować plik konfiguracyjny na swoim komputerze i powrócić do podnieś stos bez konieczności ponownego tworzenia obrazu bazowego, zachowując kod obrazu oddzielnie od konfiguracji specyficznej dla danego środowiska.
Tajemnice: dane uwierzytelniające i poufne dane
Sekcja secrets rozwiązuje klasyczny problemGdzie mogę przechowywać hasła, klucze API i inne poufne informacje, aby nie były rozproszone po kodzie lub pliku YAML?
Podobnie jak w przypadku konfiguracji, sekrety można definiować na różne sposobyZwykłą rzeczą jest:
file:sekret jest generowany z zawartości pliku (na przykład pliku tekstowego z kluczem).environmentSekret jest tworzony przy użyciu wartości zmiennej środowiskowej w systemie.external: oznacza, że sekret został już utworzony i wystarczy się do niego tylko odwołać; przydatne, aby uniknąć nadpisywania sekretów zarządzanych z zewnątrz.name:wewnętrzna nazwa sekretu, szczególnie istotna przy łączeniuexternal: truez sekretami stworzonymi przez inne narzędzie.
Za pomocą sekretów możesz tworzyć kontenery wymagające dostępu do tych danych uwierzytelniających przeczytaj je w sposób kontrolowany bez konieczności pozostawiania ich widocznych w repozytorium kodu lub w samym pliku compose.yaml, co znacznie zwiększa bezpieczeństwo wdrożeń.
Praca z wieloma plikami Tworzenie i dołączanie
W dużych projektach nierzadko zdarza się, że aplikacja jest podzielona na kilka usług, czasami zarządzanych przez różne zespoły. W takich przypadkach praktyczne jest... oddziel konfigurację na wiele plików Compose aby lepiej modularizować architekturę.
Typowe podejście polega na tym, że compose.yaml plik główny aplikacji i inne pliki części infrastruktury. Na przykład możesz przenieś definicję Redis lub inne usługi wsparcia plików infra.yaml i w treści pisz tylko to, co bezpośrednio dotyczy Twojej aplikacji.
Aby to zrobić, utwórz plik infra.yaml z własną sekcją services gdzie zostawiasz na przykład pełną usługę Redis. Następnie w swoim compose.yaml główna, dodajesz sekcję include który wskazuje na plik infra.yaml.
Kiedy biegasz docker compose up Z katalogu projektu, Utwórz Połącz oba pliki i wyświetla wszystkie usługi tak, jakby znajdowały się w jednym pliku YAML, ale logika nadal jest oddzielona i bardziej zorganizowana.
Ta technika ułatwia różnym zespołom utrzymywanie własnych plików Compose oraz tworzenie globalnej aplikacji przy użyciu plików include, co jest bardzo przydatne w architektury z dziesiątkami kontenerów lub środowisk z dużą ilością współdzielonej infrastruktury.
Podstawowe polecenia Docker Compose
Mimo że Compose ma dobry katalog poleceń, w codziennej pracy większość osób korzysta z garść z nich powtarza się regularnieWażne jest, aby je opanować, ponieważ to one definiują Twój przepływ pracy.
Najważniejsze jest docker compose upTo polecenie buduje niezbędne obrazy (jeśli jeszcze nie istnieją), tworzy kontenery, konfiguruje sieci i woluminy oraz uruchamia wszystkie usługi zdefiniowane w pliku Compose. To polecenie służy do uruchamiania stosu.
Zwykle łączy się ją z opcją -d aby uruchomić go w trybie „odłączonym”To znaczy w tle. W ten sposób nie zapełniasz terminala logami i możesz kontynuować korzystanie z tej sesji do innych poleceń. Na przykład: docker compose up -d.
Aby zatrzymać i posprzątać to, co podniosłeś, użyj docker compose downktóry zatrzymuje i usuwa kontenery, sieci oraz opcjonalnie powiązane obrazy i woluminy. Dwie bardzo powszechne flagi to --rmi (aby usunąć obrazy) i -v (aby usunąć woluminy zdefiniowane w sekcji volumes).
Jeśli chcesz zobaczyć, które kontenery są częścią projektu i jaki jest ich status, możesz uruchomić docker compose psWyświetlana jest tutaj każda usługa, jej stan (działająca, zakończona itd.) oraz odsłonięte porty, co jest bardzo przydatne do sprawdzenia, czy wszystko działa poprawnie po up.
Po uruchomieniu stosu w trybie odłączonym logi nie pojawiają się w terminalu. Aby je wyświetlić, należy użyć... docker compose logsglobalnie lub filtrując według usługi. Flaga -f Umożliwia śledzenie logów w czasie rzeczywistym, co jest bardzo przydatne debugowanie określonej usługi bez konieczności dostępu do wnętrza kontenera.
Typowy przepływ pracy:zdefiniować compose.yaml, wykonaj docker compose up -d, sprawdź z docker compose ps, przejrzyj dzienniki z docker compose logs -f <servicio> Jeśli coś pójdzie nie tak i skończysz, użyj docker compose down zostawić wszystko w czystości.
Jeśli kiedykolwiek się zgubisz, docker compose --help Wyświetla listę dostępnych podpoleceń i opcji, dzięki czemu możesz zapamiętać, do czego służy każda z nich, bez konieczności sięgania do dokumentacji.
W świetle powyższego, główne narzędzie Compose to świetne narzędzie dla każdego, kto pracuje z kontenerami poza pojedynczymi projektami. Pozwala ono na tworzenie oprogramowania bezpośrednio w środowisku bardzo podobnym (lub identycznym) do środowiska produkcyjnego, usług kontrolnych, sieci i danych z prostego pliku YAML, a także pozwala uniknąć wielu problemów ze zgodnością i wdrażaniem, które nieuchronnie pojawiają się podczas pracy „lokalnie” bez kontenerów. Gdy już przyzwyczaisz się do pisania dobrego pliku YAML w Compose dla swoich projektów, trudno będzie Ci się wycofać.
Pisarz z pasją zajmujący się światem bajtów i technologii w ogóle. Uwielbiam dzielić się swoją wiedzą poprzez pisanie i właśnie to będę robić na tym blogu, pokazywać Ci wszystkie najciekawsze rzeczy o gadżetach, oprogramowaniu, sprzęcie, trendach technologicznych i nie tylko. Moim celem jest pomóc Ci poruszać się po cyfrowym świecie w prosty i zabawny sposób.
