For LINUX platformsFor Windows platforms

Déploiement de conteneurs Docker à l'aide des API REST de déploiement

Vous pouvez déployer des serveurs Liberty ou Node.js dans des conteneurs Docker en tant que membres d'une collectivité à l'aide des API REST DeployService.

Avant de commencer

Déterminez les hôtes cibles sur lesquels vous souhaitez installez une image Docker. Installez Docker sur les hôtes cible. Chaque hôte cible requiert RXA ou SSH. Voir Configuration de RXA pour les opérations de collectivité Liberty.

Si vous allez utiliser Node.js dans un conteneur Docker, téléchargez une version Node.js 4.x du registre Docker Hub.

Multimédia Regarder : La vidéo Managing an On-Premise, Polyglot Environment with WebSphere Liberty Collectives fournie dans un article du site WASdev complète la procédure décrite dans cette section.

Procédure

  1. Créez une image Docker.
    1. Utilisez un fichier Dockerfile pour créer une image Liberty.

      Vous pouvez changer les exemples Dockerfile suivants pour votre environnement. Chaque exemple s'accompagne d'un script joinMember, qui joint à une collectivité le serveur membre contenu dans le conteneur Docker, et d'un script removeMember, qui retire le serveur membre de la collectivité.

    2. Si vous utilisez un Dockerfile pour une image Liberty Network Deployment, configurez le fichier server.xml à utiliser avec ce Dockerfile. Par exemple :
      <server description="Default Server">
         <featureManager>
            <feature>webProfile-6.0</feature>
         </featureManager>
      
         <httpEndpoint id="defaultHttpEndpoint"
                       httpPort="${memberHttpPort}"
                       httpsPort="${memberHttpsPort}" />
      
      </server>
    3. Assurez-vous que le fichier server.xml du contrôleur de collectivité contient des instructions qui définissent le nom d'utilisateur et le mot de passe du contrôleur et les variables de déploiement.
      • Exemple de fichier server.xml pour une image Liberty Network Deployment :
           <collectiveController user="admin" password="adminpwd" />
        ... 
           <deployVariable name="memberHttpPort" value="9090" increment="1"/> 
           <deployVariable name="memberHttpsPort" value="9453" increment="1"/>
      • [16.0.0.3 and later]Exemple de fichier server.xml pour une image de membre Node.js :
           <collectiveController user="admin" password="adminpwd" />
        ... 
           <deployVariable name="wlpn.appPort" value="9090" increment="1"/> 
           <deployVariable name="wlpn.adminPort" value="9453" increment="1"/>

      Les variables de déploiement doivent définir des valeurs qui permettent à chaque membre d'avoir un numéro de port unique sur les hôtes cible. Consultez DeployVariable (deployVariable).

    4. Exécutez la commande de génération Docker pour créer l'image.
      1. Copiez le Dockerfile, et les scripts joinMember et removeMember sur un ordinateur ayant Docker installé. Si vous utilisez un fichier Docker pour une image Liberty Network Deployment, copiez également le fichier server.xml nommé dans le fichier Docker vers l'ordinateur. Placez les fichiers dans le même répertoire.
      2. Ouvrez une fenêtre de commande au niveau du répertoire contenant les fichiers.
      3. Exécutez la commande Docker pour créer l'image :
        docker build -t image_name .
      4. Vérifiez la création d'image. La commande suivante renvoie le nom de l'image lorsque la création aboutit.
        docker images
    5. Facultatif : Postez l'image Docker sur un registre Docker avec une commande docker push. Voir le registre Docker pour plus d'informations.
  2. Enregistrez l'hôte Docker cible avec le contrôleur de collectivité.
    L'enregistrement d'un hôte permet au contrôleur de collectivité d'extraire l'image Docker depuis le registre vers cet hôte, ainsi que d'accéder aux fichiers, aux commandes et aux autres ressources se trouvant sur l'hôte. Exécutez la commande registerHost sur l'ordinateur du contrôleur pour enregistrer l'hôte cible. Examinez l'exemple suivant :
    wlp/bin/collective registerHost targetHost --host=controllerHost --port=controllerHTTPSPort --user=controllerAdmin --password=controllerAdminPassword --rpcUser=osUser --rpcUserPassword=osUserPassword  --autoAcceptCertificates

    Consultez le fichier server.xml du contrôleur pour trouver les valeurs des paramètres --host, --port, --user et --password. Pour ne pas utiliser un fichier de clé privée, comme pour les hôtes cibles sur les systèmes d'exploitation Linux ou Windows, incluez un nom d'utilisateur et un mot de passe du système d'exploitation en définissant les paramètres --rpcUser et --rpcUserPassword. L'utilisateur spécifié par --rpcUser doit disposer de droits de système d'exploitation sur l'emplacement de déploiement cible.

    Si un hôte est déjà enregistré, vous pouvez utiliser la commande updateHost pour réinitialiser les informations d'enregistrement. Pour plus d'informations, voir Enregistrement des ordinateurs hôte auprès d'une collectivité Liberty.

  3. Si l'image Docker à déployer est stockée dans un registre au lieu d'être disponible localement sur l'hôte Docker sur lequel vous allez déployer, vous pouvez configurer le contrôleur de collectivité pour accéder au registre. Voir Configuration d'un registre Docker pour son utilisation par un contrôleur de collectivité.
  4. Examinez les règles de déploiement disponibles.
    1. Appelez une API REST renvoyant les règles de déploiement disponibles. Utiliser un outil capable d'appeler les API REST pour obtenir les règles de déploiement disponibles.
      GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/rule

      L'appel renvoie les règles de déploiement dans la structure JSON, par exemple :

      [16.0.0.3 and later]
      {"rules":
      [
       {"id":"Liberty Docker Rule","description":"Deploy rule for Liberty Docker containers.","type":"docker","deployCommands":"repository=${dockerRepository};
       registry=${dockerRegistry}; if [ ! $registry ]; then if [ ! $repository];
       then echo 'The dockerRegistry and dockerRepository are not configured in the collective controller, the Docker image to be deployed is assumed available on the target host' ;
       docker run -d -e LICENSE=accept -e CONTAINER_NAME=${containerName} -e CONTAINER_HOST=${wlp.deploy.host} --net=host --name=${containerName} ${imageName} ;
       else echo 'No dockerRegistry configured in the collective controller, Docker image deployments are disabled'; failure='true' ; fi;
       else user=${dockerUser}; password=${dockerUserPassword}; email=${dockerUserEmail};
       if [ ! $repository]; then echo 'No dockerRepository configured in the collective controller, Docker image deployments are disabled'; failure='true' ; fi;
       if [ ! $user]; then echo 'No dockerUser configured in the collective controller, Docker image deployments are disabled'; failure='true' ; fi;
       if [ ! $password]; then echo 'No dockerUserPassword configured in the collective controller, Docker image deployments are disabled'; failure='true'; fi;
       if [ ! $email]; then echo 'No dockerUserEmail configured in the collective controller, Docker image deployments are disabled'; failure='true'; fi;
       if [ ! $failure]; then echo 'Login to the Docker registry at ' $registry ' for repository named ${dockerRepository} as user ' $user ' and pull the image ${imageName} to be started' ;
       docker logout;
       docker login --username=$user --password=$password --email=$email $registry ; docker pull ${dockerRepository}:${imageName} ;
       docker run -d -e LICENSE=accept -e CONTAINER_NAME=${containerName} -e CONTAINER_HOST=${wlp.deploy.host} --net=host --name=${containerName} ${dockerRepository}:${imageName} ; fi; fi;
       if [ ! $failure]; then echo 'Configure the running container ${containerName}' ;
       docker exec -t ${containerName} bash /opt/ibm/docker/joinMember ${containerName} --clusterName=${clusterName}
         --dockerHost=${wlp.deploy.host} --host=${wlp.admin.host} --port=${wlp.admin.port}
         --user=${wlp.admin.user} --password=${wlp.admin.password} --keystorePassword=${keystorePassword};
       else false; fi","undeployCommands":"docker start ${containerName}; 
       docker exec -t ${containerName} bash /opt/ibm/docker/removeMember ${containerName}
         --host=${wlp.admin.host} --port=${wlp.admin.port} --user=${wlp.admin.user} --password=${wlp.admin.password}
         --dockerHost=${wlp.deploy.host} && ( docker stop ${containerName};
       docker rm
        ${containerName} )","startCommands":"docker start
        ${containerName}","stopCommands":"docker stop
        ${containerName}","restartCommands":"","inputVariables":[
         {"name":"keystorePassword","type":"password","description":"Password for keystores of the deployed server","displayName":"Keystore Password"},
         {"name":"clusterName","type":"String","description":"Name of Liberty Docker container cluster.","defaultValue":"${imageName}_cluster","displayName":"Cluster Name"},
         {"name":"containerName","type":"String","description":"Name of Liberty Docker container.","defaultValue":"${imageName}_container","displayName":"Container Name"},
         {"name":"imageName","type":"dockerImage","description":"Name of Liberty Docker image.","displayName":"Image Name"}],
        "name":"Docker Container","default":true,"runtimeTypes":[{"displayName":"Node.js"},{"displayName":"Liberty"}],"packageType":"Docker Container"
       }
      ]}
    2. Si nécessaire, créez vos propres règles de déploiement en ajoutant DeployRules à votre configuration de contrôleur. Consultez Règle de déploiement (deployRule).
  5. Déployez l'image Docker.
    Utiliser un outil capable d'appeler les API REST pour déployer l'image Docker. La règle de déploiement contient des variables qui peuvent spécifier les valeurs d'entrée de l'appel, par exemple l'image Docker à utiliser et le nom du conteneur à créer. Le corps du retour contient un jeton que vous pouvez utiliser pour les demandes d'état et de résultats.
    Remarque : Utilisez la même règle Liberty Docker Rule pour les images Docker de Liberty et les images Docker de Node.js.
    POST https://controller_host:controller_port/ibm/api/collective/v1/deployment/deploy
    
    {
       "rule": "Liberty Docker Rule", 
       "hosts": [ "myHostName" ],
       "variables": [
          { "name":"imageName", "value":"myImageName" },
          { "name":"containerName", "value":"myContainerName" },
          { "name":"clusterName", "value":"myClusterName" },
          { "name":"keystorePassword", "value":"thePassword" }
       ]
    }

    Par exemple, si le jeton de retour est {"id":3}, vous pouvez utiliser cette valeur pour obtenir l'état et les résultats.

Que faire ensuite

Demande et révision de l'état et des résultats du déploiement.

  • Obtenez une liste de jetons pour les opérations de déploiement sollicitées.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/deploy
  • Obtenez un état abrégé des opérations de déploiement. Utilisez le jeton de l'étape 4 pour {token}. Par conséquent, pour un jeton de retour {"id":3} obtenu à l'étape 4, utilisez 3 pour {token}.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/{token}/status 
    Durant le déploiement, l'API renvoie IN_PROGRESS:
    {"status":{"target_host":"IN_PROGRESS"}}
    Après le déploiement, l'API renvoie FINISHED:
    {"status":{"target_host":"FINISHED"}}
  • Obtenez les résultats complets d'une opération de déploiement. Utilisez le jeton de l'étape 4 pour {token}. Par conséquent, pour un jeton de retour {"id":3} obtenu à l'étape 4, utilisez 3 pour {token}.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/{token}/results
    Une fois le déploiement terminé, les résultats contiennent des informations sur l'opération. L'exemple suivant affiche les résultats de FINISHED :
    {"results":[{"host_name":"target_host","status":"FINISHED","result":0}]}
Annulez le déploiement d'un conteneur Docker. Vous n'avez pas besoin de spécifier une règle de déploiement. La règle utilisée pour le déploiement a été enregistrée lors du déploiement. Vous pouvez utiliser la règle pour l'annulation du déploiement. La variable userDir doit être Docker.
  • Annulation du déploiement d'un conteneur.
    POST https://controller_host:controller_port/ibm/api/collective/v1/deployment/undeploy
    {     
       "host": "myHostName",
       "userDir":"Docker",     
       "serverName":"myContainerName"
    }
  • Obtention d'une liste de jetons pour les opérations d'annulation de déploiement.
    GET https://controller_host:controller_port/ibm/api/collective/v1/deployment/undeploy
    Pour obtenir le statut et les résultats, les étapes à suivre sont similaires à celles des déploiements.

Icône indiquant le type de rubrique Rubrique Tâche

Nom du fichier : twlp_deployservice_docker.html