Ler em inglês

Compartilhar via


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

Apache Tomcat é uma implementação popular, livre das tecnologias Java Servlet e o servidor Java. Este artigo mostra como criar um contêiner com o Apache Tomcat e um aplicativo Web simples, implantar o contêiner para um cluster do Service Fabric executando o Linux e se conectar ao aplicativo Web.

Para saber mais sobre o Apache Tomcat, consulte a home page do Apache Tomcat.

Pré-requisitos

Crie uma imagem do Tomcat e execute-o localmente

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

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

    Bash
    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):

    Bash
    cd service-fabric-java-getting-started/container-apache-tomcat-web-server-sample
    
  3. Criar um arquivo do Docker com base na imagem Tomcat oficial localizada no Hub do Docker e o exemplo de servidor Tomcat. No diretório service-fabric-java-getting-started/container-apache-tomcat-web-server-sample, crie um arquivo chamado Dockerfile (com nenhuma extensão de arquivo). Adicione o seguinte ao Dockerfile e salve as alterações:

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

    Leia a referência do Dockerfile para saber mais informações.

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

    Bash
    docker login
    docker build . -t tomcattest
    

    Esse comando cria a nova imagem usando as instruções no seu Dockerfile, nomeando (marcação -t) a imagem tomcattest. Para criar uma imagem de contêiner, primeiro a imagem base é baixada do Hub do Docker ao qual o aplicativo foi adicionado.

    Depois de concluir o comando de compilação, execute o comando docker images para ver informações sobre a nova imagem:

    Bash
    $ docker images
    
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    tomcattest                    latest              86838648aab6        2 minutes ago       194 MB
    
  5. Verifique se seu aplicativo em contêineres está sendo executado localmente antes de enviar a ele o registro de contêiner:

    Bash
    docker run -itd --name tomcat-site -p 8080:8080 tomcattest.
    
    • --name nomeia o contêiner, portanto, você pode fazer referência 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 do host.

    Observação

    A porta que você abrir com o -p parâmetro deve ser a porta que seu aplicativo Tomcat escuta as solicitações. Na amostra atual, há um conector configurado no arquivo ApacheTomcat/conf/server.xml para escutar na porta 8080 para solicitações HTTP. 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 uma das URLs a seguir. Você verá uma variante da tela de boas-vindas "Olá, Mundo" 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 seu computador de desenvolvimento:

    Bash
    docker stop tomcat-site
    docker rm tomcat-site
    

Enviar a imagem Tomcar para o eu registro de contêiner

Agora que você verificou que a imagem do Tomcat é executada em um contêiner no computador de desenvolvimento, você deve enviá-la para um repositório em um registro de contêiner para reduzir a interrupção dos seus fluxos de trabalho de desenvolvimento e implantaçã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 que você escolher. Neste artigo o nome do registro será considerado myregistry e o nome do registro completo é myregistry.azurecr.io. Altere-os adequadamente para seu cenário.

  1. Execute docker login para entrar em seu registro de contêiner com as credenciais de registro.

    O exemplo a seguir passa a ID e a senha de uma entidade de serviço do Microsoft Entra. Por exemplo, você pode atribuir uma entidade de serviço ao registro para um cenário de automação. Ou, você pode entrar usando o nome de usuário e a senha do registro.

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

    Bash
    docker tag tomcattest myregistry.azurecr.io/samples/tomcattest
    
  3. Enviar a imagem para o eu registro de contêiner:

    Bash
    docker push myregistry.azurecr.io/samples/tomcattest
    

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

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

  1. Crie um novo diretório fora do seu clone local (fora da árvore de diretório service-fabric-java-getting-started). Alterne para ele e usar o Yeoman para criar uma estrutura para um aplicativo de contêiner:

    Bash
    yo azuresfcontainer 
    

    Insira os valores a seguir quando solicitado:

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

    Gerador de Yeoman do Service Fabric para contêineres

  2. No manifesto do serviço (ServiceFabricTomcat/ServiceFabricTomcat/TomcatServicePkg/ServiceManifest.xml), adicione o seguinte XML sob a marca de raiz ServiceManfest para abrir a porta que o seu aplicativo está executando para solicitações. A marca do ponto de extremidade declara o protocolo e porta para o ponto de extremidade. Para este artigo, o serviço em contêineres escuta na porta 8080:

XML
<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 o ServiceManifestImport de marca, adicione o seguinte XML. Substitua os AccountName e Password na marca RepositoryCredentials com o nome do seu registro de contêiner e a senha necessária para se conectar.
XML
<Policies>
 <ContainerHostPolicies CodePackageRef="Code">
   <PortBinding ContainerPort="8080" EndpointRef="endpointTest"/>
   <RepositoryCredentials AccountName="myregistry" Password="=P==/==/=8=/=+u4lyOB=+=nWzEeRfF=" PasswordEncrypted="false"/>
 </ContainerHostPolicies>
</Policies>

A marca ContainerHostPolicies especifica políticas para a ativação de hosts de contêiner.

  • A marca PortBinding configura a política de mapeamento de porta de host de 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 do 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 marca RepositoryCredentials especifica as credenciais que o contêiner precisar autenticar com o repositório (privado) em que ele recebe a imagem do. Essa política não é necessária se a imagem será retirada de um repositório público.
  1. Na pasta ServiceFabricTomcat, conecte-se ao cluster do service fabric.
  • Para conectar ao cluster local do Service Fabric, execute:

    Bash
    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:

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

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

    Certificados de cluster normalmente são baixados localmente como arquivos. pfx. Se você ainda não tiver o certificado no formato PEM, você pode executar o comando a seguir para criar um arquivo. PEM de um arquivo. pfx:

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

    Se o seu arquivo .pfx não for 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 em seu cluster. O script copia o novo pacote de aplicativos para o armazenamento de imagem do cluster, registra o tipo de aplicativo e cria uma instância do aplicativo.

    Bash
    ./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 (substituir localhost com o endereço IP privado da VM se estiver usando 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 o seu tipo de aplicativo, e ServiceFabricTomcatType, e outra para a primeira instância desse tipo. Pode levar alguns minutos para o aplicativo para implantar por completo, portanto, seja paciente.

Service Fabric Explorer

  1. Para acessar o aplicativo no servidor Tomcat, abra uma janela do navegador e insira qualquer uma das URLs a seguir. Se você implantou o cluster local, use localhost para PublicIPorFQDN. Você verá uma variante da tela de boas-vindas "Olá, Mundo" 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 com o modelo para excluir a instância do aplicativo no cluster e cancelar o registro do tipo de aplicativo.

Bash
./uninstall.sh

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

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

Próximas etapas