2
votes

Provisionnement d'un conteneur Docker à l'aide d'ansible

J'essaie d'utiliser mes playbooks docker existants pour provisionner un conteneur Docker en utilisant ubuntu 18.04 pour le développement local.

J'ai du mal à exécuter des playbooks sur le conteneur car il n'est pas fourni avec python installé, donc d'après ce que je comprends, ansible ne peut pas s'exécuter.

Est-il possible d'installer python sur le conteneur pour que mes playbooks puissent fonctionner?

NB Je sais que ansible-container existe mais j'aimerais utiliser mes playbooks existants qui utilisent devenir_user et qui ne fonctionnent pas comme indiqué sur le instructions de construction


0 commentaires

3 Réponses :


1
votes

Je ne savais pas que vous pouviez simplement faire ça.

- name: Create container
  docker_container:
    name: docker-test
    image: ubuntu:18.04
    command: sleep 1d
- name: Install python on docker
  delegate_to: docker-test
  raw: apt -y update && apt install -y python-minimal


1 commentaires

Je suis presque sûr que ce manuel, tel qu'il est écrit, ne fonctionnera pas. Après avoir exécuté la tâche docker_container , il n'y a pas de docker-test dans votre inventaire, la délégation échouerait donc.



0
votes

Je pense que ce que vous avez probablement le plus de sens est d'installer Python et vos autres outils dans votre Dockerfile lorsque vous créez l'image. Ou vous pouvez choisir une image docker avec python déjà installé comme en utilisant ceci comme ligne FROM dans votre Dockerfile:

FROM python

De cette façon, vous n'aurez pas à exécuter votre tâche Ansible pour installer Python à chaque fois que vous faire apparaître un conteneur, il sera intégré à partir du moment où vous créez votre image.


0 commentaires

2
votes

Vous devrez ajouter votre conteneur Docker à l'inventaire ansible avant de pouvoir le cibler dans vos playbooks. Quelque chose comme ceci fonctionnerait:

---
- hosts: localhost
  gather_facts: false

  tasks:
    - name: create container
      docker_container:
        name: ansible-test
        image: ubuntu:bionic
        command: bash
        detach: true
        interactive: true
        tty: true

    - name: add docker container to inventory
      add_host:
        name: ansible-test
        ansible_connection: docker

- hosts: ansible-test
  gather_facts: false
  tasks:

    - name: update apt cache
      delegate_to: ansible-test
      raw: apt -y update

    - name: install python
      delegate_to: ansible-test
      raw: apt -y install python-minimal

    - name: demonstrate that normal ansible modules work
      file:
        path: /etc/testdir
        state: directory

Notez que même si cela fonctionne, ce n'est pas un très bon modèle: vous ne voulez généralement pas effectuer de tâches de configuration dans vos conteneurs au moment de l'exécution; vous souhaitez configurer vos images au moment de la construction.


0 commentaires