Configurer des options pour exécuter votre conteneur


Avant de commencer

  • Si vous ne connaissez pas bien les conteneurs, consultez la page Conteneurs sur Compute Engine.
  • Si vous ne connaissez pas bien Docker, lisez la documentation Docker.
  • Consultez la page relative au déploiement de conteneurs sur Compute Engine.
  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine comme suit :

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    Console

    Lorsque vous utilisez la console Google Cloud pour accéder aux services et aux API Google Cloud, vous n'avez pas besoin de configurer l'authentification.

    gcloud

    1. Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init
    2. Définissez une région et une zone par défaut.

Lorsque vous créez une instance ou un modèle d'instance à utiliser pour déployer des conteneurs sur des VM et des MIG, spécifiez la configuration du conteneur à l'aide de la console Google Cloud ou de la Google Cloud CLI.

Les sections suivantes décrivent comment configurer les options concernant les instances de VM, mais vous pouvez également les configurer lors de la création d'un modèle d'instance. Utilisez Google Cloud Console ou Google Cloud CLI pour configurer les options des instances de VM dans un modèle d'instance.

Console

  1. Accédez à la page Créer un modèle d'instance.

    Accédez à la page Créer un modèle d'instance.

  2. Dans la section Conteneur, cochez la case Déployer une image de conteneur dans cette instance de VM, puis développez Options avancées des conteneurs.

gcloud

  1. Dans Google Cloud CLI, utilisez la commande gcloud compute instance-templates create-with-container comme indiqué dans les exemples suivants.

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 Créer une instance.

    Accéder à la page Créer une instance

  2. Dans la section Conteneur, cliquez sur Déployer le conteneur.

  3. Sur la page Configurer le conteneur, procédez comme suit :

    1. Spécifiez un nom d'image de conteneur.
    2. Dans la section Règle de redémarrage, sélectionnez la règle de redémarrage du conteneur.
    3. Pour confirmer les détails du conteneur, cliquez sur Sélectionner.
  4. Poursuivez le processus de création de la VM.

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 Créer une instance.

    Accéder à la page Créer une instance

  2. Dans la section Conteneur, cliquez sur Déployer le conteneur.

  3. Sur la page Configurer le conteneur, procédez comme suit :

    1. Spécifiez un nom d'image de conteneur.
    2. Sélectionnez Exécuter avec accès privilégié.
    3. Pour confirmer les détails du conteneur, cliquez sur Sélectionner.
  4. Poursuivez le processus de création de la VM.

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 STDIN 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 Créer une instance.

    Accéder à la page Créer une instance

  2. Dans la section Conteneur, cliquez sur Déployer le conteneur.

  3. Sur la page Configurer le conteneur, procédez comme suit :

    1. Spécifiez un nom d'image de conteneur.
    2. Sélectionnez Attribuer un tampon pour STDIN.
    3. Pour confirmer les détails du conteneur, cliquez sur Sélectionner.
  4. Poursuivez le processus de création de la VM.

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 Créer une instance.

    Accéder à la page Créer une instance

  2. Dans la section Conteneur, cliquez sur Déployer le conteneur.

  3. Sur la page Configurer le conteneur, procédez comme suit :

    1. Spécifiez un nom d'image de conteneur.
    2. Sélectionnez Attribuer un pseudo-TTY.
    3. Pour confirmer les détails du conteneur, cliquez sur Sélectionner.
  4. Poursuivez le processus de création de la VM.

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 Créer une instance.

    Accéder à la page Créer une instance

  2. Dans la section Conteneur, cliquez sur Déployer le conteneur.

  3. Sur la page Configurer le conteneur, procédez comme suit :

    1. Spécifiez un nom d'image de conteneur.
    2. Dans le champ Commande, saisissez une seule commande exécutable sans paramètres, par exemple : uptime.
    3. Pour confirmer les détails du conteneur, cliquez sur Sélectionner.
  4. Poursuivez le processus de création de la VM.

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 Créer une instance.

    Accéder à la page Créer une instance

  2. Dans la section Conteneur, cliquez sur Déployer le conteneur.

  3. Sur la page Configurer le conteneur, procédez comme suit :

    1. Spécifiez un nom d'image de conteneur.
    2. Dans la section Arguments, cliquez sur Ajouter un argument.
    3. Saisissez un argument de commande pour chaque case.
    4. Pour confirmer les détails du conteneur, cliquez sur Sélectionner.
  4. Poursuivez le processus de création de la VM.

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.

Configurer les options du pilote de journaux

Si vous devez configurer les options du pilote de journaux, vous pouvez créer un script de démarrage de VM pour mettre à jour le fichier de configuration Docker avec les options de journalisation dont vous avez besoin. Ces options s'appliquent à tous les conteneurs qui s'exécutent sur la VM et qui ne spécifient pas d'options de pilote de journaux.

Par exemple, le script de démarrage suivant définit plusieurs options (y compris une option permettant de limiter la taille du journal du conteneur), puis redémarre Docker sur la VM :

cat <<EOF > /etc/docker/daemon.json
{
  "live-restore": true,
  "storage-driver": "overlay2",
  "log-opts": {
    "max-size": "10m"
  }
}
EOF
systemctl restart docker

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 Créer une instance.

    Accéder à la page Créer une instance

  2. Dans la section Conteneur, cliquez sur Déployer le conteneur.

  3. Sur la page Configurer le conteneur, procédez comme suit :

    1. Spécifiez un nom d'image de conteneur.
    2. Dans la section Variables d'environnement, cliquez sur Ajouter une variable.
    3. Si nécessaire, ajoutez ou supprimez des variables d'environnement. Comptez une variable pour chaque ligne.
    4. Pour confirmer les détails du conteneur, cliquez sur Sélectionner.
  4. Poursuivez le processus de création de la VM.

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 Créer une instance.

    Accéder à la page Créer une instance

  2. Dans la section Conteneur, cliquez sur Déployer le conteneur.

  3. Sur la page Configurer le conteneur, procédez comme suit :

    1. Spécifiez un nom d'image de conteneur.
    2. Dans la section Montages de volume, cliquez sur Ajouter un volume.
    3. Dans la liste Type de volume, sélectionnez Répertoire, puis procédez comme suit :

      • Dans le champ Installer le chemin, spécifiez un chemin d'accès au montage dans une structure de répertoires du conteneur indiquant où vous souhaitez installer un répertoire hôte.
      • Dans le champ Chemin d'accès de l'hôte, spécifiez un chemin d'accès à l'hôte à installer.
      • Dans la liste Mode, indiquez si vous souhaitez installer le répertoire en mode lecture-écriture ou en lecture seule.
    4. Pour confirmer les détails du conteneur, cliquez sur Sélectionner.

  4. Poursuivez le processus de création de la VM.

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 Créer une instance.

    Accéder à la page Créer une instance

  2. Dans la section Conteneur, cliquez sur Déployer le conteneur.

  3. Sur la page Configurer le conteneur, procédez comme suit :

    1. Spécifiez un nom d'image de conteneur.
    2. Dans la section Montages de volume, cliquez sur Ajouter un volume.
    3. Dans la liste Type de volume, sélectionnez TmpFS.
    4. Dans le champ Chemin d'accès au montage, spécifiez un chemin d'accès au montage dans une structure de répertoires du conteneur indiquant où vous souhaitez installer un volume TmpFS.
    5. Dans la liste Mode, indiquez si vous souhaitez installer le volume TmpFS en mode lecture/écriture ou en lecture seule.
    6. Pour confirmer les détails du conteneur, cliquez sur Sélectionner.
  4. Poursuivez le processus de création de la VM.

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 Créer une instance.

    Accéder à la page Créer une instance

  2. Dans la section Conteneur, cliquez sur Déployer le conteneur.

  3. Sur la page Configurer le conteneur, procédez comme suit :

    1. Spécifiez un nom d'image de conteneur.
    2. Dans la section Montages de volume, cliquez sur Ajouter un volume.
    3. Dans la liste Type de volume, sélectionnez Disque.
    4. Dans le champ Chemin d'accès au montage, spécifiez un chemin d'accès dans la structure de répertoires du conteneur dans lequel vous souhaitez installer le disque persistant.
    5. Dans la liste Nom du disque, sélectionnez un disque existant à installer.
    6. Dans le champ Partition, spécifiez le numéro de partition à installer si le disque possède une table de partition. Si le disque ne comporte aucune partition, laissez ce champ vide.
    7. Dans la liste Mode, indiquez si vous souhaitez installer le répertoire en mode lecture-écriture ou en lecture seule.
    8. Pour confirmer les détails du conteneur, cliquez sur Sélectionner.
  4. Poursuivez le processus de création de la VM.

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.15 \
     --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.

Étape suivante