Tworzenie kontenera usługi Service Fabric z uruchomionym serwerem Apache Tomcat w systemie Linux

Apache Tomcat to popularna implementacja typu open source technologii Java Servlet i Java Server. W tym artykule pokazano, jak utworzyć kontener za pomocą serwera Apache Tomcat i prostej aplikacji internetowej, wdrożyć kontener w klastrze usługi Service Fabric z systemem Linux i nawiązać połączenie z aplikacją internetową.

Aby dowiedzieć się więcej na temat serwera Apache Tomcat, zobacz stronę główną serwera Apache Tomcat.

Wymagania wstępne

Kompilowanie obrazu serwera Tomcat i uruchamianie go lokalnie

Wykonaj kroki opisane w tej sekcji, aby utworzyć obraz platformy Docker na podstawie obrazu apache Tomcat i prostej aplikacji internetowej, a następnie uruchomić go w kontenerze w systemie lokalnym.

  1. Sklonuj repozytorium przykładów języka Java w usłudze Service Fabric na komputerze dewelopera.

    git clone https://github.com/Azure-Samples/service-fabric-java-getting-started.git
    
  2. Zmień katalogi na przykładowy katalog serwera Apache Tomcat (service-fabric-java-getting-started/container-apache-tomcat-web-server-sample):

    cd service-fabric-java-getting-started/container-apache-tomcat-web-server-sample
    
  3. Utwórz plik platformy Docker na podstawie oficjalnego obrazu serwera Tomcat znajdującego się w usłudze Docker Hub i przykładzie serwera Tomcat. W katalogu service-fabric-java-getting-started/container-apache-tomcat-web-server-sample utwórz plik o nazwie Dockerfile (bez rozszerzenia pliku). Dodaj następujący kod do pliku Dockerfile i zapisz zmiany:

    FROM library/tomcat
    
    EXPOSE 8080
    
    COPY ./ApacheTomcat /usr/local/tomcat
    

    Aby uzyskać więcej informacji, zobacz dokumentację pliku Dockerfile.

  4. Zaloguj się do platformy Docker i uruchom docker build polecenie , aby utworzyć obraz, który uruchamia aplikację internetową:

    docker login
    docker build . -t tomcattest
    

    To polecenie kompiluje nowy obraz przy użyciu instrukcji w pliku Dockerfile, nazewnictwa (-t tagowania) obrazu tomcattest. Aby utworzyć obraz kontenera, obraz podstawowy jest najpierw pobierany z usługi Docker Hub i dodawany do niego aplikacja.

    Po zakończeniu działania polecenia budowania uruchom polecenie docker images, aby wyświetlić informacje o nowym obrazie:

    $ docker images
    
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    tomcattest                    latest              86838648aab6        2 minutes ago       194 MB
    
  5. Przed wypchnięciem rejestru kontenerów sprawdź, czy konteneryzowana aplikacja działa lokalnie:

    docker run -itd --name tomcat-site -p 8080:8080 tomcattest.
    
    • --name nazwa kontenera, aby można było odwoływać się do niego przy użyciu przyjaznej nazwy, a nie jego identyfikatora.
    • -p określa mapowanie portów między kontenerem a systemem operacyjnym hosta.

    Uwaga

    Port otwarty za pomocą parametru -p powinien być portem, na którym aplikacja Tomcat nasłuchuje żądań. W bieżącym przykładzie istnieje Połączenie or skonfigurowany w pliku ApacheTomcat/conf/server.xml do nasłuchiwania na porcie 8080 dla żądań HTTP. Ten port jest mapowany na port 8080 na hoście.

    Aby dowiedzieć się więcej o innych parametrach, zobacz dokumentację uruchamiania platformy Docker.

  6. Aby przetestować kontener, otwórz przeglądarkę i wprowadź jeden z następujących adresów URL. Dla każdego adresu URL zostanie wyświetlony wariant ekranu powitalnego "Hello World!".

    • http://localhost:8080/hello
    • http://localhost:8080/hello/sayhello
    • http://localhost:8080/hello/sayhi

    Hello world /sayhi

  7. Zatrzymaj kontener i usuń go z komputera deweloperskiego:

    docker stop tomcat-site
    docker rm tomcat-site
    

Wypychanie obrazu tomcat do rejestru kontenerów

Po sprawdzeniu, czy obraz Serwera Tomcat działa w kontenerze na komputerze dewelopera, wypchnij go do repozytorium w rejestrze kontenerów, aby zmniejszyć zakłócenia w przepływach pracy tworzenia i wdrażania obrazów. W tym artykule użyto usługi Azure Container Registry do przechowywania obrazu, ale z pewnymi modyfikacjami kroków można użyć dowolnego wybranego rejestru kontenerów. W tym artykule przyjmuje się, że nazwa rejestru to myregistry , a pełna nazwa rejestru jest myregistry.azurecr.io. Zmień je odpowiednio dla danego scenariusza.

  1. Uruchom polecenie docker login , aby zalogować się do rejestru kontenerów przy użyciu poświadczeń rejestru.

    Poniższy przykład przekazuje identyfikator i hasło jednostki usługi Microsoft Entra. Na przykład nazwę główną usługi można było przypisać do rejestru dla scenariusza automatyzacji. Możesz też zalogować się przy użyciu nazwy użytkownika i hasła rejestru.

    docker login myregistry.azurecr.io -u xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -p myPassword
    
  2. Następujące polecenie tworzy tag lub alias obrazu z w pełni kwalifikowaną ścieżką do Twojego rejestru. W tym przykładzie obraz jest umieszczany w przestrzeni nazw samples, aby uniknąć zaśmiecania katalogu głównego rejestru.

    docker tag tomcattest myregistry.azurecr.io/samples/tomcattest
    
  3. Wypchnij obraz do rejestru kontenerów:

    docker push myregistry.azurecr.io/samples/tomcattest
    

Kompilowanie i wdrażanie aplikacji kontenera usługi Service Fabric

Po wypchnięciu obrazu tomcat do rejestru kontenerów możesz skompilować i wdrożyć aplikację kontenera usługi Service Fabric, która ściąga obraz serwera Tomcat z rejestru i uruchamia go jako konteneryzowaną usługę w klastrze.

  1. Utwórz nowy katalog poza lokalnym klonem (poza drzewem katalogów service-fabric-java-getting-started ). Przejdź do niego i użyj narzędzia Yeoman, aby utworzyć szkielet aplikacji kontenera:

    yo azuresfcontainer 
    

    Wprowadź następujące wartości po wyświetleniu monitu:

    • Nadaj aplikacji nazwę: ServiceFabricTomcat
    • Nazwa usługi aplikacji: TomcatService
    • Wprowadź nazwę obrazu: podaj adres URL obrazu kontenera w rejestrze kontenerów; na przykład myregistry.azurecr.io/samples/tomcattest.
    • Polecenia: pozostaw to pole puste. Ponieważ ten obraz ma zdefiniowany punkt wejścia obciążenia, nie musisz jawnie określić poleceń wejściowych (są to polecenia uruchamiane wewnątrz kontenera, które zapewnią działanie kontenera po uruchomieniu).
    • Liczba wystąpień aplikacji kontenera gościa: 1

    Service Fabric Yeoman generator for containers

  2. W manifeście usługi (ServiceFabricTomcat/ServiceFabricTomcat/TomcatServicePkg/ServiceManifest.xml) dodaj następujący kod XML w głównym tagu ServiceManfest , aby otworzyć port, na który aplikacja nasłuchuje żądań. Tag Punkt końcowy deklaruje protokół i port punktu końcowego. W tym artykule konteneryzowana usługa nasłuchuje na porcie 8080:

<Resources>
 <Endpoints>
   <!-- This endpoint is used by the communication listener to obtain the port on which to 
    listen. Please note that if your service is partitioned, this port is shared with 
    replicas of different partitions that are placed in your code. -->
   <Endpoint Name="endpointTest" Port="8080" Protocol="tcp"/>
 </Endpoints>
</Resources>
  1. W manifeście aplikacji (ServiceFabricTomcat/ServiceFabricTomcat/ApplicationManifest.xml) w tagu ServiceManifestImport dodaj następujący kod XML. Zastąp wartości AccountName i Password w tagu RepositoryCredentials nazwą rejestru kontenerów i hasłem wymaganym do zalogowania się do niego.
<Policies>
 <ContainerHostPolicies CodePackageRef="Code">
   <PortBinding ContainerPort="8080" EndpointRef="endpointTest"/>
   <RepositoryCredentials AccountName="myregistry" Password="=P==/==/=8=/=+u4lyOB=+=nWzEeRfF=" PasswordEncrypted="false"/>
 </ContainerHostPolicies>
</Policies>

Tag ContainerHostPolicies określa zasady aktywowania hostów kontenerów.

  • Tag PortBinding konfiguruje zasady mapowania portów kontenera na host. Atrybut ContainerPort jest ustawiony na 8080, ponieważ kontener uwidacznia port 8080, jak określono w pliku Dockerfile. Atrybut EndpointRef jest ustawiony na "endpointTest", punkt końcowy zdefiniowany w manifeście usługi w poprzednim kroku. W związku z tym żądania przychodzące do usługi na porcie 8080 są mapowane na port 8080 w kontenerze.
  • Tag RepositoryCredentials określa poświadczenia, z których kontener musi się uwierzytelniać w repozytorium (prywatnym), z którego ściąga obraz. Te zasady nie są potrzebne, jeśli obraz zostanie ściągnięty z repozytorium publicznego.
  1. W folderze ServiceFabricTomcat połącz się z klastrem usługi Service Fabric.
  • Aby nawiązać połączenie z lokalnym klastrem usługi Service Fabric, uruchom polecenie:

    sfctl cluster select --endpoint http://localhost:19080
    
  • Aby nawiązać połączenie z bezpiecznym klastrem platformy Azure, upewnij się, że certyfikat klienta jest obecny jako plik pem w katalogu ServiceFabricTomcat i uruchom polecenie:

    sfctl cluster select --endpoint https://PublicIPorFQDN:19080 -pem your-certificate.pem -no-verify
    

    W poprzednim poleceniu zastąp your-certificate.pem ciąg nazwą pliku certyfikatu klienta. W środowiskach deweloperskich i testowych certyfikat klastra jest często używany jako certyfikat klienta. Jeśli certyfikat nie jest podpisany samodzielnie, pomiń -no-verify parametr .

    Certyfikaty klastra są zwykle pobierane lokalnie jako pliki pfx. Jeśli nie masz jeszcze certyfikatu w formacie PEM, możesz uruchomić następujące polecenie, aby utworzyć plik pem z pliku pfx:

    openssl pkcs12 -in your-certificate.pfx -out your-certificate.pem -nodes -passin pass:your-pfx-password
    

    Jeśli plik PFX nie jest chroniony hasłem, użyj -passin pass: ostatniego parametru.

  1. Uruchom skrypt instalacji podany w szablonie, aby wdrożyć aplikację w klastrze. Skrypt kopiuje pakiet aplikacji do magazynu obrazów klastra, rejestruje typ aplikacji i tworzy wystąpienie aplikacji.

    ./install.sh
    

Po uruchomieniu skryptu instalacji otwórz przeglądarkę i przejdź do narzędzia Service Fabric Explorer:

  • W klastrze lokalnym użyj polecenia http://localhost:19080/Explorer (zastąp localhost prywatnym adresem IP maszyny wirtualnej, jeśli używasz narzędzia Vagrant w systemie Mac OS X).
  • W bezpiecznym klastrze platformy Azure użyj polecenia https://PublicIPorFQDN:19080/Explorer.

Rozwiń węzeł Aplikacje i zwróć uwagę, że istnieje teraz wpis dla typu aplikacji ServiceFabricTomcatType i inny dla pierwszego wystąpienia tego typu. Wdrożenie aplikacji może potrwać kilka minut, więc być cierpliwym.

Service Fabric Explorer

  1. Aby uzyskać dostęp do aplikacji na serwerze Tomcat, otwórz okno przeglądarki i wprowadź dowolny z następujących adresów URL. Jeśli wdrożono w klastrze lokalnym, użyj hosta lokalnego dla nazwy PublicIPorFQDN. Dla każdego adresu URL zostanie wyświetlony wariant ekranu powitalnego "Hello World!".

    • http://PublicIPorFQDN:8080/hello
    • http://PublicIPorFQDN:8080/hello/sayhello
    • http://PublicIPorFQDN:8080/hello/sayhi

Czyszczenie

Użyj skryptu dezinstalacji podanego w szablonie, aby usunąć wystąpienie aplikacji z klastra i wyrejestrować typ aplikacji.

./uninstall.sh

Po wypchnięciu obrazu do rejestru kontenerów można usunąć lokalny obraz z komputera dewelopera:

docker rmi tomcattest
docker rmi myregistry.azurecr.io/samples/tomcattest

Następne kroki