[LINUX] Transportez un conteneur Docker

Aperçu

Utilisez la mémoire USB pour créer un environnement dans lequel vous pouvez exécuter le conteneur Docker partout où vous avez un PC Windows sans aucun privilège d'administrateur.

À propos de la mémoire USB

Si vous ne sélectionnez pas un compatible USB3.0 rapide, il sera tiré par la vitesse d'écriture et l'opération ralentira.

Je pense que c'est douloureux si la valeur de l'écriture aléatoire (deux en bas à droite) de CrystalDiskMark ne dépasse pas 1,0 (* Il existe des différences d'expérience individuelles)

Au fait, j'utilise U3-MAX2 / 32K de I-O DATA.

Si vous pouvez le rendre un peu encombrant, vous pouvez utiliser un SSD portable et il ne devrait y avoir aucun problème en termes de vitesse sauf s'il s'agit d'un produit défectueux.

Dans le cas d'une mémoire USB jusqu'à 32 Go, elle est généralement formatée avec FAT32 à l'état initial, mais FAT32 a une limite allant jusqu'à 4G par fichier, et le stockage virtuel composé d'un fichier sera bientôt épuisé et une erreur d'écriture se produira Par conséquent, il est nécessaire de reformater avec NTFS ou exFAT.

De plus, comme il écrit beaucoup en raison de sa nature, prenons des mesures pour qu'il puisse être cassé à tout moment dans le pire des cas.

Installation de logiciels de virtualisation

Qemu

Docker ne fonctionne que sur Linux (64 bits), vous devez donc exécuter Linux avec un logiciel de virtualisation, utilisez Qemu pour le logiciel de virtualisation.

Qemu n'est pas très rapide à émuler, mais il peut être démarré sans activer divers accélérateurs nécessitant des privilèges d'administrateur. En d'autres termes, si cela ne vous dérange pas d'être en retard, vous pouvez le démarrer sans privilèges d'administrateur.

WSL2 et les autres logiciels de virtualisation nécessitent des privilèges d'administrateur et ne peuvent pas être utilisés de manière portable, et Portable-Virtual Box, qui est destiné aux opérations portables, nécessite des privilèges d'administrateur.

Il est difficile d'exécuter un environnement de bureau tel que Gnome sans accélérateur, mais cela fonctionne tel quel dans un environnement CUI (ligne de commande). (* Il existe des différences d'expérience individuelles) Dans la zone Docker, la plupart de l'interface utilisateur est essentiellement gérée par le navigateur Web, ce n'est donc pas un gros problème.

Le point que vous pouvez émuler un PC 64 bits même sur un PC / OS 32 bits est également élevé.

Télécharger et installer

Depuis Site officiel Version Windows de Qemu ([version 32 bits](https: // qemu) Téléchargez .weilnetz.de / w32 /) ou version 64 bits).

La version Windows de Qemu semble être distribuée uniquement dans le format d'installation qui nécessite des privilèges d'administrateur, donc Universal Extractor 2 ([lien direct] qui prend en charge la décompression du programme d'installation ](Https://github.com/Bioruebe/UniExtract2/releases/download/v2.0.0-rc.2/UniExtractRC2.zip) pour décompresser sur la mémoire USB.

En passant, vous pouvez également l'utiliser en installant avec des privilèges d'administrateur et en copiant le fichier installé sur une clé USB.

Installation Linux

Alpine Linux

Après avoir installé (copié) Qemu sur la clé USB, installez Linux sur le PC virtuel.

La distribution Linux à installer peut être tout ce qui prend en charge 64 bits et peut installer Docker.

Je recommande personnellement Alpine Linux. L'installation est explosive. Si vous essayez d'installer une distribution Linux couramment utilisée telle que Debian à partir de zéro, vous devez être prêt pendant quelques heures même avec la configuration minimale sur le Qemu déjà lent, mais l'installation sera terminée dans quelques minutes.

Alpine Linux est une distribution qui ne craint pas les malentendus et qui se concentre sur la réduction de poids au détriment de la compatibilité, et en raison de sa petite taille, elle est souvent adoptée comme base de l'image officielle de Docker, et on la voit souvent dans la zone Docker. ..

Il existe des difficultés de compatibilité telles que l'impossibilité d'utiliser le logiciel utilisé dans d'autres distributions Linux, mais si vous utilisez Alpine Linux lui-même en tant qu'hôte Docker et que vous exécutez le logiciel en tant que conteneur Docker, ce sera un problème. Ça ne sera pas.

téléchargement iso

Il existe une page de téléchargement iso sur le Site officiel, alors téléchargez la version x86_64.

Standard (124M) est bien, mais nous recommandons le plus petit Virtual (40M) pour les PC virtuels.

Une fois téléchargé, il aura un nom de fichier long tel que alpine-virt-3.12.0-x86_64.iso, donc le changer en alpine.iso facilitera le reste.

Installation

Contrairement à d'autres logiciels de virtualisation, Qemu dispose d'un mécanisme pour tout définir et tout démarrer à partir de la ligne de commande (bien qu'il existe différents frontaux pour fonctionner avec l'interface graphique).

Créer un fichier de stockage virtuel

> qemu-img create -f qcow2 linux.qcow2 20G

Le dernier 20G sera la capacité maximale du fichier de stockage virtuel, alors changez-le en fonction de votre environnement. Au lieu de sécuriser soudainement la pleine capacité de 20G, la taille est augmentée au besoin jusqu'à ce que la capacité maximale soit atteinte.

Démarrez avec le fichier iso comme disque de démarrage

Consultez la documentation des options Qemu, j'ai défini les éléments suivants:

> qemu-system-x86_64.exe -display sdl -rtc clock=vm,base=utc -smp 2 -boot d -m 2048 -net nic,model=virtio -hda linux.qcow2 -cdrom alpine.iso

Si tout se passe bien, une fenêtre devrait apparaître et démarrer le démarrage de Linux. Le démarrage peut prendre entre une minute et quelques minutes.

Installation

Lorsque le démarrage est terminé, l'écran de connexion de la console apparaît, mais vous pouvez vous connecter sans mot de passe en tapant root et en appuyant sur Entrée.

localhost login: root

Après vous être connecté

# setup-alpine

Démarrez l'installation avec. Des questions vous seront posées sur la ligne de commande, et si vous y répondez, l'installation démarrera.

Veuillez consulter ici pour le contenu spécifique. Puisqu'il est long, je vais l'omettre.

Après l'installation

# poweroff

Arrêtez avec.

Démarrage / paramètres Linux

Commencez

> qemu-system-x86_64.exe -display sdl -rtc clock=vm,base=utc -smp 2 -m 2048 -net nic,model=virtio -net user,hostfwd=tcp::22-:22,hostfwd=tcp::2375-:2375,hostfwd=tcp::9000-:9000 -hda linux.qcow2

Je cours de cette façon (sauf pour certains).

Connectez-vous au serveur sous Linux dans Qemu via le port spécifié dans la partie "-net user, hostfwd = tcp :: 22-: 22, hostfwd = tcp :: 2375-: 2375, hostfwd = tcp :: 9000-: 9000" Vous pourrez le faire. Cela semble s'appeler la redirection de port. (* Il s'agit d'une connexion locale du même PC et la connexion à partir d'un PC externe ne peut pas être effectuée car elle est due au pare-feu Windows, au routeur, etc., et les privilèges d'administrateur sont requis.)

Par exemple, dans ce cas, localhost: 22 vous permettra de vous connecter au serveur écoutant sur le port 22 sous Linux dans Qemu au lieu de l'hôte Windows.

Ici, 22 pour SSH, 2375 pour Docker CLI et 9000 pour Portainer sont affectés. Comme mentionné ci-dessus, vous pouvez ouvrir plusieurs ports en vous connectant avec, mais veuillez noter que si vous spécifiez un port qui attend déjà sur un autre serveur, Qemu lui-même ne démarrera pas avec une erreur.

À propos, il est également efficace pour connecter le serveur sur le conteneur Docker. En d'autres termes, si vous activez l'écoute sur le port 9000 au démarrage de Qemu, vous pouvez vous connecter à un conteneur Docker démarré en écoutant sur le port 9000 sur un hôte Linux depuis un hôte Windows sur le port 9000 (déroutant ...).

Le démarrage de Linux prend environ 1 à 2 minutes, selon l'environnement. Je ne sais pas si c'est lent ou quelque chose comme ça, mais cela peut être un goulot d'étranglement car il sera démarré et arrêté à plusieurs reprises en fonctionnement portable.

Paramètres SSH

Lorsque l'écran de connexion apparaît de la même manière que lors de l'installation, connectez-vous avec l'ID racine et le mot de passe définis lors de l'installation.

Je ne peux pas copier et coller des commandes dans la fenêtre Qemu, ce qui n'est pas pratique, donc j'activerai SSH.

Alpine Linux a un serveur SSH depuis le début (si vous n'avez répondu à aucune réponse à la question SSH au moment de l'installation), mais les spécifications du serveur SSH ne vous permettent pas de vous connecter en tant qu'utilisateur root tel quel, alors ici Ajoutez rapidement un fichier de configuration afin de pouvoir vous connecter en tant que root.

# echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

Si vous souhaitez fonctionner sans mot de passe, saisissez également ce qui suit.

# echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config

Après avoir modifié le fichier de configuration, arrêtez et redémarrez Qemu ou redémarrez le serveur SSH.

# service sshd restart

Lien

Windows 10 récent a un client Opeh SSH en standard, mais si vous l'utilisez tel quel, il créera un dossier .ssh dans le dossier utilisateur et il ne sera pas portable, alors ne lisez pas le fichier de configuration comme indiqué ci-dessous et ne vérifiez pas la clé , Commencez par l'option de ne pas quitter le fichier KnownHosts.

> ssh -F /dev/null -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@localhost

Connexion Telnet à Qemu

Si vous ne voulez pas fonctionner dans un état non protégé comme les paramètres du serveur SSH ci-dessus, vous pouvez utiliser Telnet pour afficher la console au lieu d'ouvrir une fenêtre avec "-display sdl".

> qemu-system-x86_64.exe -display none -serial telnet:localhost:4321,server,nowait -rtc clock=vm,base=utc -smp 2 -m 2048 -net nic,model=virtio -net user,hostfwd=tcp::22-:22,hostfwd=tcp::2375-:2375,hostfwd=tcp::9000-:9000 -hda linux.qcow2

Maintenant, après avoir démarré Qemu, connectez-vous au port 4321 par Telnet et la console s'affichera.

Étant donné que le client Telnet ne démarre pas par défaut dans Windows 10, Tera Term ou Putty Un logiciel de terminal compatible Telnet (les deux ont des versions portables) tel que apps / internet / putty_portable) est requis.

Les deux sont très pratiques car vous pouvez copier et coller des commandes.

Si vous activez toujours cela, vous pouvez vous connecter si vous connaissez le port et qu'il n'est pas très différent du paramètre ci-dessus sur le serveur SSH, alors activez-le uniquement lorsque cela est nécessaire.

Vous pouvez l'utiliser en toute sécurité jusqu'à ce que les paramètres du serveur SSH soient définis.

Si vous y réfléchissez bien, TeraTerm a une fonction macro, et il semble que vous puissiez faire fonctionner automatiquement Linux avec des macros tant que vous pouvez vous connecter à Telnet, donc si vous le combinez avec un fichier batch, vous pouvez automatiser tout le travail de cet article ... → Terminé

Installation de Docker

Alpine Linux a son propre gestionnaire de paquets appelé apk, mais docker ne peut pas être installé dans l'état initial, alors éditez / etc / apk / repositories avec vi etc. pour qu'il puisse être installé.

Dans l'état initial, le référentiel de communauté sur la deuxième ligne est commenté avec #, mais supprimez # pour l'activer.

/etc/apk/repositories


#/media/cdrom/apks
http://dl-cdn.alpinelinux.org/alpine/v3.12/main
http://dl-cdn.alpinelinux.org/alpine/v3.12/community
#http://dl-cdn.alpinelinux.org/alpine/edge/main
#http://dl-cdn.alpinelinux.org/alpine/edge/community
#http://dl-cdn.alpinelinux.org/alpine/edge/testing

Après l'enregistrement, installez le package docker et docker-compose avec apk

# apk update
# apk add docker docker-compose

Une fois l'installation terminée, démarrez docker.

# service docker start

Réglez-le pour qu'il démarre automatiquement au démarrage.

# rc-update add docker boot

Si vous voulez voir si cela fonctionne, téléchargez (probablement) l'image hello-world fournie pour cela et exécutez-la en tant que conteneur.

# docker run --rm hello-world

Si tout se passe bien, vous devriez voir quelque chose comme ce qui suit.

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
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/

Fonctionnement du conteneur avec Docker CLI pour Windows

Vous pouvez également utiliser Docker dans Qemu à partir d'un hôte Windows à l'aide de la version Windows de l'interface de ligne de commande Docker.

Je ne peux rien dire parce que je ne l'ai pas utilisé, mais je pense que ce sera probablement comme une version Windows de Docker (Docker Tookbox ou Docker pour Windows) exploitant Docker sous Linux sur un logiciel de virtualisation.

La CLI Docker semble être essentiellement construite par vous-même, mais [binaire intégré](https://github.com/StefanScherer/docker-cli- Il y a des gens qui ont publié des constructeurs / versions), donc si vous avez des difficultés à construire, s'il vous plaît.

Docker Compose a des binaires pré-construits officiels, alors utilisez-les. Veuillez le renommer ultérieurement en docker-compose.exe.

Comme prévu, vous ne pouvez pas vous connecter sans rien paramétrer, alors créez le fichier /etc/docker/daemon.json suivant afin de pouvoir vous connecter à partir d'un hôte Windows. Qemu doit également modifier ses options de démarrage afin de pouvoir se connecter au port 2375.

/etc/docker/daemon.json


{"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]}

Après avoir créé le fichier, redémarrez Docker

# service docker restart

Sous Windows, transmettez le chemin d'accès à l'exe que vous avez téléchargé précédemment et définissez la variable d'environnement pour vous connecter à localhost: 2375.

> set DOCKER_HOST=localhost:2375

Essayez-le pour voir s'il fonctionne avec docker ps. Si ça va bien, ça ressemblera à ça.

> docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                          NAMES
5b07a88001c9        portainer/portainer   "/portainer"             5 days ago          Up 9 minutes        0.0.0.0:9000->9000/tcp                         portainer

Pour être honnête, cela n'a pas beaucoup de sens d'utiliser simplement Docker à partir de la ligne de commande Windows. Il est préférable d'opérer directement depuis Linux via SSH ou Telnet.

La seule façon de rechercher les mérites est d'activer le fonctionnement de Docker et le développement à distance vers un conteneur à partir de Visual Studio Code s'exécutant sur Windows via l'extension Docker et l'extension Remote-Containers ... Même si ce n'est pas du côté du conteneur Il existe un moyen de configurer un serveur SSH et de se développer à distance avec SSH, c'est donc aussi un endroit délicat.

Installation de Portainer

Si vous avez du mal à gérer tous les conteneurs Docker à partir de la ligne de commande, nous vous recommandons Portainer, qui vous permet de gérer les conteneurs Docker sur un navigateur Web.

Si vous avez installé Docker, l'installation se termine avec une ligne de la commande suivante.

# docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Une fois l'installation terminée, accédez à http: // localhost: 9000 avec un navigateur Web et vous devriez voir l'écran de connexion Portainer.

Veuillez consulter ici pour les paramètres initiaux.

Sécurité

Dans ce cas, l'opération root ne fonctionne que pendant que Qemu fonctionne avec la mémoire USB connectée au PC, et généralement seule une connexion locale est possible, donc cela n'a pas beaucoup d'importance, mais en gros c'est une opération qui ne devrait pas être faite. Gardez à l'esprit qu'il y en a. Veillez également à ne pas perdre ou voler votre mémoire USB.

à la fin

Ceci complète l'environnement pour transporter le conteneur Docker avec une mémoire USB. Recommandé pour ceux qui n'ont pas de PC qu'ils peuvent gérer librement.

Recommended Posts

Transportez un conteneur Docker
Exécutez Matplotlib sur un conteneur Docker
Comment supprimer un conteneur Docker
Exécutez matplotlib sur un conteneur Windows Docker
Utilisez l'API Kaggle dans un conteneur Docker
Essayez le mode interactif Python dans un conteneur Docker
Lancer Django sur un conteneur Docker à l'aide de docker-compose up
Créez un conteneur Docker et enregistrez le png depuis altair
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) avec PyCharm
Générer une image Docker à l'aide de Fabric
Créer un conteneur DI avec Python
Créer un serveur Flask avec Docker
Créer un fichier deb avec Docker
Déployer l'application Django avec Docker
Démarrez le conteneur Docker lors de l'exécution de Pytest
Créer une image de conteneur Docker avec JRE8 / JDK8 sur Amazon Linux
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
Exécutez des fichiers Python dans un conteneur Docker sur un Raspbian distant via PyCharm
Remarques sur la configuration d'un conteneur Docker pour l'utilisation de JUMAN ++, KNP, python
Comment rendre le nom du conteneur accessible dans Docker en tant que sous-domaine
Configurer un serveur Samba avec Docker
Obtenez un environnement local pour DynamoDB avec Docker
Raclons un site dynamique avec Docker
Créer une application Python-GUI dans Docker (PySimpleGUI)
Créer un service Web avec Docker + Flask
Utiliser WebDAV dans un environnement Docker portable
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
Comment exécuter une application Django sur un conteneur Docker (environnement de développement et de production)