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 Modulping
prü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:
-
Installieren Sie
aptitude
, was von Ansible als Alternative zum Paketmanager vonapt
bevorzugt wird. -
Installieren Sie die erforderlichen Systempakete.
-
Installieren Sie den Docker GPG APT-Schlüssel.
-
Fügen Sie das offizielle Docker-Repository zu den Quellen von
apt
hinzu. -
Installieren Sie Docker.
-
Installieren Sie das Python Docker-Modul über
pip
. -
Ziehen Sie das durch
default_container_image
angegebene Standard-Image aus Docker Hub. -
Erstellen Sie die Anzahl der durch das Feld
create_containers
definierten 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.