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/
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
Legen Sie die folgenden Umgebungsvariablen fest.
% export DOCKER_HOST=a300:2375
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
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.
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
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
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
Legen Sie die folgenden Umgebungsvariablen fest.
% export DOCKER_CERT_PATH=~/.docker/certs.d
% export DOCKER_HOST=a300:2376
% export DOCKER_TLS_VERIFY=1
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
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