Server-Tuning
Installieren von Docker Engine auf dem Server
Der Docker-Overhead unter Linux ist minimal. Docker auf dem Mac läuft in einer virtuellen Linux-Maschine, während es unter Linux direkt den Kernel des Hosts verwendet. Mehr dazu lesen Sie hier .
Da ein kleiner Ping für uns wichtig ist, ist es sinnvoll, ein Hosting in Moskau zu kaufen, aber es gibt keinen großen Unterschied.
Insgesamt: Linux, Moskau, Eigenschaften hängen von Ihren Anforderungen ab.
Auf ruvds.com gibt es dafür nur einen günstigen, vorgefertigten Tarif. Auch auf ruvds.com ist es möglich, ein Setup sofort mit Docker CE an Bord zu bestellen. Eine Kleinigkeit, aber nett.
Suchen Sie nach einem Passwort und melden Sie sich auf der Weboberfläche Ihres Hostings an und stellen Sie eine Verbindung her.


Installieren Sie als Nächstes Docker. Es gibt eine ausgezeichnete Anweisung hier unten Ich werde kurz die Befehle geben (wenn Sie plötzlich es nicht haben
sudo, vergessen Sie nicht , es zu installieren apt-get install sudounter su):
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Lassen Sie uns die Arbeit von Docker überprüfen:
docker run hello-world

Schlüssel generieren
Zuerst müssen Sie SSL-Schlüssel generieren. Sie können dem einfachen und schwierigen Weg folgen. Anweisungen zum harten Pfad (kanonisch) finden Sie in der Docker-Dokumentation . Aber gute Leute haben alles in einen <10 MB Container gestopft.
Erstellen wir zunächst einen Ordner, in dem wir alles speichern. Ordner können alles sein. Das erste (
/etc/docker/ssl) speichert die geheimen Schlüssel, das zweite ( ~/.docker) die Schlüssel für den Zugriff.
sudo mkdir -p /etc/docker/ssl
mkdir -p ~/.docker
Zuerst erstellen wir Client- und CA-Zertifikate im lokalen Ordner
docker run --rm -v ~/.docker:/certs \
paulczar/omgwtfssl
Erstellen wir Serverzertifikate mit der oben generierten Zertifizierungsstelle. Geben Sie dort durch Kommas getrennt die IP an, über die Sie auf den Server zugreifen. Vergessen Sie in unserem Fall nicht, dort die IP Ihres Servers anzugeben!
sudo cp ~/.docker/ca.pem /etc/docker/ssl/ca.pem
chown -R $USER ~/.docker
docker run --rm -v /etc/docker/ssl:/server \
-v ~/.docker:/certs \
-e SSL_IP=127.0.0.1,172.17.8.101,YOUR_IP \
-e SSL_DNS=docker.local -e SSL_KEY=/server/key.pem \
-e SSL_CERT=/server/cert.pem paulczar/omgwtfssl
Konfigurieren des Docker-Daemons
Die Hauptaufgabe in dieser Phase besteht darin, die Befehlszeilenargumente mit den Parametern zu versehen, die wir beim Starten von Docker benötigen. Wie Sie dies tun, ist nicht wichtig. Unter Ubuntu können Sie dies folgendermaßen tun:
1. Bearbeiten Sie die Datei mit
/etc/default/dockerIhrem bevorzugten Editor
nano /etc/default/docker
Und fügen Sie am Ende die Variable `DOCKER_OPTS` hinzu. Vergessen Sie nicht, dort Ihre externe IP einzugeben
DOCKER_OPTS="-H=YOUR_IP:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert=/etc/docker/ssl/ca.pem --tlscert=/etc/docker/ssl/cert.pem --tlskey=/etc/docker/ssl/key.pem"
2. Fügen Sie Argumente hinzu, um den Dienst zu starten. Unter Ubuntu lautet die Startparameterdatei
/lib/systemd/system/docker.service. Fügen Sie dem Unterabschnitt eine Zeile hinzu [Service]:
EnvironmentFile=/etc/default/docker
Und wir ändern den Startbefehl nebeneinander:
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
Ja, Punkt 1 war optional, die Befehlsargumente konnten auch hier eingefügt werden, aber es gibt viele davon, und es ist unpraktisch, einen großen Befehl in der Servicedatei auszuführen.
3. Starten Sie den Daemon neu
sudo systemctl daemon-reload
sudo systemctl restart docker
4. Überprüfen Sie in den Daemon-Protokollen, ob alles funktioniert:
journalctl -u docker.service -f

5. Versuchen wir, eine Verbindung über tls herzustellen:
export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
docker info

Arbeiten!
Auf dem Client konfigurieren
Bevor Sie mit der Konfiguration von Clients beginnen, müssen Sie den Zertifikatsordner auf Ihren Computer herunterladen. Sie können dies auf jede bequeme Weise tun. Zum Beispiel über `scp`:
Auf einem Remote-Computer:
mkdir /tmp/cert-for-docker && cp -v ~/.docker/{ca,cert,key}.pem /tmp/cert-for-docker
Auf dem lokalen Computer:
scp -r root@YOUR_IP:/tmp/cert-for-docker ~/.docker
Verwenden Sie als Nächstes diesen Ordner, um Ihren Docker-Client zu konfigurieren.
Mac OS CLI
Hier kommt es beim Setup darauf an, dass Sie Variablen in Ihrer Umgebung registrieren müssen und alles funktioniert. Es stellt sich jedoch die Frage: „Wo kann ich einen nackten Kunden bekommen? Wir brauchen nicht den offiziellen 2-GB-Schwergewichts-Client, der mit der Docker Engine geliefert wird, oder? "
Es gibt eine Lösung! Modern Docker ist seit langem in Client- und Serverteile unterteilt. Sie können separate Client-Binärdateien herunterladen, die für Macos kompiliert wurden. Die offizielle Anweisung ist hier , aber ich werde hier einen kurzen Auszug geben:
1. Laden Sie die neuesten Binärdateien oder die Ihrem Server entsprechenden Binärdateien (Sie können sie mit einem Befehl herausziehen
docker info) über den Link herunter und entpacken Sie sie.
2. Kopieren Sie die Binärdateien in den Ordner
/usr/local/bin/, um global zu arbeiten:
sudo cp docker/docker /usr/local/bin/
3. Wir registrieren uns in
~/.bashrcoder die ~/.zshrcnotwendigen Umgebungsvariablen. Vergessen Sie nicht, Ihre IP-Adresse und den Pfad zum Ordner mit den Zertifikaten einzugeben :
export DOCKER_HOST=tcp://YOUR_IP:2376
export DOCKER_CERT_PATH=PATH_TO_CERT
export DOCKER_TLS_VERIFY=1
4. Starten Sie Ihren Computer neu (Schaub sicher), überprüfen Sie:
docker info
docker run hello-world

Schönheit!
Jetbrains IDEs (PyCharm, IDEA, Android Studio usw.)
Jetbrains Studios unterstützen Docker über tls out of the box. Diese Einstellung befindet sich in
Preference->Build, Execution, Deployment->Docker->+. Dort müssen Sie TCP socketIhre Daten auswählen und eingeben. Es gibt jedoch einen Haken.

Wenn alles wie beabsichtigt ausgeführt wird, wird ein Fehler ausgegeben:
Fehlerantwort vom Daemon: Der Client hat eine HTTP-Anforderung an einen HTTPS-Server gesendet.Oder
Fehler hübsche Druckinformationen
Verbindung nicht möglich: Status 400: Client hat eine HTTP-Anforderung an einen HTTPS-Server gesendetEs ist notwendig, unserem Studio ausdrücklich vorzuschreiben, welches Protokoll wir verwenden
https:
YOUR_IP : 2376Danach sollte alles gut funktionieren.
Bonus (Portainer)
Um laufende und bereits verwendete Container effektiv zu verfolgen, habe ich Portainer auf diesem Server installiert. Es sollte in zwei Zeilen platziert werden:
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Danach
YOUR_IP:9000bleibt eine schöne Weboberfläche hängen und Sie können die laufenden und getöteten Container sehen. Erinnerst du dich, wie wir angefangen haben hello-world? Es ist hier und Sie können es direkt von der Schnittstelle reinigen.

Portainer selbst kann mit jedem Docker-Computer verbunden werden und die Docker-Container aller Ihrer Computer von einem Ort aus verwalten. Die Metrik (Grafana + Prometheus + Alerts) kann genauso einfach mit zwei Befehlen eingestellt werden (vergessen Sie nicht zu installieren
gi und docker-compose):
git clone https://github.com/stefanprodan/dockprom && cd dockprom
ADMIN_USER=admin ADMIN_PASSWORD=admin docker-compose up -d


Nur für Storage müssen Sie ändern
sum(node_filesystem_free_bytes{fstype="aufs"})zusum(node_filesystem_free_bytes{fstype="ext4"})

Fazit
Als ich einen Laptop kaufte, gab ich mir nicht die Hoffnung, dass es für jede Aufgabe für mich ausreichen würde, zumal es für mich für die Java / Android-Entwicklung ausreichen würde. Aber ich war angenehm überrascht, bis jetzt fliegen alle meine Projekte, persönlich und nur Open Source, in der IDE. Ich erkannte jedoch, dass diese Schreibmaschine trotz meiner Liebe zu Docker nicht ausgeschaltet werden würde. Ich war sehr glücklich, es einmal auf einem Remote-Docker-Server zu konfigurieren. Während des Entwicklungsprozesses ist es absolut nicht wahrnehmbar, dass der Server nicht lokal ist. Ich spüre keine Einschränkungen, es ist egal, Docker ohne Internet auszuführen, bevor es wenig Sinn macht. Im Allgemeinen bin ich sehr zufrieden. -1 Grund, einen leistungsstarken und schweren Laptop zu kaufen.
Darüber hinaus ist der Docker-Overhead für Linux minimal, sodass Sie bei RuVDS in Russland ein Auto für 240 Rubel pro Monat mieten können (und dies mit einem Rabatt unter Verwendung des HABR-Gutscheincodes )-10% und noch weniger) und machen Sie sich keine Sorgen über Ping und die Auswirkungen von Serveranwendungen auf die Benutzeroberfläche. Außerdem gibt es eine externe IP (die Fähigkeit, Clients anzuzeigen und Entwickler zu behalten), ein privates VPN und erstklassige Zuverlässigkeit. Insgesamt bin ich zufrieden.
Ressourcen:
- 2016 Artikel zur Anpassung für CoreOS
- Docker Remote API ohne Verschlüsselung
- Docker-Site und alle im Artikel selbst verknüpften Ressourcen
