Partilhar via


Criar contêiner do Service Fabric executando o servidor Apache Tomcat no Linux

O Apache Tomcat é uma implementação popular e de código aberto das tecnologias Java Servlet e Java Server. Este artigo mostra como criar um contêiner com o Apache Tomcat e um aplicativo Web simples, implantar o contêiner em um cluster do Service Fabric executando Linux e conectar-se ao aplicativo Web.

Para saber mais sobre o Apache Tomcat, consulte a página inicial do Apache Tomcat.

Pré-requisitos

Crie uma imagem do Tomcat e execute-a localmente

Siga as etapas nesta seção para criar uma imagem do Docker com base em uma imagem do Apache Tomcat e em um aplicativo Web simples e, em seguida, execute-a em um contêiner em seu sistema local.

  1. Clone o repositório de amostras Service Fabric de introdução ao Java no seu computador de desenvolvimento.

    git clone https://github.com/Azure-Samples/service-fabric-java-getting-started.git
    
  2. Altere os diretórios para o diretório de exemplo do servidor 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. Crie um arquivo do Docker com base na imagem oficial do Tomcat localizada no Docker Hub e no exemplo do servidor Tomcat. No diretório service-fabric-java-getting-started/container-apache-tomcat-web-server-sample , crie um arquivo chamado Dockerfile (sem extensão de arquivo). Adicione o seguinte ao Dockerfile e salve suas alterações:

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

    Consulte a referência do Dockerfile para obter mais informações.

  4. Faça login no Docker e execute o docker build comando para criar a imagem que executa seu aplicativo Web:

    docker login
    docker build . -t tomcattest
    

    Este comando cria a nova imagem usando as instruções no Dockerfile, nomeando (-t marcando) a imagem tomcattest. Para criar uma imagem de contêiner, a imagem base é baixada primeiro do Docker Hub e o aplicativo é adicionado a ela.

    Quando o comando build for concluído, execute o docker images comando para ver as informações na nova imagem:

    $ docker images
    
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    tomcattest                    latest              86838648aab6        2 minutes ago       194 MB
    
  5. Verifique se a sua aplicação conteinerizada é executada localmente antes de a enviar para o registo do contentor.

    docker run -itd --name tomcat-site -p 8080:8080 tomcattest.
    
    • --name nomeia o contêiner, para que você possa se referir a ele usando um nome amigável em vez de sua ID.
    • -p especifica o mapeamento de porta entre o contêiner e o sistema operacional host.

    Observação

    A porta que você abre com o -p parâmetro deve ser a porta em que seu aplicativo Tomcat escuta as solicitações. No exemplo atual, há um conector configurado no arquivo ApacheTomcat/conf/server.xml para escutar solicitações HTTP na porta 8080. Essa porta é mapeada para a porta 8080 no host.

    Para saber mais sobre outros parâmetros, consulte a documentação de execução do Docker.

  6. Para testar seu contêiner, abra um navegador e insira um dos seguintes URLs. Você verá uma variante da tela de boas-vindas "Hello World!" para cada URL.

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

    Olá mundo /sayhi

  7. Pare o contêiner e exclua-o do computador de desenvolvimento:

    docker stop tomcat-site
    docker rm tomcat-site
    

Envie a imagem do Tomcat para o registro de contêineres

Agora que você verificou que a imagem do Tomcat é executada em um contentor no computador de desenvolvimento, publique-a num repositório num registo de contentores para minimizar interrupções nos fluxos de trabalho de desenvolvimento e implementação de imagens. Este artigo usa o Registro de Contêiner do Azure para armazenar a imagem, mas, com algumas modificações de etapas, você pode usar qualquer registro de contêiner escolhido. Neste artigo, o nome do registo é assumido como myregistry e o nome completo do registo é myregistry.azurecr.io. Altere-os adequadamente para o seu cenário.

  1. Execute docker login para entrar no seu registro de contêiner com suas credenciais de registro.

    O exemplo a seguir passa o identificador e a senha de uma entidade de serviço do Microsoft Entra. Por exemplo, poderá ter atribuído um principal de serviço no seu registo para um cenário de automação. Ou, você pode entrar usando seu nome de usuário e senha do registro.

    docker login myregistry.azurecr.io -u xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -p myPassword
    
  2. O comando a seguir cria uma tag, ou alias, da imagem, com um caminho totalmente qualificado para o seu registro. Este exemplo coloca a imagem no namespace samples para evitar confusão na raiz do registo.

    docker tag tomcattest myregistry.azurecr.io/samples/tomcattest
    
  3. Envie a imagem para o registro do contêiner:

    docker push myregistry.azurecr.io/samples/tomcattest
    

Criar e implantar o aplicativo de contêiner do Service Fabric

Agora que você enviou a imagem do Tomcat para um registro de contêiner, pode criar e implantar um aplicativo de contêiner do Service Fabric que extrai a imagem do Tomcat do seu registro e a executa como um serviço em contêiner em seu cluster.

  1. Crie um novo diretório fora do clone local (fora da árvore de diretórios service-fabric-java-getting-started ). Mude para ele e use Yeoman para criar um andaime para um aplicativo de contêiner:

    yo azuresfcontainer 
    

    Insira os seguintes valores quando solicitado:

    • Nomeie seu aplicativo: ServiceFabricTomcat
    • Nome do serviço de aplicativo: TomcatService
    • Insira o nome da imagem: forneça a URL para a imagem do contêiner no registro do contêiner; por exemplo, myregistry.azurecr.io/samples/tomcattest.
    • Comandos: Deixe isso em branco. Como essa imagem tem um ponto de entrada de carga de trabalho definido, você não precisa especificar explicitamente os comandos de entrada (comandos executados dentro do contêiner, o que manterá o contêiner em execução após a inicialização).
    • Número de instâncias do aplicativo de contêiner convidado: 1

    Gerador Yeoman do Service Fabric para contentores

  2. No manifesto de serviço (ServiceFabricTomcat/ServiceFabricTomcat/TomcatServicePkg/ServiceManifest.xml), adicione o seguinte XML sob a tag raiz ServiceManifest para abrir a porta na qual o seu aplicativo está a escutar solicitações. A tag Endpoint declara o protocolo e a porta para o ponto de extremidade. Para este artigo, o serviço conteinerizado escuta na porta 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. No manifesto do aplicativo (ServiceFabricTomcat/ServiceFabricTomcat/ApplicationManifest.xml), sob a marca ServiceManifestImport , adicione o seguinte XML. Substitua AccountName e Password na tag RepositoryCredentials pelo nome do seu registro de contêiner e a senha necessária para entrar nele.
<Policies>
 <ContainerHostPolicies CodePackageRef="Code">
   <PortBinding ContainerPort="8080" EndpointRef="endpointTest"/>
   <RepositoryCredentials AccountName="myregistry" Password="=P==/==/=8=/=+u4lyOB=+=nWzEeRfF=" PasswordEncrypted="false"/>
 </ContainerHostPolicies>
</Policies>

A tag ContainerHostPolicies especifica políticas para ativar hosts de contêiner.

  • A tag PortBinding configura a política de mapeamento de porta para porta do contêiner. O atributo ContainerPort é definido como 8080 porque o contêiner expõe a porta 8080, conforme especificado no Dockerfile. O atributo EndpointRef é definido como "endpointTest", o ponto de extremidade definido no manifesto de serviço na etapa anterior. Assim, as solicitações de entrada para o serviço na porta 8080 são mapeadas para a porta 8080 no contêiner.
  • A tag RepositoryCredentials especifica as credenciais que o contêiner precisa para se autenticar no repositório (privado) de onde extrai a imagem. Você não precisará dessa política se a imagem for extraída de um repositório público.
  1. Na pasta ServiceFabricTomcat, ligue-se ao cluster do Service Fabric.
  • Para se conectar ao cluster local do Service Fabric, execute:

    sfctl cluster select --endpoint http://localhost:19080
    
  • Para se conectar a um cluster seguro do Azure, verifique se o certificado do cliente está presente como um arquivo .pem no diretório ServiceFabricTomcat e execute:

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

    No comando anterior, substitua your-certificate.pem pelo nome do arquivo de certificado do cliente. Em ambientes de desenvolvimento e teste, o certificado de cluster é frequentemente usado como o certificado do cliente. Se o certificado não for autoassinado, omita o -no-verify parâmetro.

    Normalmente, os certificados de cluster são baixados localmente como arquivos .pfx. Se ainda não tiver o certificado no formato PEM, pode executar o seguinte comando para criar um ficheiro .pem a partir de um ficheiro .pfx:

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

    Se o seu arquivo .pfx não estiver protegido por senha, use -passin pass: para o último parâmetro.

  1. Execute o script de instalação fornecido no modelo para implantar o aplicativo no cluster. O script copia o pacote do aplicativo para o armazenamento de imagens do cluster, registra o tipo de aplicativo e cria uma instância do aplicativo.

    ./install.sh
    

Depois de executar o script de instalação, abra um navegador e navegue até o Service Fabric Explorer:

  • Em um cluster local, use http://localhost:19080/Explorer (substitua localhost pelo IP privado da VM se estiver usando o Vagrant no Mac OS X).
  • Em um cluster seguro do Azure, use https://PublicIPorFQDN:19080/Explorer.

Expanda o nó Aplicativos e observe que agora há uma entrada para seu tipo de aplicativo, ServiceFabricTomcatType, e outra para a primeira instância desse tipo. Pode levar alguns minutos para que o aplicativo seja totalmente implantado, portanto, seja paciente.

Explorador do Service Fabric

  1. Para acessar o aplicativo no servidor Tomcat, abra uma janela do navegador e insira qualquer um dos seguintes URLs. Se implantaste no cluster local, usa localhost para PublicIPorFQDN. Você verá uma variante da tela de boas-vindas "Hello World!" para cada URL.

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

Limpeza

Use o script de desinstalação fornecido no modelo para excluir a instância do aplicativo do cluster e cancelar o registro do tipo de aplicativo.

./uninstall.sh

Depois de enviar a imagem para o registro do contêiner, você pode excluir a imagem local do computador de desenvolvimento:

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

Próximos passos