Stronę tą wyświetlono już: 920 razy
Z pewnością zauważyć można było, że to całe ręczne wpisywanie poleceń, ta cała konfiguracja w jednej linii to nie jest takie przyjazne i przejrzyste rozwiązanie. Gdyby istniał jakiś sprytny (żeby nie powiedzieć przebiegły) sposób na zapisanie tej całej konfiguracji! I w rzeczy samej takie rozwiązanie istnieje, albowiem okazuje się, że odpowiedzią na te wszystkie problemy jest docker-compose.
W celu skorzystania z tego jakże zacnego narzędzia konieczne jest stworzenie pliku konfiguracyjnego .yaml lub jak kto woli .yml. Dla przykładu, który już wałkujemy od jakiegoś czasu można użyć następującego pliku .yaml:
Pierwsza ważna i podstawowa informacja na temat formatowania w plikach .yaml jest taka, że wcięcia w postaci dwóch spacji określają strukturę zagnieżdżenia (podobnie jak Python-ie).
Pierwsza linijka jest wymagana i określa wersję używanego formatu pliku. O tym można a nawet i trzeba poczytać na stronie docs.docker.com/compose/compose-file/compose-versioning/.
Wpis services to sekcja, gdzie opisuje się konfigurację kontenerów. Pierwszy kontener to baza danych, która korzysta z obrazu mongo. Są tutaj zmienne środowiskowe opisane w sekcji environment. Są również opcje związane z volume-nami. I tu ważna uwaga, nazwane volume-ny wymagają dodatkowego wpisu na końcu, który pozwala na komunikację z nimi przez inne kontenery.
Można by rzec, że to już wszystko jeżeli chodzi o kontener bazy danych. Ale, no właśnie, ale gdzie jest konfiguracja sieci
No cóż, pozostał już tylko kontener z sekcji nodewishes, który wymaga zbudowania obrazu z pliku dockerfile. W tym przypadku plik ów leży w tym samym folderze co plik yaml więc opcja build: ./ wskazuje na lokalizację tegoż pliku. W przypadku tego kontenera chcę również ustawić porty korzystając z opcji ports. Zmienne nie muszę chyba już opisywać, zaś w sekcji konfiguracji volume-nu użyte zostało bindowanie w celu przeładowania gdy kod projektu ulegnie zmianie. Ostatnia bardzo ważna opcja to
Dobra, koniec gadania o konfiguracji czas uruchomić ten projekt i zobaczyć, jak to działa! Tak oto uruchamia się wszystko na raz:
docker-compose up -d Creating network "serwer-docker_default" with the default driver Building nodewishes [+] Building 8.9s (12/12) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 32B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 34B 0.0s => [internal] load metadata for docker.io/library/node:14 0.0s => [1/7] FROM docker.io/library/node:14 0.0s => [internal] load build context 0.0s => => transferring context: 1.39kB 0.0s => CACHED [2/7] RUN apt-get update --fix-missing 0.0s => CACHED [3/7] RUN apt-get install mc -y 0.0s => CACHED [4/7] RUN apt-get install nano -y 0.0s => CACHED [5/7] WORKDIR /app 0.0s => [6/7] COPY / ./ 0.0s => [7/7] RUN npm install 8.5s => exporting to image 0.3s => => exporting layers 0.3s => => writing image sha256:dd67f024bb559d3b5ba03999def6821d2511a26cba6ec87145562fbe37a9a7fc 0.0s => => naming to docker.io/library/serwer-docker_nodewishes 0.0s Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them Creating serwer-docker_mongodb_1 ... done Creating serwer-docker_nodewishes_1 ... done
Sprawdźmy jeszcze, czy aby na pewno działa:
No dobra, wygląda na to, że działa. Ale jak zakończyć żywot tego tworu! Odpowiedź jest prostsza aniżeli odebranie dzieciakowi lizaka. Tak się bowiem składa, że wystarczy użyć polecenie:
docker-compose down Stopping serwer-docker_nodewishes_1 ... done Stopping serwer-docker_mongodb_1 ... done Removing serwer-docker_nodewishes_1 ... done Removing serwer-docker_mongodb_1 ... done Removing network serwer-docker_default