Gestion des conteneurs 2.Docker, gestion de l'entrepôt, gestion des données, sauvegarde et récupération du volume de données

Gestion des conteneurs Docker

  • Créez un conteneur : docker create -it centos6 bash // Cela peut créer un conteneur, mais le conteneur n'est pas démarré et docker ps ne peut pas le voir. Vous avez besoin de docker ps -a pour voir

[root @ awei-01 ~] # docker create -it centos6 bash 
55a10d72564eecca7e11d9ed1d5950109e972a51a2c717102e7eca5a5d52f6df 
[root @ awei-01 ~] # docker ps 
ID DE CONTENEUR IMAGE COMMANDES CRÉÉES 
DE PORTE Vous devez ajouter l'option "-a" pour l'afficher, car elle n'a pas démarré 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
55a10d72564e centos6 "bash" 11 secondes ago Créé elated_kepler 
[root @ awei-01 ~] # docker exec -it 55a10d72564e bash ## Pas démarré donc je ne peux pas obtenir de 
réponse d'erreur du démon: le conteneur 55a10d72564eecca7e11d9ed1d5950109e972a51a2c717102e7eca5a5d52f6df n'est pas en cours d'exécution

  • Démarrez le conteneur : docker start container_id // Après avoir démarré le conteneur, vous pouvez utiliser docker ps pour vérifier que s'il y a start, il y a stop et redémarrer

[root @ awei-01 ~] # docker start 55a10d72564e 
55a10d72564e 
[root @ awei-01 ~] # docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
55a10d72564e centos6 "bash" Il y a environ une minute Up 11 secondes elated_kepler

 ps: L'exécution du docker que nous avons utilisée auparavant équivaut à créer puis à démarrer

  • Entrez dans le conteneur et ne l'exécutez plus en arrière-plan: docker run -it centos bash

Si vous quittez le conteneur directement, docker ps ne pourra pas le voir car il ne fonctionnera pas en arrière-plan sans l'option d. Si vous quittez avec ctrl + d, vous quitterez directement. De cette façon, nous pouvons exécuter certaines commandes dans un terminal virtuel. Utilisez la commande exit ou ctrl d pour quitter le bash, et le conteneur s'arrêtera après avoir quitté.

  • Exécutez le conteneur en arrière-plan : docker run -d plus l'option "-d" permet au conteneur de s'exécuter en arrière-plan

     Vous pouvez également écrire une boucle infinie (qui est rarement utilisée): docker run -d centos bash -c "while:; do echo" 123 "; sleep 2; done"

  • Nom personnalisé pour démarrer le conteneur : docker run --name  Nom personnalisé  -itd  pour démarrer l'image  bash //

[root @ awei-01 ~] # docker run --name awei -itd centos6 bash 
d8ba554eae2df6254945e3ce21b09d9f252fba98fba13872ea31c69240ae364c 
[root @ awei-01 ~] # docker ps 
CONTAINER ID 
centea COMMANDATED COMMANDATED 124 STAT il y a 124 secondes. awei 
55a10d72564e centos6 "bash" il y a 22 minutes Jusqu'à 20 minutes elated_kepler

   Peut entrer directement dans le conteneur par son nom

[root @ awei-01 ~] # docker exec -it awei bash 
[root @ d8ba554eae2d /] #
  • Démarrez le conteneur et exécutez la commande : docker run --rm -it centos bash -c "sleep 30" // - rm peut supprimer le conteneur directement après avoir quitté, ici le conteneur quittera après avoir exécuté la commande

  • Afficher les journaux de conteneur : docker logs container_id peut obtenir les informations d'historique d'exécution du conteneur, l'utilisation est la suivante 

docker attach peut entrer dans un conteneur s'exécutant en arrière-plan, tel que

docker attach container_id // Mais la commande attach n'est pas facile à utiliser. Par exemple, si nous voulons quitter le terminal, nous devons quitter, pour que le conteneur sorte. Il existe un autre moyen

  • Entrez dans le conteneur

docker exec -it container_id bash // Vous pouvez ouvrir temporairement un terminal virtuel, et après la sortie, le conteneur est toujours en cours d'exécution

  • Supprimer le conteneur

docker rm container_id // container_id est vérifié lorsque ps, vous pouvez donc supprimer le conteneur, s'il s'agit d'un conteneur en cours d'exécution, vous pouvez ajouter -f

  • Conteneur d'exportation

docker export container_id> file.tar // Exporte le conteneur, qui peut être migré vers d'autres machines et doit être importé

  • Conteneur d'importation

cat file.tar | docker import-aming_test // Cela générera un miroir de aming_test


Gestion de l'entrepôt Docker

Parce que peu importe si vous tirez le miroir ou poussez le miroir de téléchargement, vous irez à l'entrepôt public officiel.Pour la confidentialité, nous pouvons créer notre propre entrepôt privé.

Créez une méthode d'entrepôt privé:

  • Téléchargez l'image de registre: docker pull registry // registy est une image officielle fournie par docker, qui peut exécuter un conteneur, et nous pouvons l'utiliser pour créer un entrepôt privé docker local.

  • Démarrez l'image de registre en tant que conteneur: docker run -d -p 5000: 5000 registry // - p mappera le port du conteneur vers l'hôte,: le côté gauche est le port d'écoute de l'hôte et le côté droit est le port d'écoute du conteneur

[root @ localhost ~] # docker run -d -p Registre 5000: 5000 
AVERTISSEMENT: le transfert IPv4 est désactivé. Le réseautage ne fonctionnera pas. 
b31501bfcb453be61b2d0da0589d9c0fbc36c4a954967deeb86d112552bc99c2 
[root @ localhost ~] # docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
b31501bfcb45 registre "/entrypoint.sh / etc ...
  • Visitez l'entrepôt : curl 127.0.0.1:5000/v2/_catalog // Cet entrepôt est temporairement vide, vous devez télécharger une image miroir

[root @ localhost ~] # curl 127.0.0.1:5000/v2/_catalog 
{"dépôts": []}

Comment télécharger l'image dans l'entrepôt privé:

  • Commencez par marquer l'image que vous souhaitez télécharger

Format: nom de l'image de balise docker à baliser IP hôte: port d'hôte / nom de balise

docker tag centos6 192.168.238.128:5000/centos6  // Marquez le tag, vous devez avoir l'ip: port de l'entrepôt privé

  • Poussez l'image marquée vers l'entrepôt privé

docker push 192.168.238.128:5000/centos6

À ce stade, il ne réussira pas et signalera une erreur (car il souhaite utiliser l'adresse https par défaut)

[root @ localhost ~] # docker push 192.168.238.128:5000/centos6 
Utilisation de la balise par défaut: latest 
Le push fait référence au référentiel [192.168.238.128:5000/centos6] 
Obtenez https://192.168.238.128:5000/v2/: http : le serveur a donné une réponse HTTP au client HTTPS

Changez le fichier de configuration et changez vi /etc/docker/daemon.json// aux paramètres suivants (l'adresse de l'entrepôt privé, car il utilise https par défaut mais nous voulons utiliser http)

{"insecure-registries": ["192.168.18.128:5000"]}

重启 docker : systemctl redémarrer docker

Registre de démarrage: id du registre de démarrage de docker 

Poussez à nouveau

docker push 192.168.238.128:5000/centos

[root @ localhost ~] # docker push 192.168.238.128:5000/centos6 
Utilisation de la balise par défaut: latest 
Le push se réfère au référentiel [192.168.238.128:5000/centos6] 
0a2f11f7b1ef: Pushed  
latest: digest: sha256: aaa6c8af8eaa472d660667275f798bdc679bf

curl 127.0.0.1:5001/v2/_catalog // Vous pouvez afficher l'image poussée

[root @ localhost ~] # curl 127.0.0.1:5000/v2/_catalog 
{"référentiels": ["centos6"]}
  • D'autres hôtes téléchargent et utilisent des méthodes d'entrepôt privé :

Vous pouvez également télécharger l'image que vous venez de télécharger dans votre propre entrepôt sur d'autres hôtes. D'abord, le serveur doit avoir un programme docker, puis l' hôte du groupe d'extraction docker  ip: port / nom de l'image.

Configurez l'adresse IP du fichier de configuration /etc/docker/daemon.json, configurez-le en tant que serveur d'entrepôt, puis vous pouvez le récupérer


Gestion des données Docker

Parce que votre conteneur est ouvert par un miroir, lorsque vous écrivez de nouvelles données ou mettez à jour de nouvelles données dans le conteneur, vous supprimez le miroir ou fermez les données et supprimez-les, ce qui est un certain risque

Solution: vous pouvez monter un répertoire de la machine hôte dans le conteneur, puis il écrira sur le disque de la machine hôte lorsque vous écrivez des données

  • Montez le répertoire local sur le conteneur

docker run -tid -v /data/:/data centos bash //-v 用来指定挂载目录,:前面的/data/为宿主机本地目录,:后面的/data/为容器里的目录,会在容器中自动创建

  • 挂载数据卷

其实我们挂载目录的时候,可以指定容器name,如果不指定就随机定义了。比如上面我们没有指定,它就生成了一个名字为relaxed_franklin,这个名字可以使用命令 docker ps  看最右侧一列

我们开启一个新的镜像,并指定一个之前可共享的容器:

docker run -itd --volumes-from 共享容器名 要启动的容器名 bash

--volumes-from:指定共享的容器名,其实就是一个数据卷容器 relaxed_franklin:容器名 aming123:新开启的容器叫什么

这样,我们使用aming123镜像创建了新的容器,并且使用了 relaxed_franklin  容器的数据卷

  •  创建数据卷容器

有时候,我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,然后其他容器直接挂载该数据卷。

首先建立数据卷容器

-v选项:共享目录

docker run -itd -v /data/ --name testvol centos  bash  //注意这里的/data/是容器的/data目录,并非本地的/data/目录。这样加-v选项意思就是把容器的data目录共享出来 

然后让其他容器挂载该数据卷

docker run -itd  --volumes-from testvol aming123 bash

小结:-v选项的两种用法

第一种是挂载映射的作用:-v /data/:/data 把宿主机的data目录挂载到容器里的data目录上

第二种是把容器的某个盘共享出来:-v /data/ 把容器的data目录共享出来当数据卷使用

分享的目录是什么,那挂载的目录就是什么,我分享的是data目录,如果我其中一个容器是data,另一个想是home怎么办,做软连接

软连接:ln -s /data/ /home/


Docker数据卷的备份与恢复

适用于数据卷容器没有映射宿主机目录的情况下

备份

创建目录:mkdir /data/backup (宿主机)

docker run --volumes-from testvol -v  /data/backup/:/backup centos tar cvf  /backup/data.tar /data/

说明:首先我们需要使用testvol数据卷新开一个容器,同时我们还需要把本地的/vol_data_backup/目录挂载到该容器的/backup下,这样在容器中/backup目录里面新建的文件,我们就可以直接在/data/backup/目录中看到了。 然后再把/data/目录下面的文件打包到成data.tar文件放到/backup目录下面。

恢复

思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。

新建数据卷容器:docker run -itd -v /data/ --name testvol2 centos bash

挂载数据卷新建容器,并解包:docker run --volumes-from testvol2  -v /data/backup/:/backup centos tar xf /backup/data.tar

image.png

1机器共享出/data/目录

2机器在开启的时候使用1镜像创建了新的容器,挂载了1机器的数据卷那么2机器上也会有1机器上共享出来的/data/目录

2机器在自己挂在一个目录(/backup)到宿主机上的一个目录(/data/backup/)

然后2机器把之前/data/目录的数据拷贝到/backup/下,/backup/自然也会映射到宿主机的/data/backup/


Je suppose que tu aimes

Origine blog.51cto.com/12922638/2591043
conseillé
Classement