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
Komputer dewelopera z następującym oprogramowaniem:
Rejestr kontenerów w usłudze Azure Container Registry. Rejestr kontenerów można utworzyć w ramach subskrypcji platformy Azure przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.
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.
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
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
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.
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
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.
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
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.
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
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
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.
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
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>
- 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.
- 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.
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.
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
- Aby uzyskać krótkie kroki dotyczące dodatkowych funkcji kontenera systemu Linux, zobacz Tworzenie pierwszej aplikacji kontenera usługi Service Fabric w systemie Linux.
- Aby uzyskać bardziej szczegółowe instrukcje dotyczące kontenerów systemu Linux, zapoznaj się z samouczkiem dotyczącym tworzenia aplikacji kontenera systemu Linux.
- Dowiedz się więcej o uruchamianiu kontenerów w usłudze Service Fabric.