Installez Docker sur Arch Linux et exécutez-le à distance

Installation

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/

Accès à distance (texte brut)

Paramètres du serveur

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

Paramètres du client

Définissez les variables d'environnement suivantes.

% export DOCKER_HOST=a300:2375

Comment utiliser

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

Accès à distance (TLS)

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éé.

Certificat de serveur

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

Certificat client

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

Paramètres du serveur

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

Paramètres du client

Définissez les variables d'environnement suivantes.

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

Comment utiliser

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

Achèvement automatique

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

Installez Docker sur Arch Linux et exécutez-le à distance
Installez Minecraft sur Arch Linux
Installez et exécutez Dropbox sur Ubuntu 20.04
Installez Arch Linux sur DeskMini A300
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Installez wsl2 et master linux sous Windows
Installer et lancer k3s sur Manjaro Linux
Installer et configurer le serveur TigerVNC sous Linux
Jusqu'à ce que vous installiez Arch Linux sur VMware
Installez le module ROS et ROS pour Roomba sur Raspberry Pi 3 et essayez de l'exécuter
Installez Python3 et Django sur Amazon Linux (EC2) et exécutez le serveur Web
Installez et exécutez Python3.5 + NumPy + SciPy sur Windows 10
jblas sur Arch Linux
Installer docker sur Fedora31
Installez Docker sur AWS
Installez Python 3.6 sur Docker
Comment installer Fast.ai sur le GPU Alibaba Cloud et l'exécuter sur un ordinateur portable Jupyter
Installez le sélénium sur votre Mac et essayez-le avec python
Installez Apache 2.4 sur Ubuntu 19.10 Eoan Ermine et exécutez CGI
Développé en installant Git, VSCode, Docker sur Chrome OS
Compilez et installez MySQL-python pour python2.7 sur Amazon Linux
Rétrograder Mcomix avec Arch Linux
Installez JDK sur Linux
Enregistrement et lecture sous Linux
Installez tomcat 5.5 sur Amazon Linux.
Installation de Homebrew sur Amazon Linux 2
Exécutez IPython Notebook sur Docker
Installer Docker sur WSL Ubuntu 18.04
Installez Python Pillow sur Amazon Linux
[MariaDB] Installez MariaDB sous Linux et créez une base de données et un utilisateur opérationnel.
raspberry pi 4 centos7 installer sur docker
Installez Mecab et mecab-python3 sur Ubuntu 14.04
Installer Oracle Java8 sur Amazon Linux2
Installez OpenCV et Chainer sur Ubuntu
Installez mecab sur le serveur partagé Sakura et appelez-le depuis python
Installez CUDA 8.0 et Chainer sur Ubuntu 16.04
Construisez et installez OpenCV sur Windows
Achèvement de la commande docker sous Linux
Exécutez un serveur Linux avec GCP
Comment installer VMware-Tools sur Linux
Exécutez l'image Docker de TensorFlow sur Python3
Exécutez Matplotlib sur un conteneur Docker
Extraire des CD de musique sur Arch Linux
[Linux] Construction de l'environnement Docker sur Redhat
Installez le fabric sur Ubuntu et essayez
[Note] Installez Imagick sur Amzon Linux2
[Note] Exécutez Django sur Amazon Linux 2
Installez lp_solve sur Mac OSX et appelez-le avec python.
Préparez un format de projet d'apprentissage automatique et exécutez-le dans SageMaker
Installez easy_install et pip sur Windows
Jusqu'à ce que matplotlib soit installé et exécuté
Exécutez cron sur Amazon Linux (défini sur Linux)
Jusqu'à ce que vous installiez Apache et Tomcat sur Linux (CentOS) et déployez des applications Java