Docker tip & scripts, czyli jak 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 jednak o tym, jak tworzyć kontenery, lecz o tym jak szybko je budować oraz uruchamiać, a w razie konieczności wyłączać i czyścić. Każdy z przedstawionych poniżej przykładów sprawdziłem i szczerze polecam.
Łukasz Kurzyniec. Full Stack developer w PGS Software. Pasjonat nowych technologii, entuzjasta JavaScript. Na co dzień pracuje w technologiach webowych ASP.NET Web API oraz .NET Core. Programowaniem zajmuje się od początku studiów – to właśnie wtedy połknął przysłowiowego bakcyla. Przez cały czas sprawia mu to wiele przyjemności oraz satysfakcji, ponieważ lubi kombinować i widzieć efekty swojej pracy. Po godzinach prowadzi bloga kurzyniec.pl, w którym dzieli się swoimi doświadczeniami dotyczącymi pracy .netowca.
Spis treści
Budowanie obrazu
Do szybkiego budowania obrazu posługuję się następującym skryptem (plikiem wsadowym bat).
@ECHO OFF SET configurationsApiRootFolder=C:GIThappycode.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:GIThappycode.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, ponieważ znajdziemy w nich ich przyczyny. W niektórych przypadkach problem rozwiązuje wyczyszczenie repozytorium i zbudowanie obrazu 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ę.
Artykuł został pierwotnie opublikowany na blogu autora. Do przygotowania zdjęcia głównego wykorzystano grafikę pochodzącą z pexels.com.
Podobne artykuły

Krytyczne spojrzenie na kod jest kluczowy dla jego skutecznej analizy. Jak analizować systemy legacy

Sieci neuronowe. PyTorch i praktyczny projekt od początku do końca

Od czego zacząć swoją przygodę w branży IT? Rozmowa z Jackiem Hrynczyszynem, Java Developerem

Kim jest Software Architect? Obowiązki, specjalizacje, kariera

Co nowego w Javie? Przegląd zmian, które przyniosło JDK 20

Efektywne zarządzanie Protocoll Buffers z “Buf”. Wszystko, co powinieneś wiedzieć

Czy Scala to wciąż dobry język dla programistów w 2023 roku?
