Docker tip & scripts, czyli jak ja pracuję z kontenerami

Pisząc oprogramowanie w .NET Core, które z założenia ma być uruchamiane w chmurze, na pewno będzie podlegało konteneryzacji. Niniejszy wpis nie będzie o tym jak tworzyć kontenery, lecz o tym jak szybko je budować oraz uruchamiać, a w razie konieczności wyłączać i czyścić.

Budowanie obrazu

Do szybkiego budowania obrazu posługuję się następującym skryptem (plikiem wsadowym bat).

@ECHO OFF
SET configurationsApiRootFolder=C:\GIT\happycode.configurations.api

cd %configurationsApiRootFolder%

git checkout develop
git pull

docker build -f src/happycode.Configurations.Api/Dockerfile -t configurations-api:dev .

Powyższy skrypt w pierwszej kolejności tworzy zmienną ze ścieżką bezwzględną do folderu z repozytorium (2). Następnie przechodzi do tego folderu (4). Potem pobiera najnowsze kody źródłowe z repozytorium (6 i 7). Na koniec uruchamia komendę docker build z odpowiednimi parametrami w celu zbudowania obrazu aplikacji (9). Pierwszy parametr --file, -f to ścieżka do pliku z instrukcjami, tzw. dockerfile. Kolejny parametr --tag, -t to nazwa i tag obrazu pod którą będzie można zidentyfikować obraz w repozytorium obrazów. Ostatni parametr . (kropka) definiuje kontekst – obecny folder ze wszystkimi plikami zostanie wysłany do procesu tworzenia obrazu.

Po wykonaniu powyższego skryptu konsola wyświetli komunikat z informacje iż obraz został zbudowany i oznaczony.

Uruchamianie kontenera

Poniższy skrypt uruchamia ówcześnie zbudowany obraz.

@ECHO OFF
SET configurationsApiRootFolder=C:\GIT\happycode.configurations.api

cd %configurationsApiRootFolder%

docker run -d -e AWS_ACCESS_KEY_ID=ABC123 -e AWS_SECRET_ACCESS_KEY=abcde12345 -e AWS_DEFAULT_REGION=us-east-1 -p 5001:80 configurations-api:dev

Tutaj ponownie skrypt ustawia ścieżkę bezwzględną repozytorium (2) oraz przechodzi do tej lokalizacji (4). Ostatnia komenda docker run uruchomienia kontener (6). Pierwszy parametr --detach, -d uruchamia kontener w tle i zwraca jego ID. Drugi parametr --env, -e ustawia zmienne środowiskowe, w moim przypadku są to klucze dostępu do chmury AWS. Trzeci parametr --publish, -p odpowiedzialny jest za zmapowanie portów aplikacji w kontenerze z portami naszego systemu. Na końcu komendy znajduje się nazwa i tag obrazu który chcemy uruchomić.

Po wykonaniu powyższego skryptu, zgodnie z parametrem -d, otrzymamy ID kontenera. Wykonując komendę docker container ls możemy wylistować uruchomione kontenery i potwierdzić, że nasz kontener „wstał i ma się dobrze”.

Czasami zdarzy się, że kontener nie chce się uruchomić. W takich sytuacjach należy czytać komunikaty zwracane przez proces docker, są w nich wypisane przyczyny. W niektórych przypadkach pomaga wyczyścić repozytorium i zbudować obraz na nowo, w innych lekarstwem okazuje się ponowne uruchomienie komputera.

Czyszczenie kontenerów

Ostatni, krótki skrypt robi dwie proste rzeczy – zatrzymuje uruchomione kontenery, a następnie czyści repozytorium.

powershell docker container stop $(docker container ls -a -q)
powershell docker container rm $(docker container ls -a -q)

Skrypt uruchamia proces powershell w którym przy pomocy przetwarzania potokowego wykonuje komendę docker container ls z parametrem --all, -a odpowiedzialnym za wylistowanie wszystkich kontenerów oraz parametrem --quiet, -q który mówi procesowi docker iż lista ma zawierać tylko i wyłącznie ID kontenerów. Dla każdego zwróconego ID kontenera uruchamiana jest w pierwszej kolejności komenda docker container stop do zatrzymania kontenera, a następnie komenda docker container rm odpowiedzialna za usunięcie kontenera z repozytorium.

Po wykonaniu powyższego skryptu dostajemy listę zatrzymanych, a następnie usuniętych kontenerów.

TIP

Powyższe skrypty trzymam w lokalizacji c:\docker\. Skrypty nazywają się odpowiednio !build_configurations_api.bat, !run_configurations_api.bat oraz !clean_containers.bat (tak, nazwa każdego z plików rozpoczyna się wykrzyknikiem). Ścieżkę c:\docker\ dodaną mam do zmiennej środowiskowej Path. Dzięki temu w dowolnej lokalizacji wpisuję wykrzyknik, klikam TAB na klawiaturze i w szybki sposób mogę przeiterować po wszystkich skryptach, a następnie uruchomić jeden z nich.


A Wy macie jakieś przydatne porady, skrypty? Podzielcie się proszę w komentarzu, chętnie wypróbuję i zaadaptuję.

Podbij ↑

5 thoughts on “Docker tip & scripts, czyli jak ja pracuję z kontenerami

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *