Configurer des options pour exécuter votre conteneur

Lorsque vous créez une instance ou un modèle d'instance à utiliser pour exécuter des conteneurs sur Compute Engine, spécifiez la configuration du conteneur à l'aide de Google Cloud Console ou l'outil de ligne de commande gcloud.

Avant de commencer

Spécifier une règle de redémarrage

Vous pouvez définir une règle de redémarrage pour indiquer si vous souhaitez redémarrer des conteneurs en cas de fermeture. La règle par défaut consiste à redémarrer systématiquement les conteneurs. Vous pouvez également définir une règle permettant de redémarrer des conteneurs en cas d'échec, ou de ne jamais les redémarrer.

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page Instances de VM

  2. Cliquez sur le bouton Créer une instance pour créer une instance.
  3. Dans la section Conteneur, spécifiez le règlement en matière de redémarrage souhaité.

gcloud

Utilisez l'indicateur --container-restart-policy pour spécifier les règles de redémarrage du conteneur :

  • always (par défaut)
  • on-failure
  • never

L'exemple suivant permet de lancer un conteneur avec une règle de redémarrage on-failure, ce qui signifie que le redémarrage ne se produit que lorsque le conteneur renvoie un code de sortie différent de zéro :

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-restart-policy on-failure

Exécutez la commande gcloud compute instances update-container avec l'indicateur --container-restart-policy pour définir une règle de redémarrage sur un conteneur s'exécutant sur une VM.

Exécuter un conteneur avec un accès privilégié

Vous pouvez exécuter un conteneur avec un accès privilégié pour autoriser l'accès à tous les périphériques de l'hôte. Par défaut, les conteneurs sont exécutés sans bénéficier d'un accès privilégié et ne sont autorisés à accéder à aucun appareil.

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page Instances de VM

  2. Cliquez sur le bouton Créer une instance pour créer une instance.
  3. Dans la section Conteneur, cochez l'option Déployer l'image du conteneur.
  4. Cliquez sur Options avancées des conteneurs.
  5. Cochez l'option Exécuter avec accès privilégié.

gcloud

Ajoutez le paramètre --container-privileged pour exécuter un conteneur avec un droit d'exécution. L'exemple suivant permet de lancer un conteneur busybox avec un accès privilégié :

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-privileged

Exécutez la commande gcloud compute instances update-container avec l'indicateur --container-privileged pour mettre à jour un conteneur sur une VM. Incluez l'indicateur --no-container-privileged pour désactiver le mode privilégié.

Attribuer un tampon pour STDIN dans l'environnement d'exécution du conteneur

Vous pouvez attribuer un tampon pour STDIN dans l'environnement d'exécution du conteneur afin de garder le flux ouvert dans un conteneur. Si cette option n'est pas définie, les lectures de STDIN dans le conteneur renvoient toujours EOF.

En plus d'attribuer un pseudo-TTY, il est nécessaire de garder le flux STDIN ouvert afin d'établir une interface système interactive dans le conteneur et de permettre à celui-ci de recevoir ses entrées standards à partir d'un pipeline.

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page Instances de VM

  2. Cliquez sur le bouton Créer une instance pour créer une instance.
  3. Dans la section Conteneur, cochez l'option Déployer l'image du conteneur.
  4. Cliquez sur Options avancées des conteneurs.
  5. Cochez l'option Attribuer un tampon pour STDIN.

gcloud

Ajoutez l'indicateur --container-stdin afin d'attribuer un tampon pour STDIN dans l'environnement d'exécution du conteneur. L'exemple suivant permet de démarrer un conteneur et de maintenir le flux STDIN ouvert :

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-stdin

Exécutez la commande gcloud compute instances update-container avec l'indicateur --container-stdin pour mettre à jour un conteneur sur une VM. Utilisez l'indicateur --no-container-stdin pour désactiver l'attribution d'un tampon pour STDIN.

Attribuer un pseudo-TTY

L'attribution d'un pseudo-TTY à un conteneur est nécessaire pour établir une interface système interactive dans le conteneur (et pour attribuer un tampon pour STDIN).

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page Instances de VM

  2. Cliquez sur le bouton Créer une instance pour créer une instance.
  3. Dans la section Conteneur, cochez l'option Déployer l'image du conteneur.
  4. Cliquez sur Options avancées des conteneurs.
  5. Cochez l'option Attribuer un pseudo-TTY.

gcloud

Ajoutez l'indicateur --container-tty pour attribuer un pseudo-TTY. L'exemple suivant permet de démarrer un conteneur et d'attribuer un pseudo-TTY :

 gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-stdin \
    --container-tty

Exécutez la commande gcloud compute instances update-container avec l'indicateur --container-tty pour mettre à jour un conteneur sur une VM. Incluez l'indicateur --no-container-tty pour ne pas attribuer de pseudo-TTY à un conteneur.

Ignorer la commande par défaut s'exécutant au démarrage du conteneur

La commande ENTRYPOINT d'une image de conteneur spécifie les fichiers exécutables à lancer au démarrage d'un conteneur et vous permet d'exécuter ce conteneur comme s'il s'agissait d'un fichier binaire.

Vous pouvez ignorer la commande ENTRYPOINT de l'image du conteneur.

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page Instances de VM

  2. Cliquez sur le bouton Créer une instance pour créer une instance.
  3. Dans la section Conteneur, cochez l'option Déployer l'image du conteneur.
  4. Cliquez sur Options avancées des conteneurs.
  5. Dans le champ Commande, saisissez une seule commande exécutable sans paramètres, par exemple : uptime.

gcloud

Incluez l'indicateur --container-command pour ignorer la commande ENTRYPOINT de l'image du conteneur. L'exemple suivant permet d'exécuter la commande uptime dans un conteneur busybox de manière à afficher le temps écoulé depuis le dernier démarrage.

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-command "uptime"

Exécutez la commande gcloud compute instances update-container avec l'indicateur --container-command afin de mettre à jour une commande pour un conteneur sur une VM.

Ajoutez l'indicateur --clear-container-command avec la commande update-container pour effacer la commande par défaut du conteneur mis à jour.

Transmettre des arguments à la commande ENTRYPOINT du conteneur

Vous pouvez transmettre (c'est-à-dire ajouter) des arguments à la commande ENTRYPOINT d'un conteneur ou ignorer la commande CMD par défaut de celui-ci.

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page Instances de VM

  2. Cliquez sur le bouton Créer une instance pour créer une instance.
  3. Dans la section Conteneur, cochez l'option Déployer l'image du conteneur.
  4. Cliquez sur Options avancées des conteneurs.
  5. Sous Arguments de la commande, cliquez sur Ajouter un argument.
  6. Saisissez un argument de commande par champ.

gcloud

Ajoutez l'indicateur --container-arg pour transmettre des arguments à la commande ENTRYPOINT d'une image de conteneur. Utilisez un paramètre distinct pour chaque argument.

L'exemple suivant permet d'exécuter la commande /bin/ash avec les arguments -c 'ls -l' dans un conteneur configuré pour exécuter automatiquement l'image busybox :

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-command "/bin/ash" \
   --container-arg="-c" \
   --container-arg="ls -l"

Exécutez la commande gcloud compute instances update-container avec les indicateurs --container-arg afin de mettre à jour les arguments d'une commande pour un conteneur s'exécutant sur une VM. La mise à jour remplace la liste complète des arguments par la nouvelle liste.

Servez-vous de l'indicateur --clear-container-args avec la commande update-container pour supprimer tous les arguments de la déclaration de conteneur.

Définir des variables d'environnement

Vous pouvez définir des variables d'environnement dans un conteneur. Seule la dernière valeur de la section [KEY] est prise en compte lorsque la section [KEY] est répétée plusieurs fois.

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page Instances de VM

  2. Cliquez sur le bouton Créer une instance pour créer une instance.
  3. Dans la section Conteneur, cochez l'option Déployer l'image du conteneur.
  4. Cliquez sur Options avancées des conteneurs.
  5. Sous Variables d'environnement, cliquez sur Ajouter une variable.
  6. Si nécessaire, ajoutez ou supprimez des variables d'environnement. Comptez une variable par ligne.

gcloud

Ajoutez l'indicateur --container-env pour définir les variables d'environnement d'un conteneur. L'exemple suivant permet de définir trois variables d'environnement, HOME, MODE et OWNER :

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-env HOME=/home,MODE=test,OWNER=admin

Servez-vous de l'indicateur --container-env-file pour définir les variables d'environnement à partir d'un fichier local. L'exemple suivant permet de définir les deux variables d'environnement du fichier env.txt :

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-env-file ./env.txt

Le contenu du fichier env.txt est le suivant :

# this is a comment
HOME=/home
MODE=test
OWNER=admin

Exécutez la commande gcloud compute instances update-container avec l'indicateur --container-env ou --container-env-file pour mettre à jour les variables d'environnement d'un conteneur sur une VM. En procédant ainsi, vous mettrez à jour toutes les variables présentes dans la déclaration de conteneurs de l'instance de VM. Les variables ne figurant pas dans la déclaration de conteneurs sont ajoutées.

Ajoutez l'indicateur --remove-container-env pour supprimer les variables d'environnement lors de la mise à jour d'un conteneur sur une VM. L'exemple suivant permet de supprimer les variables d'environnement appelées MODE et OWNER :

gcloud compute instances update-container busybox-vm \
    --remove-container-env MODE,OWNER

Si une variable d'environnement spécifiée n'existe pas, elle est ignorée sans notification.

Installer un répertoire hôte en tant que volume de données

Vous pouvez installer un répertoire depuis une VM hôte dans un conteneur.

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page Instances de VM

  2. Cliquez sur le bouton Créer une instance pour créer une instance.
  3. Dans la section Conteneur, cochez l'option Déployer l'image du conteneur.
  4. Cliquez sur Options avancées des conteneurs.
  5. Sous Montages de répertoires hôtes, cliquez sur Ajouter un volume.
  6. Spécifiez les éléments suivants :

    • Un chemin d'accès au montage. Un chemin d'accès dans une structure de répertoires du conteneur indiquant où vous souhaitez installer un répertoire hôte.
    • Un chemin d'accès à l'hôte. Un chemin d'accès au répertoire hôte que vous souhaitez installer.
    • Le mode d'installation du répertoire, c'est-à-dire en mode lecture-écriture ou en lecture seule.

gcloud

Ajoutez l'indicateur --container-mount-host-path pour installer un répertoire de VM hôte dans un conteneur. L'exemple suivant permet d'installer le répertoire hôte /tmp dans le conteneur à l'emplacement /logs en mode lecture-écriture :

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-mount-host-path mount-path=/logs,host-path=/tmp,mode=rw

Spécifiez mode=ro pour installer un répertoire hôte en mode lecture seule.

Exécutez la commande gcloud compute instances update-container avec l'indicateur --container-mount-host-path pour mettre à jour les installations du répertoire hôte sur un conteneur. Servez-vous de l'indicateur --remove-container-mounts pour supprimer les montages de volumes avec les chemins d'accès de montage spécifiés. L'exemple suivant permet de supprimer un montage d'un chemin d'accès à l'hôte avec mount-path=/logs :

gcloud compute instances update-container busybox-vm \
    --remove-container-mounts /logs

Si le chemin d'accès au montage spécifié n'existe pas, il est ignoré sans notification.

Installer un système de fichiers tmpfs en tant que volume de données

Vous pouvez installer un système de fichiers tmpfs vide dans un conteneur.

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page Instances de VM

  2. Cliquez sur le bouton Créer une instance pour créer une instance.
  3. Dans la section Conteneur, cochez l'option Déployer l'image du conteneur.
  4. Cliquez sur Options avancées des conteneurs.
  5. Sous Montages Tmpfs, cliquez sur Ajouter un volume.
  6. Spécifiez un chemin d'accès au montage, c'est-à-dire un chemin d'accès dans une structure de répertoires du conteneur indiquant où vous souhaitez installer un volume tmpfs. Le volume tmpfs est installé en mode lecture/écriture.

gcloud

Ajoutez l'indicateur --container-mount-tmpfs pour installer un système de fichiers tmpfs vide dans un conteneur. L'exemple suivant permet d'installer un système de fichiers tmpfs dans le conteneur à l'emplacement /cache en mode lecture/écriture :

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-mount-tmpfs mount-path=/cache

Exécutez la commande gcloud compute instances update-container avec l'indicateur --container-mount-tmpfs pour mettre à jour les montages tmpfs d'un conteneur. Spécifiez l'indicateur --remove-container-mounts pour supprimer un montage tmpfs avec le chemin d'accès au montage spécifié lors de la mise à jour. L'exemple suivant supprime le montage tmpfs avec mount-path=/cache :

gcloud compute instances update-container busybox-vm \
    --remove-container-mounts /cache

Si le chemin d'accès au montage spécifié n'existe pas, il est ignoré sans notification.

Installer un disque persistant en tant que volume de données

Avec Container-Optimized OS 69 ou version ultérieure, vous pouvez installer des disques persistants à partir d'une VM hôte dans un conteneur.

Prérequis

  • Le disque doit disposer d'un système de fichiers ext4 ou n'en comprendre aucun. En l'absence de système de fichiers initial, l'agent de démarrage du conteneur formate le disque en ext4, et seules l'installation et l'association en lecture/écriture sont acceptées.
  • Le disque doit être associé à la VM.
  • Les partitions et les appareils sans partition sont acceptés. Pour les installations de partition, le disque ne peut pas être vierge, mais doit contenir une table de partition existante.

Console

  1. Accédez à la page "Instances de VM".

    Accéder à la page Instances de VM

  2. Cliquez sur le bouton Créer une instance pour créer une instance.
  3. Dans la section Conteneur, cochez l'option Déployer l'image du conteneur.
  4. Cliquez sur Options avancées des conteneurs.
  5. Sous Montages de volume, cliquez sur Ajouter un volume.
  6. Sous Type de volume, sélectionnez Disk.
  7. Spécifiez un chemin d'accès au montage, c'est-à-dire un chemin d'accès dans une structure de répertoires du conteneur indiquant où vous souhaitez installer le disque persistant.
  8. Sous Nom du disque, sélectionnez un disque existant à installer ou associez un nouveau disque.
  9. Si le disque possède une table de partition, spécifiez le numéro de la partition à installer. Laissez ce champ vide si le disque ne dispose pas de partitions.
  10. Spécifiez le mode d'installation du répertoire : lecture/écriture ou lecture seule.

gcloud

Exécutez la commande gcloud compute instances create-with-container ou la commande gcloud compute instances update-container avec l'indicateur --container-mount-disk afin d'installer un disque persistant dans un conteneur.

L'exemple suivant permet d'installer deux disques, my-data-disk et my-scratch-disk, aux chemins d'accès /disks/data-disk et /disks/scratch-disk du conteneur.

gcloud compute instances create-with-container busybox-vm \
    --disk name=my-data-disk \
    --create-disk name=my-scratch-disk,auto-delete=yes,image=ubuntu-1710-artful-v20180315,image-project=ubuntu-os-cloud \
    --container-image docker.io/busybox:1.27 \
    --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=ro \
    --container-mount-disk mount-path="/disks/scratch-disk",name=my-scratch-disk

Notez que l'indicateur --disk associe my-data-disk, que l'indicateur --create-disk crée et associe my-scatch-disk, et que l'indicateur --container-mount-disk installe les disques associés au conteneur. Comme aucun mode n'est spécifié pour my-scratch-disk, ce disque est installé sur le conteneur en mode lecture/écriture par défaut.

Exécutez la commande gcloud compute instances update-container avec l'indicateur --container-mount-disk pour installer d'autres disques associés ou modifier des montages de disque existants.

Spécifiez l'indicateur --remove-container-mounts pour supprimer un montage de volume de disque avec le chemin d'accès au montage spécifié. L'exemple suivant remplace le mode d'installation de my-data-disk par le mode lecture/écriture et supprime le montage de disque avec mount-path="/disks/scratch-disk".

gcloud compute instances update-container busybox-vm \
    --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=rw \
    --remove-container-mounts "/disks/scratch-disk"

Si le chemin d'accès au montage transmis à l'indicateur --remove-container-mounts n'existe pas, il est ignoré sans notification.

Publier des ports de conteneurs

Les VM comportant des conteneurs utilisent le mode réseau hôte, dans lequel des conteneurs partagent la pile réseau de l'hôte, et toutes les interfaces de l'hôte sont accessibles aux conteneurs.

Les ports de conteneur sont mappés individuellement sur les ports de la VM hôte. Par exemple, un port de conteneur 80 est mappé sur le port 80 de la VM hôte. Compute Engine ne prend pas en charge l'indicateur de publication de port (-p). Il n'est pas nécessaire de le spécifier pour que le mappage fonctionne.

Pour rendre les ports de conteneurs publics, configurez les règles de pare-feu afin d'autoriser l'accès aux ports de l'instance de la VM hôte. Les ports correspondants du conteneur sont accessibles automatiquement, conformément aux règles de pare-feu.

Exemple : Publication du port 80 d'un conteneur NGINX

L'exemple suivant montre comment créer une instance de VM avec un conteneur NGINX et autoriser le trafic vers le port 80 du conteneur.

  1. Créez une instance de VM avec un conteneur NGINX :

    gcloud compute instances create-with-container nginx-vm \
        --container-image gcr.io/cloud-marketplace/google/nginx1:1.12 \
        --tags http-server
    

    Le conteneur partage la pile réseau de la VM hôte, et le port 80 du conteneur est publié sur le port 80 de la VM hôte. Le tag http-server est utilisée comme tag cible pour la règle de pare-feu créée lors de l'étape suivante.

  2. Créez une règle de pare-feu pour autoriser les connexions au port 80 de l'instance de VM. La règle de pare-feu suivante autorise les connexions HTTP aux instances de VM avec le tag http-server :

    gcloud compute firewall-rules create allow-http \
        --allow tcp:80 --target-tags http-server
    

    Le conteneur commence automatiquement à recevoir du trafic sur le port 80. Vous n'avez pas besoin d'effectuer de configuration supplémentaire.

    Vous pouvez créer des règles de pare-feu pour les combinaisons protocole/port de la VM hôte dont le protocole correspond à tcp ou udp. Ces règles régissent efficacement l'accès des éléments extérieurs à la VM aux ports de conteneur correspondants.

Commentaires et questions

N'hésitez pas à nous faire part de vos commentaires et questions. Si vous souhaitez poser des questions, signaler des problèmes et demander de nouvelles fonctionnalités, veuillez contacter l'équipe chargée des conteneurs sur Compute Engine.

Étapes suivantes