Samouczek: automatyzowanie kompilacji obrazu kontenera po zaktualizowaniu obrazu podstawowego w rejestrze kontenerów platformy Azure
Usługa ACR Tasks obsługuje automatyczne kompilacje obrazu kontenera, gdy obraz podstawowy kontenera jest aktualizowany, na przykład podczas stosowania poprawek do systemu operacyjnego lub struktury aplikacji w jednym z obrazów podstawowych.
Z tego samouczka dowiesz się, jak utworzyć zadanie usługi ACR, które wyzwala kompilację w chmurze po wypchnięciu obrazu podstawowego kontenera do tego samego rejestru. Możesz również wypróbować samouczek, aby utworzyć zadanie usługi ACR, które wyzwala kompilację obrazu po wypchnięciu obrazu podstawowego do innego rejestru kontenerów platformy Azure.
W tym samouczku:
- Tworzenie obrazu podstawowego
- Tworzenie obrazu aplikacji w tym samym rejestrze w celu śledzenia obrazu podstawowego
- Aktualizowanie obrazu podstawowego w celu wyzwolenia zadania obrazu aplikacji
- Wyświetlanie wyzwolonego zadania
- Weryfikowanie zaktualizowanego obrazu aplikacji
Wymagania wstępne
Ukończenie poprzednich samouczków
W tym samouczku założono, że środowisko zostało już skonfigurowane i wykonano kroki opisane w dwóch pierwszych samouczkach z serii, w których wykonano następujące czynności:
- Tworzenie rejestru kontenerów platformy Azure
- Tworzenie rozwidlenia przykładowego repozytorium
- Klonowanie przykładowego repozytorium
- Tworzenie osobistego tokenu dostępu usługi GitHub
Jeśli jeszcze tego nie zrobiono, przed kontynuowaniem wykonaj następujące samouczki:
Tworzenie obrazów kontenera w chmurze przy użyciu usługi Azure Container Registry Tasks
Automatyzowanie kompilacji obrazu kontenera za pomocą usługi Azure Container Registry Tasks
Konfigurowanie środowiska
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
- Ten artykuł wymaga wersji 2.0.46 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.
Wypełnij te zmienne środowiskowe powłoki przy użyciu wartości odpowiednich dla danego środowiska. Ten krok nie jest ściśle wymagany, ale trochę ułatwia wykonywanie przedstawionych w tym samouczku wielowierszowych poleceń interfejsu wiersza polecenia platformy Azure. Jeśli te zmienne środowiskowe nie zostaną wypełnione, należy ręcznie zastąpić każdą wartość wszędzie tam, gdzie będzie wyświetlana w przykładowych poleceniach.
ACR_NAME=<registry-name> # The name of your Azure container registry
GIT_USER=<github-username> # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the second tutorial
Scenariusz aktualizacji obrazu podstawowego
W tym samouczku przedstawiono scenariusz aktualizacji obrazu podstawowego, w którym obraz podstawowy i obraz aplikacji są przechowywane w jednym rejestrze.
Przykładowy kod obejmuje dwa pliki Dockerfile: obraz aplikacji i obraz określony w nim jako podstawowy. W poniższych sekcjach utworzysz zadanie usługi ACR, które automatycznie wyzwala kompilację obrazu aplikacji, gdy nowa wersja obrazu podstawowego zostanie wypchnięta do tego samego rejestru kontenerów.
Dockerfile-app: mała aplikacja internetowa Node.js, która renderuje statyczną stronę internetową wyświetlającą wersję środowiska Node.js, na której się opiera. Ciąg wersji jest symulowany: wyświetla zawartość zmiennej środowiskowej
NODE_VERSION
, którą zdefiniowano w obrazie podstawowym.Dockerfile-base: obraz, który plik
Dockerfile-app
określa jako podstawowy. Opiera się ona na obrazie Node i uwzględnia zmienną środowiskowąNODE_VERSION
.
W poniższych sekcjach utworzysz zadanie, zaktualizujesz wartość NODE_VERSION
w pliku Dockerfile obrazu podstawowego, a następnie użyjesz usługi ACR Tasks do skompilowania obrazu podstawowego. Gdy usługa ACR Tasks wypycha nowy obraz podstawowy do rejestru, następuje automatyczne wyzwolenie kompilacji obrazu aplikacji. Opcjonalnie możesz uruchomić obraz kontenera aplikacji lokalnie, aby zobaczyć inne ciągi wersji we wbudowanych obrazach.
W tym samouczku zadanie usługi ACR kompiluje i wypycha obraz kontenera aplikacji określony w pliku Dockerfile. Usługa ACR Tasks może również uruchamiać zadania wieloetapowe, używając pliku YAML do definiowania kroków tworzenia, wypychania i opcjonalnie testowania wielu kontenerów.
Tworzenie obrazu podstawowego
Zacznij od utworzenia obrazu podstawowego za pomocą szybkiego zadania usługi ACR Tasks przy użyciu polecenia az acr build. Zgodnie z opisem w pierwszym samouczku z serii, w tym procesie następuje nie tylko kompilacja obrazu, ale także wypchnięcie go do rejestru kontenerów, jeśli kompilacja zakończy się pomyślnie.
az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .
Utwórz zadanie
Następnie utwórz zadanie przy użyciu polecenia az acr task create:
az acr task create \
--registry $ACR_NAME \
--name baseexample1 \
--image helloworld:{{.Run.ID}} \
--arg REGISTRY_NAME=$ACR_NAME.azurecr.io \
--context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
--file Dockerfile-app \
--git-access-token $GIT_PAT
To zadanie jest podobne do zadania utworzonego w poprzednim samouczku. Przesyła ono do usługi ACR Tasks instrukcję wyzwolenia kompilacji obrazu, gdy zatwierdzenia są wypychane do repozytorium określonego przez element --context
. Podczas gdy plik Dockerfile używany do kompilowania obrazu w poprzednim samouczku określa publiczny obraz podstawowy (FROM node:15-alpine
), plik Dockerfile w tym zadaniu, Dockerfile-app, określa obraz podstawowy w tym samym rejestrze:
FROM ${REGISTRY_NAME}/baseimages/node:15-alpine
Ta konfiguracja ułatwia symulowanie poprawki platformy na obrazie podstawowym w dalszej części tego samouczka.
Kompilowanie kontenera aplikacji
Użyj polecenia az acr task run , aby ręcznie wyzwolić zadanie i skompilować obraz aplikacji. Ten krok jest potrzebny, aby zadanie śledziło zależność obrazu aplikacji od obrazu podstawowego.
az acr task run --registry $ACR_NAME --name baseexample1
Po ukończeniu zadania zanotuj identyfikator przebiegu (na przykład „da6”), jeśli chcesz wykonać poniższy krok opcjonalny.
Opcjonalnie: lokalne uruchamianie aplikacji kontenera
Jeśli pracujesz lokalnie (nie w usłudze Cloud Shell) i masz zainstalowaną platformę Docker, uruchom kontener, aby zobaczyć renderowaną aplikację w przeglądarce internetowej przed ponownym skompilowaniem jej obrazu podstawowego. Jeśli używasz usługi Cloud Shell, pomiń tę sekcję (usługa Cloud Shell nie obsługuje poleceń az acr login
ani docker run
).
Najpierw uwierzytelnij się w rejestrze kontenerów za pomocą polecenia az acr login:
az acr login --name $ACR_NAME
Teraz uruchom komputer lokalnie przy użyciu polecenia docker run
. Zastąp element <run-id> identyfikatorem przebiegu znalezionym w danych wyjściowych poprzedniego kroku (na przykład „da6”). W tym przykładzie nazwa kontenera myapp
i zawiera --rm
parametr umożliwiający usunięcie kontenera po jego zatrzymaniu.
docker run -d -p 8080:80 --name myapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>
Przejdź do elementu http://localhost:8080
w przeglądarce. Powinien zostać wyświetlony numer wersji środowiska Node.js renderowany na stronie internetowej, podobny do następującego. W kolejnym kroku wersja zostanie zwiększona przez dodanie „a” do ciągu wersji.
Aby zatrzymać i usunąć kontener, uruchom następujące polecenie:
docker stop myapp
Tworzenie listy kompilacji
Następnie utwórz listę przebiegów zadań, które wykonała usługa ACR Tasks dla rejestru, używając polecenia az acr task list-runs:
az acr task list-runs --registry $ACR_NAME --output table
Jeśli ukończono poprzedni samouczek (a rejestr nie został usunięty), powinny pojawić się dane wyjściowe podobne do poniższych. Zanotuj liczbę przebiegów zadań i najnowszą wartość RUN ID (identyfikator przebiegu), aby porównać dane wyjściowe po zaktualizowaniu obrazu podstawowego w następnej sekcji.
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- --------- -------------------- ----------
cax baseexample1 linux Succeeded Manual 2020-11-20T23:33:12Z 00:00:30
caw taskhelloworld linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:29
cav example2 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:55
cau example1 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:40
cat taskhelloworld linux Succeeded Manual 2020-11-20T23:07:29Z 00:00:27
Aktualizowanie obrazu podstawowego
W tym miejscu przeprowadzisz symulację poprawki platformy w obrazie podstawowym. Edytuj plik Dockerfile-base i dodaj „a” po numerze wersji zdefiniowanym w elemencie NODE_VERSION
:
ENV NODE_VERSION 15.2.1a
Uruchom szybkie zadanie w celu skompilowania zmodyfikowanego obrazu podstawowego. Zanotuj identyfikator przebiegu w danych wyjściowych.
az acr build --registry $ACR_NAME --image baseimages/node:15-alpine --file Dockerfile-base .
Gdy kompilacja zostanie ukończona i usługa ACR Tasks wypchnie nowy obraz podstawowy do rejestru, następuje wyzwolenie kompilacji obrazu aplikacji. Może upłynąć kilka minut, zanim utworzone wcześniej zadanie wyzwoli kompilację obrazu aplikacji, ponieważ musi wykryć nowo utworzony i wypchnięty obraz podstawowy.
Utworzenie listy zaktualizowanej kompilacji
Teraz, gdy obraz podstawowy został skompilowany, ponownie utwórz listę przebiegów zadań w celu porównania ze starszą listą. Jeśli na początku dane wyjściowe nie różnią się, okresowo uruchamiaj polecenie, aby zobaczyć nowy przebieg zadania na liście.
az acr task list-runs --registry $ACR_NAME --output table
Dane wyjściowe będą podobne do następujących. Element TRIGGER (wyzwalacz) dla ostatnio wykonanej kompilacji powinien mieć wartość „Aktualizacja obrazu”, wskazując, że zadanie zostało uruchomione przez funkcję szybkiego zadania obrazu podstawowego.
Run ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- ------------ -------------------- ----------
ca11 baseexample1 linux Succeeded Image Update 2020-11-20T23:38:24Z 00:00:34
ca10 taskhelloworld linux Succeeded Image Update 2020-11-20T23:38:24Z 00:00:24
cay linux Succeeded Manual 2020-11-20T23:38:08Z 00:00:22
cax baseexample1 linux Succeeded Manual 2020-11-20T23:33:12Z 00:00:30
caw taskhelloworld linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:29
cav example2 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:55
cau example1 linux Succeeded Commit 2020-11-20T23:16:07Z 00:00:40
cat taskhelloworld linux Succeeded Manual 2020-11-20T23:07:29Z 00:00:27
Jeśli chcesz wykonać następujący opcjonalny krok uruchamiania nowo utworzonego kontenera, aby wyświetlić zaktualizowany numer wersji, zanotuj wartość RUN ID kompilacji wyzwalanej przez aktualizację obrazu (w poprzednich danych wyjściowych jest to "ca11").
Opcjonalnie: uruchamianie nowo utworzonego obrazu
Jeśli pracujesz lokalnie (nie w usłudze Cloud Shell) i masz zainstalowaną platformę Docker, uruchom nowy obraz aplikacji po ukończeniu kompilacji. Zastąp element <run-id>
identyfikatorem przebiegu RUN ID uzyskanym w poprzednim kroku. Jeśli używasz usługi Cloud Shell, pomiń tę sekcję (usługa Cloud Shell nie obsługuje polecenia docker run
).
docker run -d -p 8081:80 --name updatedapp --rm $ACR_NAME.azurecr.io/helloworld:<run-id>
Przejdź do elementu http://localhost:8081 w przeglądarce. Powinien zostać wyświetlony zaktualizowany numer wersji środowiska Node.js (z literą „a”) na stronie internetowej:
Pamiętaj, że obraz podstawowy został zaktualizowany za pomocą nowego numeru wersji, ale ostatnio skompilowany obraz aplikacji wyświetla nową wersję. Usługa ACR Tasks pobrała zmianę do obrazu podstawowego i automatycznie ponownie skompilowała obraz aplikacji.
Aby zatrzymać i usunąć kontener, uruchom następujące polecenie:
docker stop updatedapp
Następne kroki
W tym samouczku przedstawiono sposób konfigurowania zadania w celu automatycznego wyzwalania kompilacji obrazu kontenera po zaktualizowaniu obrazu podstawowego powiązanego z obrazem.
Pełny przepływ pracy do zarządzania obrazami podstawowymi pochodzącymi ze źródła publicznego można znaleźć w temacie How to consume and maintain public content with Azure Container Registry Tasks (Jak używać i obsługiwać zawartość publiczną za pomocą zadań usługi Azure Container Registry).
Teraz przejdź do następnego samouczka, aby dowiedzieć się, jak wyzwalać zadania zgodnie ze zdefiniowanym harmonogramem.