Avec Docker non installé, installez Docker et essayez d'utiliser la commande zypper avec openSUSE sur le conteneur. Combine l'apprentissage LPIC et Docker.
macOS Catalina (version 10.15.7) MacBook Pro Docker version 19.03.13
Suivez les instructions dans Docker Official et installez depuis Docker Hub ..
Puisqu'il y a eu un tutoriel après l'installation, entrez la commande comme indiqué sur Docker Desktop (vous pouvez également cliquer sur le bouton).
Quant au contenu,
① Construisez un conteneur nommé repo
à partir de l'image ʻalpine / git, et créez un clone à partir du référentiel GitHub sur le conteneur. ② Copiez les fichiers dans le conteneur localement. ③ Construisez une image à partir du Dockerfile et nommez-la
docker101tutorial. ④ Donnez à l'image créée le nom
docker / docker101tutorial`, téléchargez-la sur Docker Hub et partagez-la.
$ docker run --name repo alpine/git clone https://github.com/docker/getting-started.git
$ docker cp repo:/git/getting-started/ .
$ cd getting-started/
$ docker build -t docker101tutorial .
$ docker tag docker101tutorial dockeridok/docker101tutorial
$ docker push dockeridok/docker101tutorial
Commande etc. | Explication |
---|---|
docker run [option]image[:Tag ou@Valeur du résumé] [commander] [argument...] | Crée une couche de conteneur sur l'image spécifiée et la démarre. Effectue la même opération que docker create → docker start. Si l'image spécifiée n'existe pas localement, elle sera téléchargée à partir de Docker Hub, elle peut donc être accompagnée d'une opération d'extraction de docker. Cette fois, l'image spécifiée alpine/Je n'ai pas de git localement, donc je le télécharge depuis Docker Hub. |
--name | Donnez un nom au conteneur. Cette fois, je l'ai nommé repo. La valeur par défaut est de le nommer à partir d'une chaîne aléatoire. |
clone | Je clonage depuis GitHub. Puisque git est spécifié dans ENTRYPOINT, git clone est en fait exécuté. |
conteneur cp: chemin chemin local | Copiez le contenu du système de fichiers du conteneur dans votre chemin local. |
docker build [option]Chemin ou URL ou- | Créez une nouvelle image à partir du Dockerfile dans le chemin. |
-t | Nom: Tag Spécifiez le nom et les balises facultatives dans le format. Cette fois, seul le nom est spécifié et la balise est omise. |
docker tag [option]image[:marque] [Hôte du registre/][Nom d'utilisateur/]Nom[:marque] | リポジトリ内のイメージにmarque付。今回はdocker101tutorial À l'imagedockeridok/docker101tutorial というNomをつけている。 |
docker push [option]Nom[:marque] | Vous pouvez partager l'image avec le registre Docker Hub ou votre propre registre. |
Dockerfile
Dockerfile sur lequel l'image est basée. Docker lit les instructions du Dockerfile et crée automatiquement l'image. Cette fois, nous approfondirons notre compréhension de Docker en utilisant le simple Dockerfile du tutoriel du site officiel comme exemple.
Dockerfile
#Image de base
FROM node:current-slim
#RUN spécifié dans Dockerfile,Spécifiez le répertoire de travail lors de l'exécution d'instructions telles que COPY
WORKDIR /usr/src/app
#Copiez le fichier de l'hôte dans le conteneur.
COPY package.json .
#Exécutez la commande dans le système de fichiers image.
RUN npm install
#Libérez le port du conteneur.
EXPOSE 8080
#Exécutez la commande spécifiée dans le conteneur. CMD fournit les valeurs par défaut lors de l'exécution du conteneur.
CMD [ "npm", "start" ]
#Copiez tous les fichiers, etc. dans le conteneur.
COPY . .
#Supprimer le conteneur
nom du conteneur docker rm
#Supprimez le conteneur en cours d'exécution.--la force arrête le conteneur.
docker rm --forcer le nom du conteneur
#Confirmation du conteneur
docker ps -a
#Suppression d'image
nom de l'image rmi docker
#Supprimez toutes les images.-L'option q affiche uniquement l'ID.
docker rmi `docker images -q`
#Confirmation d'image
docker images
#Démarrez le conteneur. Extrait du tutoriel sur le site officiel. Les détails de la commande seront décrits plus loin.
docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0
#Créer une image à partir d'un conteneur
docker commit -m "message" -un "responsable"" \
ID de conteneur hogeuser/opensuse:v2
Commande etc. | Explication |
---|---|
--publish 8000:8080 | Publiez le port du conteneur côté hôte. Transférez le port hôte 8000 vers le port conteneur 8080. |
--detach | Exécutez le conteneur en arrière-plan. |
docker commit [option]récipient[Dépôt[:marque]] | Créez une nouvelle image qui reflète les modifications et les paramètres du fichier du conteneur. |
Maintenant que j'ai une idée de Docker, je vais créer un conteneur openSUSE pour le sujet principal.
Le nom de l'image openSUSE a été trouvé par DockerHub opensuse / leap, donc tout ce que vous avez à faire est de l'exécuter. Si vous vérifiez simplement la commande, c'est plus rapide que de créer une machine virtuelle.
% docker run -it opensuse/leap:latest
Unable to find image 'opensuse/leap:latest' locally
latest: Pulling from opensuse/leap
658f48177d00: Already exists
Digest: sha256:
Status: Downloaded newer image for opensuse/leap:latest
0a5ec012802e:/ # cat /etc/*release
NAME="openSUSE Leap"
VERSION="15.2"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.2"
PRETTY_NAME="openSUSE Leap 15.2"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.2"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
0a5ec012802e:/ # zypper --version
zypper 1.14.38
Commande etc. | Explication |
---|---|
-i | Obtenez l'entrée standard (STDIN) du conteneur. Une entrée standard sera possible dans le conteneur. |
-t | Attribuez un pseudo terminal à l'intérieur du conteneur.-En combinant avec t, vous pouvez entrer des commandes comme un terminal normal (bien que je ne sache pas ce que vous pouvez faire comme d'habitude). |
J'ai également construit et utilisé un conteneur CentOS, mais c'était ennuyeux de voir `ne peut pas définir la locale; assurez-vous que $ LC_ * et $ LANG sont corrects ', donc quand j'ai essayé de changer la locale,
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to create bus connection: Host is down
Est affiché. Systemd ne peut pas fonctionner parce que le shell utilise PID1?
[root@15900d9cd863 /]bash# ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
162 pts/0 00:00:00 ps
Je l'ai résolu en suivant cet article. Hyakuzo's Room "Lorsque systemctl ne peut pas être utilisé avec le conteneur CentOS 7"
docker run -itd --image privilégiée/sbin/init
docker exec -il conteneur/bin/bash
[root@d7a7f918cfde /]bash# ps
PID TTY TIME CMD
119 pts/1 00:00:00 bash
15560 pts/1 00:00:00 ps
Commande etc. | Explication |
---|---|
--privileged | Accordez des privilèges étendus (tous les privilèges) au conteneur. Vous pouvez vous connecter à d'autres conteneurs et vous connecter à tous les périphériques de l'hôte. |
/sbin/init | Avec un lien symbolique vers systemd--En utilisant avec des privilèges/sbin/init fonctionne et systemctl etc. peut être exécuté |
docker exec [option]Commande conteneur[argument...] | Exécutez la commande dans le conteneur en cours d'exécution. Cette fois, lorsque vous exécutez la commande dans le conteneur,/bin/Cela signifie "commande bash"? |
Au fait, cadre local. Après le réglage, il devrait être reflété dans source / etc / locale.conf
(la commande ci-dessus n'est pas exécutée car elle est sortie du conteneur par redémarrage
).
[root@d7a7f918cfde /]bash# localectl
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: n/a
[root@d7a7f918cfde /]bash# localectl list-locales
C.utf8
[root@d7a7f918cfde /]bash# dnf -y install langpacks-ja
[root@d7a7f918cfde /]bash# localectl list-locales
C.utf8
ja_JP.eucjp
ja_JP.utf8
[root@d7a7f918cfde /]bash# localectl set-locale LANG=ja_JP.utf8
[root@d7a7f918cfde /]bash# localectl
System Locale: LANG=ja_JP.utf8
VC Keymap: us
X11 Layout: n/a
Je veux rendre la partie de l'invite plus facile à comprendre, je vais donc la colorier. Site de référence: Tohoho's WWW "Introduction to Shell".
#Confirmation Shell
$ echo $SHELL
#Modifier le fichier de paramètres. Colorez-le en vert pour afficher l'heure.
$ vi /etc/bashrc
export PS1="\[\e[1;32m\][\u@\h \w][\t]\[\e[0m\]\s\ $"
#Réfléchir
$ source /etc/bashrc
Lorsque j'ai affiché l'heure sur l'invite, ce n'était pas le Japon, alors changez-le en Japon.
[root@f95fa15cf5fb /][13:26:29]bash#timedatectl
Local time:Dim 2020-11-01 13:26:37 UTC
Universal time:Dim 2020-11-01 13:26:37 UTC
RTC time:Dim 2020-11-01 13:26:37
Time zone: UTC (UTC, +0000)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: no
[root@f95fa15cf5fb /][13:26:37]bash#timedatectl set-timezone Asia/Tokyo
[root@f95fa15cf5fb /][22:27:03]bash#timedatectl
Local time:Dim 2020-11-01 22:27:07 JST
Universal time:Dim 2020-11-01 13:27:07 UTC
RTC time:Dim 2020-11-01 13:27:07
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: no
C'était gênant car la fonction de complétion n'était souvent pas activée, alors activez-la. Ce n'est pas joli, mais après avoir exécuté la commande suivante, je suis sorti du conteneur, j'ai engagé le conteneur pour créer une image et ai fait de l'image un conteneur pour activer la fonction de complétion.
[root@f95fa15cf5fb /][22:32:18]bash#yum info bash-completion
Last metadata expiration check: 1:18:08 novembre le 01 novembre 2020 21:24:15.
Available Packages
Name : bash-completion
Epoch : 1
Version : 2.7
Release : 5.el8
Architecture : noarch
Size : 274 k
Source : bash-completion-2.7-5.el8.src.rpm
Repository : BaseOS
Summary : Programmable completion for Bash
URL : https://github.com/scop/bash-completion
License : GPLv2+
Description : bash-completion is a collection of shell functions that take advantage
: of the programmable completion feature of bash.
[root@f95fa15cf5fb /][22:42:23]bash#yum install bash-completion
Recommended Posts