docker Installez le package.
# pacman -Syu docker
# systemctl enable docker
# systemctl restart docker
Assurez-vous que l'installation est terminée et que le démon docker est en cours d'exécution.
# docker info
Hello World
Exécutez le conteneur pour la première fois. Si vous obtenez la sortie suivante, vous réussissez.
# 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/
Pour rendre le docker disponible pour les hôtes distants, spécifiez le port et exposez l'API distante. Si vous ne cryptez pas habituellement la communication, le numéro de port est 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
Définissez les variables d'environnement suivantes.
% export DOCKER_HOST=a300:2375
La commande docker sur le client est toujours exécutée sur le serveur.
% 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
Un certificat est requis pour crypter les communications avec TLS. L'explication ici est basée sur l'hypothèse qu'un certificat auto-signé sera créé.
Tout d'abord, générez la clé privée et la clé publique de l'autorité de certification (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 []:
Créez une clé privée de serveur et une demande de signature de certificat (CSR).
# openssl genrsa -out server-key.pem 4096
# sudo openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
Générez un certificat de serveur. Ici, il est configuré pour être accessible par nom d'hôte ou adresse IP.
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
Définissez les autorisations afin que tout le monde puisse accéder au certificat afin que seul le root (Docker) puisse accéder à la clé privée.
# chmod -v 0400 ca-key.pem server-key.pem
# chmod -v 0444 ca.pem server-cert.pem
Créez une clé privée client et une demande de signature de certificat (CSR).
# openssl genrsa -out key.pem 4096
# sudo openssl req -subj '/CN=mbp2015' -new -key key.pem -out client.csr
Générez un certificat client.
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
Si vous ne pouvez pas vous connecter au serveur avec les privilèges root, vous devrez vous rendre dans le répertoire de base et changer d'administrateur pour obtenir le certificat client et la clé privée avec scp.
# 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
Assurez-vous de supprimer la clé privée du client du serveur. Cette clé privée vous permet d'exécuter docker sans sudo. Cela revient à donner à cet utilisateur les privilèges root.
# rm ~/key.pem ~/cert.pem ~/ca.pem
Pour rendre le docker disponible pour les hôtes distants, spécifiez le port et exposez l'API distante. Le numéro de port pour le cryptage habituel des communications est 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
Définissez les variables d'environnement suivantes.
% export DOCKER_CERT_PATH=~/.docker/certs.d
% export DOCKER_HOST=a300:2376
% export DOCKER_TLS_VERIFY=1
La commande docker sur le client est toujours exécutée sur le serveur.
% 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
Dans .zshrc, spécifiez le chemin du répertoire où le fichier de définition est placé dans fpath.
fpath=($ZDOTDIR/completion $fpath)
autoload -Uz compinit
compinit -i -d "$ZCACHEDIR/.zcompdump"
Obtenez les fichiers de définition docker et docker-compose et redémarrez le shell.
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