Verwenden von Ansible zum Installieren und Einrichten von Docker unter Ubuntu 18.04

Einführung

Mit der Verbreitung von containerisierten Anwendungen und Mikrodiensten spielt die Serverautomatisierung nun eine wesentliche Rolle in der Systemadministration. Es ist auch eine Möglichkeit, Standardverfahren für neue Server festzulegen und menschliches Versagen zu reduzieren.

In diesem Handbuch wird erläutert, wie Sie mitAnsible die in unserem Handbuch fürHow To Install and Use Docker on Ubuntu 18.04 enthaltenen Schritte automatisieren. Docker ist eine Anwendung, die die Verwaltung voncontainers vereinfacht, ressourcenisolierten Prozessen, die sich ähnlich wie virtuelle Maschinen verhalten, jedoch portabler, ressourcenschonender und stärker von der abhängig sind Host-Betriebssystem.

Während Sie dieses Setup manuell abschließen können, sparen Sie durch die Verwendung eines Konfigurationsverwaltungstools wie Ansible zur Automatisierung des Prozesses Zeit und legen Standardverfahren fest, die über zehn bis Hunderte von Knoten wiederholt werden können. Ansible bietet eine einfache Architektur, für die keine spezielle Software auf den Knoten installiert werden muss, und bietet eine Reihe robuster Funktionen und integrierter Module, die das Schreiben von Automatisierungsskripten erleichtern.

Check vor dem Flug

Um das automatisierte Setup auszuführen, das in dem in diesem Handbuch beschriebenen Playbook bereitgestellt wird, benötigen Sie:

  • Ansible wird entweder auf Ihrem lokalen Computer oder auf einem Remote-Server installiert, den Sie alsAnsible Control Node eingerichtet haben. Sie können Schritt 1 des TutorialsHow to Install and Configure Ansible on Ubuntu 18.04 ausführen, um diese Einrichtung zu erhalten.

    • Wenn Sie vorhaben, einen Remote-Server als Ansible-Steuerknoten zu verwenden, sollte dieser einen Nicht-Root-Benutzer mit Sudo-Berechtigungen und einer grundlegenden Firewall haben, die vor der Installation von Ansible konfiguriert wurde. Folgen Sie unserenInitial Server Setup Guide for Ubuntu 18.04, um dies einzurichten.

  • Zugriff auf einen oder mehrere Ubuntu 18.04-Server, die alsAnsible hostsverwendet werden. Jeder sollte einen Nicht-Root-Benutzer mit Sudo-Berechtigungen und einer konfigurierten Basis-Firewall haben. Befolgen Sie unsere Anleitung zuAutomating Initial Server Setup with Ansible on Ubuntu 18.04, um dies automatisch einzurichten. Alternativ können Sie dies manuell einrichten, indem Sie unserenInitial Server Setup Guide for Ubuntu 18.04 auf jedem Ihrer Ansible-Hosts folgen.

Testen der Konnektivität zu Knoten

Um sicherzustellen, dass Ansible Befehle auf Ihren Knoten ausführen kann, führen Sie den folgenden Befehl auf Ihrem Ansible-Steuerknoten aus:

ansible -m ping all

Dieser Befehl verwendet das in Ansible integrierte Modulping, um einen Konnektivitätstest für alle Knoten aus Ihrer Standardinventardatei auszuführen und eine Verbindung als aktueller Systembenutzer herzustellen. Das Modulpingprüft, ob:

  • Ihre Ansible-Hosts sind erreichbar.

  • Ihr Ansible Control Node verfügt über gültige SSH-Anmeldeinformationen.

  • Ihre Hosts können Ansible-Module mit Python ausführen.

Wenn Sie Ansible korrekt installiert und konfiguriert haben, erhalten Sie eine Ausgabe ähnlich der folgenden:

Outputserver1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Sobald Sie einepong-Reaktion von einem Host erhalten, bedeutet dies, dass Sie bereit sind, Ansible-Befehle und Playbooks auf diesem Server auszuführen.

[.note] #Note: Wenn Sie keine erfolgreiche Antwort von Ihren Servern erhalten können, lesen Sie unsereAnsible Cheat Sheet Guide, um weitere Informationen zum Ausführen von Ansible-Befehlen mit benutzerdefinierten Verbindungsoptionen zu erhalten.
#

Was macht dieses Playbook?

Dieses Ansible-Playbook bietet eine Alternative zum manuellen Ausführen des in unserem Handbuch zuHow To Install and Use Docker on Ubuntu 18.04 beschriebenen Verfahrens.

Wenn Sie dieses Playbook ausführen, werden die folgenden Aktionen auf Ihren Ansible-Hosts ausgeführt:

  1. Installieren Sieaptitude, was von Ansible als Alternative zum Paketmanager vonaptbevorzugt wird.

  2. Installieren Sie die erforderlichen Systempakete.

  3. Installieren Sie den Docker GPG APT-Schlüssel.

  4. Fügen Sie das offizielle Docker-Repository zu den Quellen vonapthinzu.

  5. Installieren Sie Docker.

  6. Installieren Sie das Python Docker-Modul überpip.

  7. Ziehen Sie das durchdefault_container_image angegebene Standard-Image aus Docker Hub.

  8. Erstellen Sie die Anzahl der durch das Feldcreate_containersdefinierten Container unter Verwendung des durchdefault_container_image definierten Bildes und führen Sie den indefault_container_command definierten Befehl in jedem neuen Container aus.

Sobald das Playbook ausgeführt wurde, werden basierend auf den Optionen, die Sie in Ihren Konfigurationsvariablen definiert haben, eine Reihe von Containern erstellt.

Wie man dieses Playbook benutzt

Zunächst laden wir den Inhalt derplaybook auf Ihren Ansible Control Node herunter. Der Inhalt des Spielbuchs ist auch inthe next section of this guide enthalten.

Verwenden Siecurl, um dieses Playbook von der Befehlszeile herunterzuladen:

curl -L https://raw.githubusercontent.com/do-community/ansible-playbooks/master/docker/ubuntu1804.yml -o docker_ubuntu.yml

Dadurch wird der Inhalt des Playbooks in eine Datei mit dem Namendocker_ubuntu.yml in Ihrem aktuellen Arbeitsverzeichnis heruntergeladen. Sie können den Inhalt des Playbooks überprüfen, indem Sie die Datei mit dem Befehlszeileneditor Ihrer Wahl öffnen:

nano docker_ubuntu.yml

Sobald Sie die Playbook-Datei geöffnet haben, sollten Sie einen Abschnitt mit dem Namenvars mit Variablen bemerken, die Ihre Aufmerksamkeit erfordern:

docker_ubuntu.yml

. . .
vars:
  create_containers: 4
  default_container_name: docker
  default_container_image: ubuntu
  default_container_command: sleep 1d
. . .

Diese Variablen bedeuten Folgendes:

  • create_containers: Die Anzahl der zu erstellenden Container.

  • default_container_name: Standardcontainername.

  • default_container_image: Standard-Docker-Image, das beim Erstellen von Containern verwendet wird.

  • default_container_command: Standardbefehl zur Ausführung auf neuen Containern.

Speichern und schließen Sie die Datei, sobald Sie die Variablen indocker_ubuntu.yml aktualisiert haben. Wenn Sienano verwendet haben, drücken Sie dazuCTRL + X,Y und dannENTER.

Sie können dieses Playbook jetzt auf einem oder mehreren Servern ausführen. Die meisten Playbooks sind standardmäßig so konfiguriert, dass sie aufall-Servern aus Ihrem Inventar ausgeführt werden. Wir können das-l-Flag verwenden, um sicherzustellen, dass nur eine Teilmenge von Servern oder ein einzelner Server vom Playbook betroffen ist. Um das Playbook nur aufserver1 auszuführen, können Sie den folgenden Befehl verwenden:

ansible-playbook docker_ubuntu.yml -l server1

Sie erhalten eine Ausgabe ähnlich der folgenden:

Output...
TASK [Add Docker GPG apt Key] ********************************************************************************************************************
changed: [server1]

TASK [Add Docker Repository] *********************************************************************************************************************
changed: [server1]

TASK [Update apt and install docker-ce] **********************************************************************************************************
changed: [server1]

TASK [Install Docker Module for Python] **********************************************************************************************************
changed: [server1]

TASK [Pull default Docker image] *****************************************************************************************************************
changed: [server1]

TASK [Create default containers] *****************************************************************************************************************
changed: [server1] => (item=1)
changed: [server1] => (item=2)
changed: [server1] => (item=3)
changed: [server1] => (item=4)

PLAY RECAP ***************************************************************************************************************************************
server1                  : ok=9    changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[.note] #Note: Weitere Informationen zum Ausführen von Ansible-Playbooks finden Sie in unserenAnsible Cheat Sheet Guide.
#

Wenn das Playbook fertig ist, melden Sie sich über SSH bei dem von Ansible bereitgestellten Server an und führen Siedocker ps -a aus, um zu überprüfen, ob die Container erfolgreich erstellt wurden:

sudo docker ps -a

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a3fe9bfb89cf        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker4
8799c16cde1e        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker3
ad0c2123b183        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker2
b9350916ffd8        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker1

Dies bedeutet, dass die im Playbook definierten Container erfolgreich erstellt wurden. Da dies die letzte Aufgabe im Playbook war, wird auch bestätigt, dass das Playbook auf diesem Server vollständig ausgeführt wurde.

Das Playbook Inhalt

Sie finden das Docker-Playbook in diesem Tutorial inansible-playbooks repository innerhalb vonDigitalOcean Community GitHub organization. Um den Skriptinhalt direkt zu kopieren oder herunterzuladen, klicken Sie oben im Skript auf die SchaltflächeRaw oder aufclick here to view the raw contents directly.

Der vollständige Inhalt ist auch hier für Ihre Bequemlichkeit enthalten:

docker_ubuntu.yml

---
- hosts: all
  become: true
  vars:
    create_containers: 4
    default_container_name: docker
    default_container_image: ubuntu
    default_container_command: sleep 1d

  tasks:
    - name: Install aptitude using apt
      apt: name=aptitude state=latest update_cache=yes force_apt_get=yes

    - name: Install required system packages
      apt: name={{ item }} state=latest update_cache=yes
      loop: [ 'apt-transport-https', 'ca-certificates', 'curl', 'software-properties-common', 'python3-pip', 'virtualenv', 'python3-setuptools']

    - name: Add Docker GPG apt Key
      apt_key:
        url: https://download.docker.com/linux/ubuntu/gpg
        state: present

    - name: Add Docker Repository
      apt_repository:
        repo: deb https://download.docker.com/linux/ubuntu bionic stable
        state: present

    - name: Update apt and install docker-ce
      apt: update_cache=yes name=docker-ce state=latest

    - name: Install Docker Module for Python
      pip:
        name: docker

    # Pull image specified by variable default_image from the Docker Hub
    - name: Pull default Docker image
      docker_image:
        name: "{{ default_container_image }}"
        source: pull

    # Creates the number of containers defined by the variable create_containers, using default values
    - name: Create default containers
      docker_container:
        name: "{{ default_container_name }}{{ item }}"
        image: "{{ default_container_image }}"
        command: "{{ default_container_command }}"
        state: present
      with_sequence: count={{ create_containers }}

Sie können dieses Playbook jederzeit an Ihre individuellen Bedürfnisse anpassen. Sie können beispielsweise das Moduldocker_image verwenden, um Bilder an Docker Hub zu senden, oder das Moduldocker_container, um Containernetzwerke einzurichten.

Fazit

Durch die Automatisierung der Einrichtung Ihrer Infrastruktur können Sie nicht nur Zeit sparen, sondern auch sicherstellen, dass Ihre Server einer Standardkonfiguration folgen, die an Ihre Bedürfnisse angepasst werden kann. Aufgrund der Verteilung moderner Anwendungen und der Notwendigkeit einer Konsistenz zwischen verschiedenen Staging-Umgebungen ist eine solche Automatisierung zu einer zentralen Komponente in den Entwicklungsprozessen vieler Teams geworden.

In diesem Handbuch wurde gezeigt, wie Sie mit Ansible den Installations- und Einrichtungsprozess von Docker auf einem Remote-Server automatisieren. Da jede Person bei der Arbeit mit Containern normalerweise unterschiedliche Anforderungen hat, empfehlen wir Ihnen, dieofficial Ansible documentation zu überprüfen, um weitere Informationen und Anwendungsfälle des Ansible-Modulsdocker_container zu erhalten.

Wenn Sie weitere Aufgaben in dieses Playbook aufnehmen möchten, um Ihre anfängliche Serverkonfiguration weiter anzupassen, lesen Sie bitte unsere Einführung in AnsibleConfiguration Management 101: Writing Ansible Playbooks.