2016-06-29 10 views
0

Ich möchte Ansible verwenden, um eines meiner Projekte bereitzustellen (nennen wir es project-to-deploy).Stellen Sie Ansible-Projekt bereit, das ein docker-compose.yml enthält

project-to-deploy kann lokal mit einer docker-compose.yml Datei ausgeführt werden, die unter anderem folgende Volumes innerhalb der docker-container mounten.

version: "2" 
services: 
    database: 
    image: mysql:5.6 
     volumes: 
     - ./docker/mysql.init.d:/docker-entrypoint-initdb.d 
    messages: 
     image: private.repo/project-to-deploy:latest 

Nichts nützlicher hier. Um das Projekt auszuführen: docker-compose up. Ich habe eine docker image des Projekts erstellt (in dem ich alle Dateien aus dem Projekt in die neu erstellte docker image kopieren), und es auf private.repo/project-to-deploy:latest hochgeladen.

Jetzt kommt der Ansible Teil.
Für das Projekt auszuführen, ich brauche:

  1. Das Docker Bild
  2. Eine MySQL-Instanz

In meinem docker-compose.yml (oben) (Teil meines docker-compose.yml siehe unten), ist es durchaus ist leicht zu machen. Ich erstelle nur die 2 Dienste (Datenbank und project-to-deploy) und verknüpfe sie miteinander.

Wie kann ich eine solche Aktion in Ansible durchführen?

Erste, was ich tat, ist das Bild zu holen:

- name: Docker - pull project image 
    docker: 
    image: "private.repo/project-to-deploy:latest" 
    state: restarted 
    pull: always 

Dann, wie kann ich verbinden die MySQL Docker Bild dazu, wohl wissend, dass die MySQL-Docker Bild braucht Dateien aus project-to-deploy?

Wenn Sie an eine andere Möglichkeit denken, zögern Sie nicht, Vorschläge zu machen!

Antwort

1

leichte Korrektur, das docker Modul ist zum Ausführen von Containern, in Ihrem Beispiel holen Sie nicht nur das Bild. Sie ziehen das Bild tatsächlich, erstellen einen Container und führen es aus.

Normalerweise würde ich dies erreichen, indem ich ansible verwende, um die Konfigurationsdateien jedes Containers mit den benötigten IP-Adressen, Ports, Anmeldeinformationen usw. zu versehen und ihnen alles zu geben, was sie wissen müssen, um miteinander zu kommunizieren.

Da Ihr Beispiel nur wenige Verbindungen enthält, können Sie die Option links in Ihrer möglichen Aufgabe festlegen. Sie sollten es nur auf der Containerseite "Nachrichten" festlegen.

- name: Docker - start MySQL container 
    docker: 
    name: database 
    image: "mysql:5.6" 
    state: restarted 
    volumes: 
    - /path/to/docker/mysql.init.d:/docker-entrypoint-initdb.d 
    pull: always 

- name: Docker - start project container 
    docker: 
    name: messages 
    image: "private.repo/project-to-deploy:latest" 
    state: restarted 
    pull: always 
    links: 
    - database 
Verwandte Themen