Installieren Sie Docker unter Arch Linux und führen Sie es remote aus

Installation

Docker Installieren Sie das Paket.

# pacman -Syu docker
# systemctl enable docker
# systemctl restart docker

Stellen Sie sicher, dass die Installation abgeschlossen ist und der Docker-Daemon ausgeführt wird.

# docker info

Hello World

Führen Sie den Container zum ersten Mal aus. Wenn Sie die folgende Ausgabe erhalten, sind Sie erfolgreich.

# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:fc6a51919cfeb2e6763f62b6d9e8815acbf7cd2e476ea353743570610737b752
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Fernzugriff (Klartext)

Server Einstellungen

Geben Sie den Port an und machen Sie die Remote-API verfügbar, um Docker für Remote-Hosts verfügbar zu machen. Wenn Sie die Kommunikation normalerweise nicht verschlüsseln, lautet die Portnummer 2375.

# systemctl edit docker

config:/lib/systemd/system/docker.service.d/override.conf


[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
# systemctl daemon-reload
# systemctl restart docker

Client-Einstellungen

Legen Sie die folgenden Umgebungsvariablen fest.

% export DOCKER_HOST=a300:2375

Wie benutzt man

Der Docker-Befehl auf dem Client wird immer auf dem Server ausgeführt.

% docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea
 Built:             Wed Nov 13 07:22:34 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.6-ce
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.7
  Git commit:       369ce74a3c
  Built:            Thu Feb 13 18:14:54 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.3.3.m
  GitCommit:        d76c121f76a5fc8a462dc64594aea72fe18e1178.m
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Fernzugriff (TLS)

Zum Verschlüsseln der Kommunikation mit TLS ist ein Zertifikat erforderlich. Die Erklärung hier basiert auf der Annahme, dass ein selbstsigniertes Zertifikat erstellt wird.

Serverzertifikat

Generieren Sie zunächst den privaten und den öffentlichen Schlüssel der Zertifizierungsstelle (CA).

# mkdir /etc/docker/certs.d
# cd /etc/docker/certs.d
# openssl genrsa -out ca-key.pem 4096
# openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:a300
Email Address []:

Erstellen Sie einen privaten Serverschlüssel und eine CSR (Certificate Signing Request).

# openssl genrsa -out server-key.pem 4096
# sudo openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr

Generieren Sie ein Serverzertifikat. Hier wird festgelegt, dass über den Hostnamen oder die IP-Adresse darauf zugegriffen werden kann.

config:/etc/docker/certs.d/extfile.cnf


subjectAltName = DNS:a300,IP:192.168.0.16,IP:127.0.0.1
extendedKeyUsage = serverAuth
# openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
# rm server.csr extfile.cnf

Legen Sie die Berechtigungen so fest, dass jeder auf das Zertifikat zugreifen kann, sodass nur root (Docker) auf den privaten Schlüssel zugreifen kann.

# chmod -v 0400 ca-key.pem server-key.pem
# chmod -v 0444 ca.pem server-cert.pem

Client-Zertifikat

Erstellen Sie einen privaten Clientschlüssel und eine Zertifikatsignierungsanforderung (Certificate Signing Request, CSR).

# openssl genrsa -out key.pem 4096
# sudo openssl req -subj '/CN=mbp2015' -new -key key.pem -out client.csr

Generieren Sie ein Client-Zertifikat.

config:/etc/docker/certs.d/extfile-client.cnf


extendedKeyUsage = clientAuth
# openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
# rm client.csr extfile-client.cnf

Wenn Sie sich nicht mit Root-Rechten beim Server anmelden können, müssen Sie in das Ausgangsverzeichnis wechseln und den Administrator ändern, um das Client-Zertifikat und den privaten Schlüssel mit scp zu erhalten.

# mv key.pem ~
# mv cert.pem ~
# cp ca.pem ~
# chown $USER key.pem cert.pem ca.pem
% mkdir -p ~/.docker/certs.d
% scp a300:~/key.pem ~/.docker/certs.d
% scp a300:~/cert.pem ~/.docker/certs.d
% scp a300:~/ca.pem ~/.docker/certs.d
% chmod 400 ~/.docker/certs.d/key.pem
% chmod 444 ~/.docker/certs.d/cert.pem ~/.docker/certs.d/ca.pem

Stellen Sie sicher, dass Sie den privaten Clientschlüssel vom Server löschen. Mit diesem privaten Schlüssel können Sie Docker ohne Sudo ausführen. Dies entspricht dem Gewähren von Root-Berechtigungen für diesen Benutzer.

# rm ~/key.pem ~/cert.pem ~/ca.pem

Server Einstellungen

Geben Sie den Port an und machen Sie die Remote-API verfügbar, um Docker für Remote-Hosts verfügbar zu machen. Die Portnummer für die übliche Verschlüsselung der Kommunikation lautet 2376.

# systemctl edit docker

config:/lib/systemd/system/docker.service.d/override.conf


[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/certs/ca.pem --tlscert=/etc/docker/certs/server-cert.pem --tlskey=/etc/docker/certs/server-key.pem -H fd:// -H tcp://0.0.0.0:2376
# systemctl daemon-reload
# systemctl restart docker

Client-Einstellungen

Legen Sie die folgenden Umgebungsvariablen fest.

% export DOCKER_CERT_PATH=~/.docker/certs.d
% export DOCKER_HOST=a300:2376
% export DOCKER_TLS_VERIFY=1

Wie benutzt man

Der Docker-Befehl auf dem Client wird immer auf dem Server ausgeführt.

% docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea
 Built:             Wed Nov 13 07:22:34 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.6-ce
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.7
  Git commit:       369ce74a3c
  Built:            Thu Feb 13 18:14:54 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.3.3.m
  GitCommit:        d76c121f76a5fc8a462dc64594aea72fe18e1178.m
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Automatische Vervollständigung

zsh

Geben Sie in .zshrc den Pfad des Verzeichnisses an, in dem sich die Definitionsdatei in fpath befindet.

fpath=($ZDOTDIR/completion $fpath)
autoload -Uz compinit
compinit -i -d "$ZCACHEDIR/.zcompdump"

Holen Sie sich die Docker- und Docker-Compose-Definitionsdateien und starten Sie die Shell neu.

mkdir $ZDOTDIR/completion
curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/zsh/_docker > $ZDOTDIR/completion/_docker
curl -L https://raw.githubusercontent.com/docker/compose/master/contrib/completion/zsh/_docker-compose > $ZDOTDIR/completion/_docker-compose
exec $SHELL -l

Recommended Posts

Installieren Sie Docker unter Arch Linux und führen Sie es remote aus
Installieren Sie Minecraft unter Arch Linux
Installieren Sie Dropbox und führen Sie es unter Ubuntu 20.04 aus
Installieren Sie Arch Linux auf DeskMini A300
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
Installieren Sie wsl2 und Master Linux unter Windows
Installieren und starten Sie k3s unter Manjaro Linux
Installieren und konfigurieren Sie den TigerVNC-Server unter Linux
Bis Sie Arch Linux auf VMware installieren
Installieren Sie das ROS- und ROS-Modul für Roomba auf Raspberry Pi 3 und versuchen Sie, es auszuführen
Installieren Sie Python3 und Django unter Amazon Linux (EC2) und führen Sie den Webserver aus
Installieren Sie Python3.5 + NumPy + SciPy und führen Sie es unter Windows 10 aus
jblas unter Arch Linux
Installieren Sie Docker auf Fedora31
Installieren Sie Docker unter AWS
Installieren Sie Python 3.6 auf Docker
So installieren Sie Fast.ai auf einer Alibaba Cloud-GPU und führen es auf einem Jupyter-Notebook aus
Installieren Sie Selenium auf Ihrem Mac und probieren Sie es mit Python aus
Installieren Sie Apache 2.4 unter Ubuntu 19.10 Eoan Ermine und führen Sie CGI aus
Entwickelt durch Installation von Git, VSCode, Docker unter Chrome OS
Kompilieren und installieren Sie MySQL-Python für Python2.7 unter Amazon Linux
Downgrade von Mcomix mit Arch Linux
Installieren Sie JDK unter Linux
Aufnahme und Wiedergabe unter Linux
Installieren Sie tomcat 5.5 unter Amazon Linux.
Installieren von Homebrew unter Amazon Linux 2
Führen Sie IPython Notebook auf Docker aus
Installieren Sie Docker unter WSL Ubuntu 18.04
Installieren Sie Python Pillow unter Amazon Linux
[MariaDB] Installieren Sie MariaDB unter Linux und erstellen Sie eine Datenbank und einen Benutzer.
Himbeer Pi 4 Centos7 auf Docker installieren
Installieren Sie Mecab und mecab-python3 unter Ubuntu 14.04
Installieren Sie Oracle Java8 unter Amazon Linux2
Installieren Sie OpenCV und Chainer unter Ubuntu
Installieren Sie mecab auf dem gemeinsam genutzten Sakura-Server und rufen Sie es von Python aus auf
Installieren Sie CUDA 8.0 und Chainer unter Ubuntu 16.04
Erstellen und installieren Sie OpenCV unter Windows
Abschluss des Docker-Befehls unter Linux
Führen Sie einen Linux-Server mit GCP aus
So installieren Sie VMware-Tools unter Linux
Führen Sie das Docker-Image von TensorFlow unter Python3 aus
Führen Sie Matplotlib auf einem Docker-Container aus
Rippen Sie Musik-CDs unter Arch Linux
[Linux] Aufbau einer Docker-Umgebung auf Redhat
Installieren Sie Fabric unter Ubuntu und versuchen Sie es
[Hinweis] Installieren Sie Imagick unter Amzon Linux2
[Hinweis] Führen Sie Django unter Amazon Linux 2 aus
Installieren Sie lp_solve unter Mac OSX und rufen Sie es mit Python auf.
Bereiten Sie ein Projektformat für maschinelles Lernen vor und führen Sie es in SageMaker aus
Installieren Sie easy_install und pip unter Windows
Bis matplotlib installiert ist und ausgeführt wird
Führen Sie cron unter Amazon Linux aus (unter Linux eingestellt).
Bis Sie Apache und Tomcat unter Linux (CentOS) installieren und Java-Apps bereitstellen