Szybki start: tworzenie obrazu kontenera w celu wdrażania aplikacji przy użyciu usługi Azure Pipelines

Azure DevOps Services

W tym przewodniku Szybki start pokazano, jak utworzyć obraz kontenera na potrzeby wdrażania aplikacji przy użyciu usługi Azure Pipelines. Aby skompilować ten obraz, wystarczy plik Dockerfile w repozytorium. Kontenery systemu Linux lub Windows można tworzyć na podstawie agenta używanego w potoku.

Wymagania wstępne

Rozwidlenie przykładowego repozytorium

W przeglądarce przejdź do następującego przykładowego repozytorium i rozwidlenia go na koncie usługi GitHub.

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Tworzenie obrazu systemu Linux lub Windows

  1. Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.

  2. Przejdź do obszaru Potoki i wybierz pozycję Nowy potok lub Utwórz potok , jeśli utworzysz pierwszy potok w projekcie.

  3. Wybierz pozycję GitHub jako lokalizację kodu źródłowego.

  4. Wybierz repozytorium, a następnie wybierz pozycję Potok startowy.

    • Jeśli nastąpi przekierowanie do usługi GitHub w celu zalogowania się, wprowadź swoje poświadczenia usługi GitHub.
    • Jeśli nastąpi przekierowanie do usługi GitHub w celu zainstalowania aplikacji Azure Pipelines, wybierz pozycję Zatwierdź i zainstaluj.
  5. Zastąp zawartość azure-pipelines.yml następującym kodem. Na podstawie tego, czy wdrażasz aplikację systemu Linux, czy Windows, upewnij się, że ustawiono odpowiednio wartość vmImageubuntu-latest lub windows-latest.

     trigger:
     - main
    
     pool:
       vmImage: 'ubuntu-latest' 
    
     variables:
       imageName: 'pipelines-javascript-docker'
    
     steps:
     - task: Docker@2
       displayName: Build an image
       inputs:
         repository: $(imageName)
         command: build
         Dockerfile: app/Dockerfile
    
  6. Po zakończeniu wybierz pozycję Zapisz i uruchom.

  7. Po dodaniu pliku azure-pipelines.yml do repozytorium zostanie wyświetlony monit o dodanie komunikatu zatwierdzenia. Wprowadź komunikat, a następnie wybierz pozycję Zapisz i uruchom.

W przypadku korzystania z własnych agentów upewnij się, że platforma Docker jest zainstalowana na hoście agenta, a aparat/demon platformy Docker jest uruchomiony z podwyższonym poziomem uprawnień.

Aby skompilować obraz, platforma Docker musi być zainstalowana na hoście agenta, a aparat/demon platformy Docker musi być uruchomiony z podwyższonym poziomem uprawnień. Wykonaj poniższe kroki, aby utworzyć potok przy użyciu edytora potoku YAML.

  1. Przejdź do kolekcji i utwórz projekt.
  2. W projekcie wybierz pozycję Potoki.
  3. Wybierz pozycję Utwórz potok.
  4. Wybierz pozycję GitHub Enterprise Server jako lokalizację kodu źródłowego.
  5. Jeśli jeszcze tego nie zrobiono, autoryzuj usługę Azure Pipelines do nawiązania połączenia z kontem usługi GitHub Enterprise Server.
    1. Wybierz pozycję Połączenie do usługi GitHub Enterprise Server.
    2. Wprowadź szczegóły konta, a następnie wybierz pozycję Weryfikuj i zapisz.
  6. Wybierz repozytorium. Jeśli nastąpi przekierowanie do usługi GitHub w celu zainstalowania aplikacji Azure Pipelines, wybierz pozycję Zatwierdź i zainstaluj.
  7. Aby skonfigurować potok, wybierz szablon Kompiluj obraz platformy Docker.
  8. W edytorze potoku YAML zastąp zawartość pliku YAML następującym kodem. Zastąp nazwę puli nazwą puli, która zawiera własnego agenta, przy użyciu funkcji platformy Docker.
# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- main

pool:
  name: default
  demands: docker

variables:
  imageName: 'pipelines-javascript-docker'

steps:
 - task: Docker@2
   displayName: Build an image
   inputs:
     repository: $(imageName)
     command: build
     Dockerfile: '$(Build.SourcesDirectory)/app/Dockerfile'

  1. Wybierz pozycję Zapisz i uruchom.
  2. Na stronie Zapisywanie i uruchamianie wybierz pozycję Zapisz i uruchom ponownie.

Aby uzyskać więcej informacji na temat kompilowania obrazów platformy Docker, zobacz zadanie platformy Docker używane przez tę przykładową aplikację. Można również bezpośrednio wywoływać polecenia platformy Docker przy użyciu zadania wiersza polecenia.

Obrazy kontenerów są kompilowane i przechowywane na agencie. Obraz można wypchnąć do usługi Google Container Registry, Docker Hub lub Azure Container Registry. Aby uzyskać więcej informacji, zobacz Wypychanie obrazu do usługi Docker Hub lub Google Container Registry lub Wypychanie obrazu do usługi Azure Container Registry.

Czyszczenie zasobów

Jeśli nie planujesz kontynuować korzystania z tej aplikacji, usuń potok i repozytorium kodu.

Często zadawane pytania

Jakich agentów mogę użyć do kompilowania obrazów kontenerów?

  • Obrazy kontenerów systemu Linux można kompilować przy użyciu agentów systemu Ubuntu hostowanych przez firmę Microsoft lub własnych agentów opartych na platformie Linux.

  • Obrazy kontenerów systemu Windows można kompilować przy użyciu agentów systemu Windows hostowanych przez firmę Microsoft lub własnych agentów opartych na platformie Windows. Wszystkie agenty oparte na platformie Windows hostowane przez firmę Microsoft są dostarczane z aparatem Moby i klientem wymaganym do kompilacji platformy Docker.

  • Obecnie nie można używać agentów systemu macOS hostowanych przez firmę Microsoft do tworzenia obrazów kontenerów, ponieważ aparat Moby wymagany do kompilowania obrazów nie jest wstępnie zainstalowany na tych agentach.

Aby uzyskać więcej informacji, zobacz opcje agentów systemów Windows i Linux dostępne w przypadku agentów hostowanych przez firmę Microsoft.

Jakie wstępnie zbuforowane obrazy platformy Docker są dostępne na hostowanych agentach?

Aby uniknąć długich interwałów ściągnięcia obrazów platformy Docker dla każdego zadania z rejestru kontenerów, niektóre często używane obrazy są wstępnie przechowywane w agentach hostowanych przez firmę Microsoft. Aby uzyskać listę dostępnych obrazów wstępnie zbuforowanych, zobacz Dołączone oprogramowanie dla dostępnych obrazów maszyn wirtualnych w repozytorium azure-pipelines-image-generation.

Jak mogę ustawić zmienną BuildKit dla kompilacji platformy Docker?

Zestaw BuildKit wprowadza ulepszenia kompilacji dotyczące wydajności, zarządzania magazynem, funkcji i zabezpieczeń. Zestaw BuildKit nie jest obecnie obsługiwany na hostach systemu Windows.

Aby włączyć kompilacje platformy Docker przy użyciu zestawu BuildKit, ustaw zmienną DOCKER_BUILDKIT .

trigger:
- main
   
pool:
  vmImage: 'ubuntu-latest'
   

variables:
  imageName: 'pipelines-javascript-docker'
  DOCKER_BUILDKIT: 1
    
steps:
- task: Docker@2
  displayName: Build an image
  inputs:
    repository: $(imageName)
    command: build
    Dockerfile: app/Dockerfile

Jak mogę użyć własnego agenta?

Platforma Docker musi być zainstalowana, a aparat/demon uruchomiony na hoście agenta. Jeśli platforma Docker nie jest zainstalowana na hoście agenta, możesz dodać zadanie instalatora platformy Docker do potoku. Przed zadaniem platformy Docker należy dodać zadanie Instalatora platformy Docker.

Jak utworzyć kompilację platformy Docker opartą na skrycie zamiast przy użyciu zadania platformy Docker?

Możesz użyć polecenia lub dowolnego innego polecenia platformy build Docker.

docker build -f Dockerfile -t foobar.azurecr.io/hello:world .

To polecenie tworzy obraz odpowiadający jednemu skompilowanemu za pomocą zadania platformy Docker. Wewnętrznie zadanie platformy Docker wywołuje plik binarny platformy Docker w skrycie i łączy kilka kolejnych poleceń, aby zapewnić kilka dodatkowych korzyści. Dowiedz się więcej o zadaniu platformy Docker.

Czy mogę ponownie używać buforowania warstw podczas kompilacji w usłudze Azure Pipelines?

Jeśli używasz agentów hostowanych przez firmę Microsoft, każde zadanie jest wysyłane do nowo aprowizowanej maszyny wirtualnej na podstawie obrazu wygenerowanego na podstawie szablonów repozytorium azure-pipelines-image-generation. Te maszyny wirtualne są czyszczone po zakończeniu zadania. Ta efemeryczna żywotność zapobiega ponownemu używaniu tych maszyn wirtualnych w kolejnych zadaniach i ponownemu używaniu buforowanych warstw platformy Docker. Aby obejść ten problem, można skonfigurować wieloetapową kompilację, która tworzy dwa obrazy i wypycha je do rejestru obrazów na wczesnym etapie. Następnie możesz poinformować platformę Docker o użyciu tych obrazów jako źródła pamięci podręcznej z argumentem --cache-from .

Jeśli używasz własnych agentów, możesz buforować warstwy platformy Docker bez żadnych obejść, ponieważ problem z efemerycznym cyklem życia nie ma zastosowania do tych agentów.

Jak mogę skompilować obrazy kontenerów systemu Linux dla architektur innych niż x64?

W przypadku korzystania z agentów systemu Linux hostowanych przez firmę Microsoft tworzone są obrazy kontenerów systemu Linux dla architektury x64. Aby utworzyć obrazy dla innych architektur, takich jak x86 lub procesor ARM, można użyć emulatora maszyny, takiego jak QEMU.

W poniższych krokach pokazano, jak utworzyć obraz kontenera procesora ARM przy użyciu QEMU:

  1. Utwórz plik Dockerfile przy użyciu obrazu podstawowego zgodnego z architekturą docelową:

    FROM arm64v8/alpine:latest
    
  2. Uruchom następujący skrypt w zadaniu przed skompilowanie obrazu:

    # register QEMU binary - this can be done by running the following image
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # build your image
    

Aby uzyskać więcej informacji, zobacz qemu-user-static w witrynie GitHub.

Jak mogę uruchomić testy i opublikować wyniki testów dla konteneryzowanych aplikacji?

Aby uzyskać różne opcje testowania konteneryzowanych aplikacji i publikowania wynikowych wyników testu, zobacz Publikowanie wyników testu zadania.

Następne kroki

Po utworzeniu obrazu kontenera wypchnij obraz do usługi Azure Container Registry, Docker Hub lub Google Container Registry. Aby dowiedzieć się, jak wypchnąć obraz do rejestru kontenerów, przejdź do jednego z następujących artykułów: