编程知识 cdmana.com

Docker Knowledge point collation

Un.、Machine virtuelleVSConteneur

  dockerOrganisation des points de connaissance_docker

  Un.)Les inconvénients de la machine virtuelle et la raison pour laquelle le conteneur

  • Utilisation excessive des ressources
  • Plusieurs étapes redondantes,Fastidieux
  • Démarrage lent

  Parce que la machine virtuelle a les défauts ci - dessus,Et donc,LinuxUne autre technologie de virtualisation a été développée:LinuxConteneur(Linux container,Abréviations:LXC).

  LinuxLe conteneur ne simule pas un système d'exploitation complet ,Au lieu de cela, isoler le processus.

  J'ai le conteneur.,Vous pouvez emballer toutes les données nécessaires au fonctionnement du logiciel dans un conteneur isolé.Le conteneur est différent de la machine virtuelle,Il n'est pas nécessaire de grouper un ensemble complet de systèmes d'exploitation,Seules les ressources et les paramètres de la Bibliothèque nécessaires au fonctionnement du logiciel sont nécessaires.

  2.)dockerLa différence avec les machines virtuelles

  1、Machines virtuelles traditionnelles

  La technologie traditionnelle de la machine virtuelle est un ensemble complet de matériel virtuel après,Pour faire fonctionner un système d'exploitation complet,Exécuter à nouveau le processus d'application requis sur ce système

1、Principalement parce que chaque machine virtuelle doit exécuter son propre ensemble de processus système,Il en résulte une perte supplémentaire de ressources informatiques en plus de la consommation du processus composant.

2、Différentes machines virtuelles qui ont des systèmes d'exploitation complètement différents

3、Sous la machine virtuelle se trouve le système d'exploitation de l'hôte hôte hôte avec un hyperviseur,Il divise les ressources matérielles physiques en petites parties de ressources matérielles virtuelles,Pour être utilisé par le système d'exploitation de chaque machine virtuelle.
Attention!: Il existe deux types de gestionnaires :Le premier type de gestionnaire n'utilise pas l'hôte hôteOS, Et le deuxième type 
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

 

  2、Conteneur

  Le processus d'application dans le conteneur fonctionne directement dans le noyau de l'hôte hôte hôte, Le conteneur n'a pas son propre noyau , Et il n'y a pas de virtualisation matérielle  .Les conteneurs sont donc plus légers que les machines virtuelles traditionnelles.    

  Chaque conteneur est séparé les uns des autres,Chaque conteneur a son propre système de fichiers, Les processus entre les conteneurs n'interagissent pas ,Capable de distinguer les ressources informatiques,Faible couplage.

  Docker L'installation se fait automatiquement à host Créer trois réseaux sur :bridge、hostEtnone

    • none Le réseau n'est rien. . Les conteneurs suspendus sous ce réseau, sauf lo, Aucune autre carte réseau . Lors de la création du conteneur ,Peut passer --network=none Spécifier l'utilisation none Réseau.
    • Connectez - vous à host Partage de conteneurs pour le réseau Docker host Pile réseau pour , Configuration du réseau du conteneur et host Exactement la même chose..Peut passer --network=host Spécifier l'utilisation host Réseau.
      • docker host Le plus grand avantage du réseau est la performance ,Si le conteneur a des exigences élevées en matière d'efficacité de transmission du réseau,Vous pouvez choisirhostRéseau
    • Docker Lors de l'installation, un Nommé docker0 De linux bridge.Si non spécifié--network,Conteneur créé Par défaut  docker0 Allez..
      • Utiliserbrctl showMontre - le.
 Conteneur plus léger ,Il permet d'exécuter plus de composants sur le même matériel.

Un conteneur n'est qu'un seul processus isolé fonctionnant sur l'hôte hôte hôte, Consommer uniquement les ressources consommées par le conteneur d'application , Ne consommera pas les frais généraux d'autres processus 

.Plusieurs conteneurs exécutent complètement les appels système du même noyau fonctionnant sur l'hôte hôte hôte,Ce noyau est le seul qui fonctionne sur le système d'exploitation hôtex86 Noyau de la directive .CPUIl n'y a pas besoin de faire plus de virtualisation de la virtualisation de la machine virtuelle.
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
     1)Heure de début

  docker Le démarrage est en secondes , Le démarrage traditionnel de la machine virtuelle est en minutes ;En plusdocker Est une version compacte 、 Petite taille très concentrée LinuxSystème. 

  • dockerPar analogieGitLe fonctionnement du concept de conception pour faciliter l'accès des utilisateurs、 Distribuer et mettre à jour les miroirs d'application , Réutilisation du stockage ,Mise à jour progressive
  • dockerAdoptiondockerfileSoutenir des mécanismes flexibles de création et de déploiement automatisés,Améliorer la productivité, Normalisation des processus
    2) Applications fonctionnant dans différents environnements

  dockerOrganisation des points de connaissance_Système de fichiers_02dockerOrganisation des points de connaissance_linux_03

   3、dockerComparison of Container Technology with Traditional Virtual Machine Technology

    dockerOrganisation des points de connaissance_linux_04

 
Caractéristiques Conteneur Machine virtuelle
Vitesse de démarrage Allez,Secondes Doucement,Minute level
Performance Presque Native Faible
Coût de la mémoire Très petit Plus
Espace disque occupé Petit,En généralMB Très gros.,En généralGB
Densité de fonctionnement Prise en charge autonome de milliers de conteneurs En général, des dizaines
État de fonctionnement Fonctionne directement sur le noyau de l'hôte hôte hôte , Différents conteneurs partagent le même LinuxNoyau Run onHypervisorAllez.
Isolement Isolement total Isolement total
Mobilité Excellent. En général
Utilisation des ressources Élevé Faible

   Contenu isolé:Système de fichiers、Réseau、PID、etc、usr、UTS(UTS L'espace de noms est LinuxNoyauNamespace(Espace de noms) Un sous - système de , Utilisé principalement pour compléter l'alignement des conteneurs HOSTNAMEEtdomainIsolement, Enregistrer le nom du noyau en même temps 、Version、Et le type d'architecture sous - jacente)

   Avantages des machines virtuelles : Il offre un environnement complètement isolé ,Parce que chaque machine virtuelle fonctionne sur son propre noyau;

  Conteneur: Il appelle un noyau , C'est dangereux.

  Suggestion:

  1. Si vos ressources matérielles sont limitées , Alors quand vous avez un petit nombre de processus à isoler , La machine virtuelle peut être une option
  2. Pour exécuter un grand nombre de processus isolés sur la même machine,Le conteneur est un meilleur choix en raison de sa faible consommation

  4、Pourquoidocker Plus rapide que la machine virtuelle ?

  La machine virtuelle exécute son propre ensemble de services système, Et les conteneurs ne le font pas. ,Parce qu'ils fonctionnent tous sur le même système d'exploitation.(L'exécution d'un conteneur ne démarre pas comme une machine virtuelle, Son processus peut commencer très rapidement )

  1. docker Il y a moins de couches d'abstraction que les machines virtuelles .Parce quedockerPas besoin.hypervisor Virtualisation des ressources matérielles ,En coursdockerLes programmes sur le conteneur utilisent directement les ressources matérielles de la machine physique réelle.Donc, danscpu、 Utilisation de la mémoire docker Il y aura des avantages évidents en termes d'efficacité ;
  2. docker Utilise le noyau de l'hôte hôte ,Sansguest os. Donc quand vous construisez un conteneur ,dockerIl n'est pas nécessaire de recharger le noyau d'un système d'exploitation comme une machine virtuelle.Cela évite de charger le noyau du système d'exploitation pour renvoyer un processus de ressources plus long, Lorsque vous créez une nouvelle machine virtuelle , Le logiciel de machine virtuelle doit être chargé guest os, Retour à la nouvelle procédure en minutes .EtdockerEn raison de l'utilisation directe du système d'exploitation de l'hôte hôte, Le processus de chargement est omis , Donc un nouveau docker Le conteneur ne prend que quelques secondes .

  Trois) Mise en œuvre du mécanisme d'isolement des conteneurs

dockerOrganisation des points de connaissance_Espace de noms_05 dockerOrganisation des points de connaissance_Espace de noms_06
tree -L 1
.
|-- anaconda-post.log
|-- bin -> usr/bin
|-- boot
|-- dev
|-- etc
|-- home
|-- lib -> usr/lib
|-- lib64 -> usr/lib64
|-- media
|-- mnt
|-- opt
|-- proc
|-- root
|-- run
|-- sbin -> usr/sbin
|-- srv
|-- sys
|-- tmp
|-- usr
`-- var
     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
Table des matières

  1、Restrictions

   Deux mécanismes sont disponibles :
Le premier est isolementnamespaceEspace de noms, Il permet à chaque processus de ne voir que sa propre vue du système(Documentation、Processus、Interface réseau、 Nom de l'hôte, etc. );
Le deuxième est RestrictionscgroupsGroupe de contrôle (control groups), Il limite la quantité de ressources que le processus peut utiliser  (CPU、 Mémoire、 Largeur de bande du réseau, etc.). 
    
  • 1.
  • 2.
  • 3.

  Par défaut,ChaqueLinux Le système n'avait initialement qu'un seul espace de noms . Toutes les ressources du système ( Comme le système de fichiers 、UtilisateursID、 Interface réseau, etc. ) Appartient à cet espace de noms . Mais vous pouvez créer des espaces de noms supplémentaires , Et organiser les ressources entre eux . Pour un processus , Vous pouvez l'exécuter dans un espace de noms .Le processus ne verra que les ressources sous le même espace de noms.Bien sûr., Il existe plusieurs types d'espace de commande .Donc un processus n'appartient pas seulement à un espace de noms,Et un espace de noms de chaque type.

    1)Linux Implémenté dans le noyau 7 Différents types d'espaces de noms
Nom        Macro - définition(Paramètres d'appel du système)       Contenu isolé 
Cgroup      CLONE_NEWCGROUP              Cgroup root directory (since Linux 4.6)
IPC         CLONE_NEWIPC                 Sémaphore、 Mise en file d'attente des messages et mémoire partagée System V IPC, POSIX message queues (since Linux 2.6.19)
Network     CLONE_NEWNET                 Matériel de réseau、 Pile réseau 、Ports, etc.Network devices, stacks, ports, etc. (since Linux 2.6.24)
Mount       CLONE_NEWNS                  Point de montage(Système de fichiers)Mount points (since Linux 2.4.19)
PID         CLONE_NEWPID                 Numéro du processusProcess IDs (since Linux 2.6.24)
User        CLONE_NEWUSER                Utilisateurs et groupes d'utilisateursUser and group IDs (started in Linux 2.6.23 and completed in Linux 3.8)
UTS         CLONE_NEWUTS                  Nom d'hôte et nom de domaine Hostname and NIS domain name (since Linux 2.6.19)
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
       Rôle des différents types d'espaces de noms
  1. mount(mnt): Chaque processus existe dans un mount NamespaceÀ l'intérieur,mount NamespaceFournit une vue hiérarchique des fichiers pour le processus. Si ce n'est pas réglé flag, Les processus enfant et parent partageront un mount Namespace, Appel subséquent du sous - processus mountOuumount Affectera tous les Namespace Processus en cours . Si le Sous - processus est dans un mount NamespaceÀ l'intérieur,Pour appelermountOuumount Créer une nouvelle vue hiérarchique des fichiers .
  2. process ID(pid):linux Gérer les numéros de processus par l'espace de noms , Même processus , Différents numéros de processus dans différents espaces de noms ! L'espace de noms de processus est une structure parent - enfant , L'espace enfant est visible pour l'espace parent .
  3. network(net):Network Namespace.Fournit une vue entièrement indépendante de la pile de protocole réseau pour le processus. Y compris l'interface du périphérique réseau ,IPv4EtIPv6Pile de protocole,IPTable de routage, Règles du pare - feu ,socketsAttendez un peu!.UnNetwork Namespace Fournit un environnement réseau indépendant , Comme un système autonome.
  4. inter-process communication(ipc):Ressources nécessaires pour isoler les communications inter - processus( System V IPC, POSIX message queues),PIDEspace de noms etIPC Les espaces de noms peuvent être combinés ,Le mêmeIPCLes processus dans l'espace de noms peuvent se voir, Autoriser l'interaction , Différents processus spatiaux ne peuvent pas interagir
  5. UTS: Utilisé pour isoler les noms d'hôtes
  6. user ID(user): Pour isoler les utilisateurs

  Chaque espace de noms est utilisé pour isoler un ensemble spécifique de ressources.Par exemple:UTSL'espace de noms détermine quels noms d'hôtes et de domaines les processus fonctionnant dans l'espace de noms peuvent voir. En envoyant deux UTS Espace de noms pour une paire de processus ,Vous pouvez leur montrer différents noms d'hôtes locaux.En d'autres termes,,Ces deux processus sont comme s'ils fonctionnaient sur deux machines différentes( C'est juste pour le nom d'hôte. )

  Encore une fois, À quoi appartient un processus networkL'espace de noms détermine l'interface réseau que l'application en cours d'exécution peut voir.Chaque interface réseau appartient à un espace de noms,Mais vous pouvez passer d'un espace de noms à un autre.Chaque conteneur utilise son propre espace de noms réseau,Donc chaque conteneur ne voit qu'un ensemble de ses propres interfaces réseau.

  2、Ressources limitées

   Effectuer sur le conteneur Restrictions.Empêcher l'utilisation abusive et même l'épuisement illimité des ressources sur l'hôte hôte hôte.Et Linux Cgroups C'est Linux Une fonctionnalité importante du noyau utilisée pour définir les limites de ressources d'un processus.

  Linux Cgroups Son nom complet est Linux Control Group. Son rôle principal ,Limite la limite des ressources qu'un groupe de processus peut utiliser,Y compris: CPU、Mémoire、Disque、Largeur de bande du réseau, etc.

  In Linux Moyenne,Cgroups L'interface d'exploitation exposée à l'utilisateur est le système de fichiers,C'est - à - dire qu'il est organisé en fichiers et répertoires dans le système d'exploitation /sys/fs/cgroup Sous le chemin.In Ubuntu 16.04 Dans la machine ,Je peux l'utiliser. mount Les instructions les montrent , Cette commande est

mount -t cgroup 
cpuset on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cpu on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu)cpuacct on /sys/fs/cgroup/cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct)
blkio on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
memory on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
...
     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

  Je vois.,In /sys/fs/cgroup Il y a beaucoup de choses comme cpuset、cpu、 memory Ces sous - répertoires , Aussi appelé sous - système .C'est tout ce que ma machine peut être Cgroups Types de ressources restreintes . Sous le type de ressources correspondant au sous - système ,Vous pouvez voir comment ces ressources peuvent être limitées.Par exemple,,C'est exact. CPU Pour le Sous - système ,Nous pouvons voir les profils suivants, Cette directive est :

ls /sys/fs/cgroup/cpu
cgroup.clone_children 
cpu.cfs_period_us 
cpu.rt_period_us 
cpu.shares notify_on_releasecgroup.procs 
cpu.cfs_quota_us 
cpu.rt_runtime_us 
cpu.stat 
tasks
      
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

   Principaux documents produits ci - dessus cfs_periodEtcfs_quota, Peut être utilisé pour limiter le processus à une longueur de cfs_period Pendant un certain temps , Ne peut être affecté qu'à un total de cfs_quota De CPU Temps.

  Et comment utiliser un tel profil?
  Vous devez créer un répertoire sous le Sous - système correspondant,Par exemple,, Nous entrons maintenant /sys/fs/cgroup/cpu Sous la table des matières:

[email protected]:/sys/fs/cgroup/cpu$ mkdir container
[email protected]:/sys/fs/cgroup/cpu$ ls container/
cgroup.clone_children 
cpu.cfs_period_us 
cpu.rt_period_us cpu.shares 
notify_on_releasecgroup.procs 
cpu.cfs_quota_us 
cpu.rt_runtime_us 
cpu.stat tasks
       
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

   Ce répertoire s'appelle un “Groupe de contrôle”.Vous verrez, Le système d'exploitation sera créé dans votre container Sous la table des matières,Générer automatiquement le fichier de limitation des ressources correspondant à ce sous - système.

  Maintenant, Nous effectuons un tel script en arrière - plan

$ while : ; do : ; done &
[1] 226
       
  • 1.
  • 2.

  Apparemment., Il a fait un cycle mort , Peut mettre l'ordinateur CPU Mange 100%, Selon sa sortie ,Nous pouvons voir le numéro de processus que ce script exécute en arrière - plan(PID)- Oui. 226.

  Voilà.,Nous pouvons utiliser top Pour confirmer CPU Est - ce qu'il a été battu? :

$ top
%Cpu0 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
        
  • 1.
  • 2.

   Comme vous pouvez le voir dans la sortie ,CPU Le taux d'utilisation de 100% C'est(%Cpu0 :100.0 us).

  Et maintenant,Nous pouvons voir container Fichiers dans le Répertoire,Tu vois? container Dans le Groupe de contrôle CPU quota Il n'y a pas de limite. (C'est - à - dire::-1),CPU period Par défaut 100 ms(100000 us):

 
$ cat /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us 
-1
$ cat /sys/fs/cgroup/cpu/container/cpu.cfs_period_us 
100000
        
  • 1.
  • 2.
  • 3.
  • 4.

  Et puis...,Nous pouvons fixer des limites en modifiant le contenu de ces fichiers.

  Par exemple,,Vers container Dans le Groupe cfs_quota Écrire un fichier 20 ms(20000 us):

$ echo 20000 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us
        
  • 1.

   En combinaison avec l'introduction précédente , Vous devriez être capable de comprendre ce que cela signifie. , Cela signifie que chaque 100 ms Dans le temps,Les processus restreints par ce groupe de contrôle ne peuvent être utilisés que 20 ms De CPU Temps,Cela signifie que ce processus ne peut être utilisé que pour 20% De CPU Largeur de bande.

Et puis..., Nous avons réduit le processus PID Écrire container Dans le Groupe tasks Documentation,Les paramètres ci - dessus seront en vigueur pour le processus:

$ echo 226 > /sys/fs/cgroup/cpu/container/tasks 
        
  • 1.

  Nous pouvons utiliser top Vérifiez les instructions. :

$ top
%Cpu0 : 20.3 us, 0.0 sy, 0.0 ni, 79.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
        
  • 1.
  • 2.

  Je vois.,Informatique CPU L'utilisation a immédiatement chuté 20%(%Cpu0 : 20.3 us).

  Sauf CPU Hors sous - système ,Cgroups Chaque sous - système a sa propre capacité de limitation des ressources,Par exemple,:

  • blkio:Pour​​​Bloc​​​Mise en place​​​En attente.​​​Mise en place​​​Allez​​​I/O Limite​​​Faire, Généralement utilisé pour les disques et autres dispositifs
  • cpuset: Assigner un processus distinct CPU Noyaux et noeuds de mémoire correspondants
  • memory: Définir les limites d'utilisation de la mémoire pour le processus

  Linux Cgroups Le design est plus facile à utiliser , Une compréhension simple et grossière ,C'est une combinaison d'un répertoire de sous - systèmes et d'un ensemble de fichiers limités par les ressources. Pour Docker Attendez. Linux Pour les projets de conteneurs , Ils ont juste besoin d'être sous chaque sous - système , Créer un groupe de contrôle pour chaque conteneur ( Créer un nouveau répertoire ), Puis après le démarrage du processus conteneur , Pour mettre ce processus PID Rempli dans le Groupe de contrôle correspondant tasks Dans le dossier. .

  Et quant aux valeurs à remplir dans les fichiers de ressources sous ces groupes de contrôle, Par l'utilisateur docker run Paramètre spécifié pour , Comme une telle commande :
$ docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash
       
  • 1.

   Après le démarrage de ce conteneur ,Nous pouvons voir Cgroups Sous le système de fichiers ,CPU Dans le Sous - système ,“docker”Le contenu du fichier de limitation des ressources de ce groupe de contrôle confirme:

$ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_period_us 
100000
$ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_quota_us 
20000
       
  • 1.
  • 2.
  • 3.
  • 4.

  Ça veut dire que Docker Conteneur, Ne peut être utilisé que 20% De CPU Avec

  Quatre) Création de conteneurs

  1、 Exigences relatives à la création de conteneurs

  • Noyau
  • runtime: Où le conteneur fonctionne réellement .runtime Besoin de suivre le système d'exploitation kernlTravailler en étroite collaboration, Fournir un environnement opérationnel pour les conteneurs ,lxc、runcEtrkt Sont actuellement les trois principaux conteneurs runtime
  • Outils de gestion:runc Les outils de gestion de docker engine.docker engineY compris les coulissesdeamonEtcliDeux parties. Nous avons souvent mentionné docker, Généralités docker engineZ

   dockerOrganisation des points de connaissance_docker_07

  2、Limites des ressources du conteneur

 

#Limite de mémoire
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M

1、-m Ou --memory: Définir la limite d'utilisation de la mémoire ,Par exemple 100M, 2G.

2、--memory-swap:Paramètres Mémoire+swap  Limite d'utilisation .

3、Par défaut, Les deux ensembles de paramètres ci - dessus sont:  -1, C'est - à - dire la mémoire du conteneur et  swap  Il n'y a pas de limite à l'utilisation de 

4、--vm 1:Démarrage 1  Fils de travail de mémoire 

5、--vm-bytes 280M: Assigner par fil  280M Mémoire.

progrium/stressPour le nom du miroir,Si--memory-swapNon.,Par défautmemoryDeux fois plus.

# CPURestrictions
Docker Peut passer -c Ou --cpu-shares  Définir l'utilisation du conteneur  CPU Poids.Si non spécifié,La valeur par défaut est 1024.

 Différent de la limite de mémoire ,Adoption -c Set cpu share Ce n'est pas CPU  Nombre absolu de ressources , Mais une valeur de poids relative . Un conteneur peut éventuellement être attribué à  CPU  Les ressources dépendent  cpu share  Tous les conteneurs  cpu share  Proportion de la somme 


# block IOPoids

Block IO Est une autre ressource qui peut limiter l'utilisation du conteneur.Block IO  Se réfère à la lecture et à l'écriture du disque ,docker  Vous pouvez définir les poids en 、Restrictions bps Et iops Pour contrôler la largeur de bande du disque de lecture / écriture du conteneur

Par défaut, Tous les conteneurs peuvent lire et écrire des disques sur un pied d'égalité ,Peut être réglé par --blkio-weight  Paramètres pour modifier le conteneur  block IO Priorité.
--blkio-weight Avec --cpu-shares Similaire, La valeur de poids relative est définie ,Par défaut 500.Dans l'exemple suivant,container_A  La largeur de bande du disque de lecture / écriture est  container_B Deux fois plus..

# Restrictions bps Et iops    

bps - Oui. byte per second, Quantité de données lues et écrites par seconde .

iops - Oui. io per second,Par seconde IO Nombre de fois.

 Les paramètres suivants peuvent être utilisés pour contrôler  bps Et iops:

--device-read-bps, Limiter la lecture d'un appareil  bps.

--device-write-bps, Limite l'écriture d'un appareil  bps.

--device-read-iops, Limiter la lecture d'un appareil  iops.

--device-write-iops, Limite l'écriture d'un appareil  iops.   
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.

                                                                                                                                                                                                                                                                                                                                                                                                         

2.、docker Et la virtualisation

  Un.) Aperçu de la virtualisation

   La technologie de virtualisation est un concept universel , Différentes interprétations dans différents domaines .Dans le domaine informatique, Se réfère généralement à la virtualisation informatique , Ou virtualisation du serveur .

   La virtualisation est une technologie de gestion des ressources , Est de transférer les différentes ressources physiques de l'ordinateur ,Comme un serveur、Réseau、 Mémoire et stockage, etc. , Abstrait 、 Rendu après conversion ,Briser les obstacles indivisibles des éléments structuraux solides,Permet à l'utilisateur d'appliquer ces ressources d'une meilleure manière que la configuration originale.

   Le noyau de la virtualisation est l'abstraction des ressources ,Le but est souvent d'exécuter plusieurs systèmes ou applications simultanément sur le même hôte. Afin d'améliorer l'utilisation des ressources , Et réduit les coûts 、 Avantages tels que la gestion facile et la tolérance aux pannes et aux catastrophes .

  Un.) Classification de la virtualisation

  javascript:void(0)

  docker Et autres technologies des conteneurs ,Tout appartient au domaine de la virtualisation des systèmes d'exploitation.La caractéristique la plus importante de la virtualisation du système d'exploitation est qu'il n'y a pas besoin desupervisorSoutien.

  L'approche traditionnelle consiste à réaliser la virtualisation au niveau du matériel,Nécessite une application de gestion de machine virtuelle supplémentaire et une couche système d'exploitation de machine virtuelle.dockerLes conteneurs sont virtualisés au niveau du système d'exploitation, Réutiliser directement le système d'exploitation de l'hôte local , Donc plus léger .

Trois、docker Principaux points de connaissance

  Un.)docker Description de la version pour

  dockerVersionCE C'est la version open source. ,EE C'est Enterprise. .

  De2017 Début du premier trimestre de l'année ,docker Le numéro de version suit YY.MM-xxFormat,Similaire àUbuntuAttendre le projet.Par exemple 2018Année6 La première version communautaire publiée le mois est 18.06.0-ce

  2.)docker Nature du récipient

   Une opération en cours Docker Conteneur, En fait, c'est un avec plus d'un activé. Linux Namespace Processus d'application pour , Et la quantité de ressources que ce processus peut utiliser , Puis Cgroups Limites configurées .C'est aussi un concept très important dans la technologie des conteneurs,C'est - à - dire::Le conteneur est un“Processus unique”Modèle.

  • Le conteneur est en fait Linux Le prochain processus spécial
  • dockerLe conteneur passenamespace Mise en œuvre de l'isolement des processus ,Adoptioncgroup Limitation des ressources
  • dockerMiroir(rootfs)Est tous les fichiers et répertoires d'un système d'exploitation à l'exclusion du noyau,docker Le miroir est le noyau de l'hôte partagé
  • docker Le miroir est monté en mode primaire et secondaire ,Tous les ajouts et suppressions n'ont d'effet que sur la couche du conteneur,Mais le même fichier écrasera la couche suivante,Cette approche est également appelée“copy-on-wtite”

  Trois)docker Trois éléments

  1、Miroir(image)

  Un Lire seulement Modèle pour.  Le miroir peut être utilisé pour créer dockerConteneur, Un miroir peut créer de nombreux conteneurs  .

   Caractéristiques du miroir : Les miroirs sont en lecture seule.Lorsque le conteneur démarre,Une nouvelle couche inscriptible est chargée en haut du miroir. Cette couche est appelée couche de conteneur , Les couches sous la couche conteneur sont toutes des couches miroir .

  2、Conteneur(container)

   Une ou plusieurs applications fonctionnant indépendamment ..Un conteneur est une instance d'exécution créée avec un miroir(Par rapport àPython Concepts de classes et d'objets dans ).

  Il peut être activé、C'est parti.、Arrêtez!、Supprimer. Chaque conteneur est isolé les uns des autres , Plate - forme sécurisée .

  Le conteneur peut être considéré comme une version simpleLinuxEnvironnement (Y compris:root Permissions du nom d'utilisateur 、 Espace de processus 、 Espace utilisateur et cyberespace, etc. ) Et les applications qui y fonctionnent .

  La définition et le miroir du conteneur sont presque identiques,C'est aussi une vision unifiée d'un tas de couches, La seule différence est que la couche supérieure du conteneur est lisible.

  Quatre)Entrepôt(repository)

  Entrepôt(repository)Et serveur d'enregistrement d'entrepôt(registry)Il y a une différence.Il y a souvent beaucoup d'entrepôts sur le serveur d'enregistrement d'entrepôt,Chaque entrepôt contient de nombreux autres miroirs, Chaque miroir a une étiquette différente (tag).

   L'entrepôt est divisé en entrepôt ouvert (public) Et des entrepôts privés (private)Deux formes.

  Cinq)UnionFS(Système de fichiers commun)

  UnionFS(Système de fichiers commun):unionSystème de fichiers(unionFS)C'est une sorte de stratification、Système de fichiers léger et haute performance,Il soutient Les modifications apportées au système de fichiers sont soumises en couches superposées à la fois ,Vous pouvez également monter différents répertoires sous le même système de fichiers virtuel.

  unionLe système de fichiers estdockerLa base du miroir.Le miroir peut être hérité par couches.Basé sur le miroir de base(Pas de miroir parent), Vous pouvez faire une variété de miroirs d'application . 

  Caractéristiques:Charger plusieurs systèmes de fichiers à la fois, Mais de l'extérieur, ,Un seul système de fichiers peut être vu,Le chargement fédéré superpose les couches du système de fichiers,.De cette façon, le système de fichiers final contiendra tous les fichiers et répertoires sous - jacents 

  Six)dockerPrincipe de chargement

  dockerLe miroir de est en fait composé d'un système de fichiers couche par couche,Ce niveau de système de fichiers est appelé système de fichiers fédéré(unionFS). 

  bootfs(boot file system)Comprend principalement:bootloaderEtkernel,bootloaderPrincipalement le chargement de démarragekernel,linuxIl est chargé au démarragebootfsSystème de fichiers, Indocker Le fond du miroir est bootfs .Cette couche correspond à notrelinux/unixLe système est le même,ContientbootChargeur et noyau.QuandbootUne fois le chargement terminé, Tout le noyau est en mémoire. .L'utilisation de la mémoire est maintenant autorisée parbootfsPasser au noyau,Le système est également déchargébootfs. 

  rootfs(root file system),InbootfsAu - dessus de, C'est typique. linuxDans le système/dev/,/proc,/bin,/etc/Répertoires et fichiers standards, etc.rootfs Est une variété de distributions de systèmes d'exploitation différents ,Par exemple,ubuntu,centosAttendez..

  Sept)docker Cinq façons de stocker

   Pour plus de détails, voir :javascript:void(0)

  Huit)docker Quatre modes de réseau

  • hostMode,Utiliser--net=hostDésignation.
  • containerMode,Utiliser--net=container:NAME_or_IDDésignation.
  • noneMode,Utiliser--net=noneDésignation.
  • bridgeMode,Utiliser--net=bridgeDésignation,Paramètres par défaut.

  javascript:void(0)

  Neuf) Trois modes de montage des données pris en charge

  dockerIl existe trois façons différentes de monter les données d'un hôte hôte à un conteneur,volume、bind mount、tmps mount

  • bind mount:Peut être stocké n'importe où sur le système hôte hôte hôte
    • Exemple:docker run -v /opt/html:/usr/share/nginx/html -p 81:80 -d --name nginx_bind nginx:latest
    • Inconvénients: Répertoire hôte monté (Ou documents) Non protégé , N'importe quel conteneur peut être modifié à volonté
    • Attention!:Si utilisébind mountsMonter le répertoire hôte hôte dans un répertoire non vide dans un conteneur,Ensuite, les fichiers du répertoire non vide dans ce conteneur seront cachés,Les fichiers auxquels le conteneur n'a accès que proviennent du Répertoire hôte hôte
  • volume:dockerGestion d'une partie du système de fichiers hôte(/var/lib/docker/volumes)

 

docker volume create nginx-volume
docker volume ls
docker run --mount type=volume,source=nginx-volume,destination=/usr/share/nginx/html,readonly -p 82:80 -d --name nginx_volume nginx:latest
    
  • 1.
  • 2.
  • 3.

 

   Si le conteneur est supprimé de force , Le volume de données ne sera pas supprimé , Sera toujours sauvegardé sur l'hôte hôte docker/volumesSous la table des matières

  • tmpfs mounts:Le montage est stocké dans la mémoire du système hôte hôte hôte, Ne pas écrire sur le système de fichiers de l'hôte hôte
    • docker run --mount type=tmpfs,destination=/usr/share/nginx/html -p 83:80 -d --name nginx_tmpfs nginx:latest

  dockerOrganisation des points de connaissance_Système de fichiers_08

  Comparerdocker Trois modes de montage

docker Comparaison des trois modes de montage
  bind(-v) volume tmpfs
volumeEmplacement N'importe quel siège peut être spécifié $(docker_data_dir)/docker/volumes/... Dans la mémoire hôte
Oui. mount pointImpact Masquer et remplacer par volume Copier les données originales dans volume  
Les fichiers individuels sont - ils pris en charge? Soutien Non pris en charge, Ne peut être qu'un répertoire  
Contrôle des droits Peut être réglé en lecture seule , Par défaut, les permissions de lecture et d'écriture Peut être réglé en lecture seule , Par défaut, les permissions de lecture et d'écriture  
Transplantation Faible transplantation ,Avechost pathBIND Forte transplantation, Aucune désignation requise hostTable des matières  
La persistance est - elle prise en charge? Soutien Soutien Non pris en charge
Scénario d'application

Profil de partage de l'hôte et du conteneur (dockerPar défaut, Fournir des contenants de cette façon DNSAnalyse,Oui./etc/resolv.conf Monter dans un conteneur )

Partage des données entre plusieurs conteneurs d'exécution

Sauvegarde、 Restaurer ou extraire des données d'un docker Migrer vers un autre dockerHôte

Vous ne voulez pas que les données existent sur l'hôte hôte , Ni dans un conteneur (Pour des raisons de sécurité,Ou lorsque l'acteur a besoin de beaucoup de données d'état non persistantes pour protéger la performance du conteneur)

 

  Bind Le mode ne résout pas bien le problème du stockage partagé entre hôtes Multi - hôtes、Bind Problèmes de gestion du modèle, etc. .

  Présentation Volume De Objectifs fondamentaux - Oui.PromotionDocker Support pour différents supports de stockage , Cela peut également atténuer Docker Charge de travail propre .Le stockage n'a pas seulement le stockage physique monté sur l'hôte hôte, Et le stockage en réseau ,Docker Démarrage du stockage abstrait (Sotroage Driver)Pour résoudre les problèmes de lecture et d'écriture du stockage en réseau

  Dix)dockerScénarios d'application pour

  • web Publication automatisée des applications
  • Essais automatisés et intégration continue、Publication
  • Déployer une base de données d'ajustement ou une autre application d'arrière - plan dans un environnement axé sur le service
  • Compiler ou étendre à partir de zéro OpenShiftOucloud FoundryPlate - forme pour construire sa proprePaaSEnvironnement

Quatre、dockerCommandes connexes

  dockerDocuments officiels: https://docs.docker.com/engine/reference/commandline/create/

  dockerOrganisation des points de connaissance_Espace de noms_09

  Un.)dockerCommandes d'aide

1 docker info #VoirdockerInformations pertinentes
2 docker version #Voir l'installationdockerInformations sur la version pour
3 docker help #dockerInformations d'aide pour la commande
    
  • 1.
  • 2.
  • 3.

  2.)docker Commandes liées au miroir

1 docker images # Liste tous les miroirs locaux 
2 docker search imagesname/imageid #Recherche de miroirs Attention!, Même si vous configurez alicloud Acceleration ,docker search Par défaut ou  https://hub.docker.com.L'accélération d'Alibaba Cloud n'est utilisée que lors du téléchargement. -s starts Plus de miroirs 
3 docker pull imagesname/imageid #Télécharger le miroir -s starts Plus de miroirs 
4 docker rmi imagesname/imageid #Supprimer le miroir,Le miroir par défaut basé sur ce miroir et le miroir en cours d'exécution ne peuvent pas être supprimés,Il faut ajouter-f Suppression forcée des paramètres 
5 Supprimer plusieurs:docker rmi -f Miroir1:tag Miroir2:tag,Non.tag, Ce qui a été supprimé est latest 
6 Supprimer tout:docker rmi -f $(docker images -qa)
7 docker save La commande peut enregistrer le miroir comme archive:docker save alpine | gzip > alpine-latest.tar.gz
8 docker load  La commande peut charger le miroir sauvegardé localementdockerÀ l'intérieur:docker load -i alpine-latest.tar.gz
9 docker tag # Étiqueter le miroir  docker tag mysql:5.7.22 docker-registry:5000/mysql:5.7.22
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

  Trois)docker Commandes liées au conteneur

  1、 Conteneur de démarrage interactif :docker run -it

docker run -it
 --name='Nouveau nom du conteneur': Assigner un alias au conteneur ;
 -d:Background Running Container,Et retourner au conteneurID, C'est - à - dire démarrer le conteneur du démon ;
 -i: Exécuter le conteneur en mode interactif ,En général-tUtilisation simultanée;
 -t:tty, Réattribuer un pseudo - terminal au conteneur ,En général-iUtilisation simultanée;
 -P:Cartographie aléatoire des ports;
 -p:Spécifier la cartographie des ports, Il existe quatre formats: :
 -v / Répertoire de chemin absolu de l'hôte hôte hôte :/Contenu du conteneur Nom du miroir  
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

   Miroir ajouter un volume de stockage

1、 Voir si le volume de données a été monté avec succès 
docker inspect 8ad4df9ec2fd     

2、Vérifier le partage des données entre le conteneur et l'hôte hôte hôte 
    In/myDataVolumeEt/dataVolumeContainer Créer des fichiers sur , Ils se voient tous les deux. .

3、 Après la sortie du conteneur , Si les données sont synchronisées après modification par l'hôte  
    La réponse: Synchronisé  

4、 Volume de données avec permissions  
    Les ordres:docker run -it -v / Répertoire de chemin absolu de l'hôte hôte hôte :/Contenu du conteneur:ro  Nom du miroir 
    Description:-v- Oui.volume Sens du volume  
    Le répertoire absolu de l'hôte hôte hôte et le Répertoire dans le conteneur n'ont pas besoin d'être établis à l'avance
    ro:- Oui.read onlyÇa veut dire 
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

  2、Voir le fonctionnement du conteneur:docker ps

  Paramètres

-a: Liste tous les conteneurs en cours d'exécution + Historique ;
-l:last,Afficher les conteneurs récemment créés;
-n:Afficher les derniersn Conteneurs créés ;
-q:Mode silencieux,Afficher uniquement le numéro du conteneur
--no-trunc:Ne pas tronquer la sortie
-d  Conteneur lancé en mode démon 
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

  3、Voir le Journal des conteneurs

Format de commande:docker logs -f -t --tail Conteneurid 
Description des paramètres: 
    -t Est d'ajouter un TIMESTAMP  
    -f Est de suivre la dernière impression du Journal  
    --tail- Oui.LinuxLes ordres, Indique le nombre final d'éléments affichés  
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

  4、Voir les processus dans le conteneur

Format de commande:docker top Conteneurid 
    
  • 1.

  5、 Voir les détails dans le conteneur

  ParjsonRetour au formulaire

Format de commande:docker inspect Conteneurid 
    
  • 1.

  6、Saisissez le conteneur en cours d'exécution et interagissez en ligne de commande 

   Les deux façons suivantes

1 docker exec -it Conteneurid bash shell 
2 docker attach Conteneurid
    
  • 1.
  • 2.

  docker execAvecdocker attachLa différence entre

  • attach: Terminal entrant directement dans la commande de démarrage du conteneur ,Aucun nouveau processus ne sera lancé;
    • Lorsque plusieurs fenêtres sont utilisées simultanément attach Lorsque la commande est connectée au même conteneur , Toutes les fenêtres sont synchronisées . Lorsqu'une fenêtre est bloquée par une commande , Aucune autre fenêtre ne peut fonctionner .
  • exec: Est d'ouvrir un nouveau terminal dans un conteneur , Et peut démarrer un nouveau processus .
    • Par désignation-it Paramètres pour maintenir l'entrée standard ouverte , Et assigner un pseudo - terminal .AdoptionexecLa commande pour manipuler le conteneur est la méthode la plus recommandée.

  7、Copier les fichiers du conteneur vers l'hôte hôte hôte 

Format de commande:docker cp Conteneurid Ou nom du conteneur :Chemin à l'intérieur du conteneur  Chemin hôte de destination 
    
  • 1.

  Scénario d'application:Quand nous avons lancé le conteneur de façon interactive, Si elle est effectuée dans un conteneur exitFonctionnement, Le conteneur s'arrêtera ,Il n'y a plus de données dans le conteneur.À ce stade, nous devons copier les données du conteneur en cours d'exécution sur l'hôte hôte hôte pour les conserver. 

  8、Copier les fichiers de l'hôte hôte hôte dans le conteneur

Format de commande:docker cp Chemin hôte  Conteneurid Ou nom du conteneur :Chemin à l'intérieur du conteneur
    
  • 1.

  9、Gestion du cycle de vie des conteneurs

docker stop imagename/imageid #Arrêter le conteneur
docker start imagename/imageid  #Conteneur de démarrage
docker restart imagename/imageid #Redémarrer le conteneur
docker kill  imagename/imageid  # Arrêter le conteneur de force 
docker rm imagename/imageid #Supprimer le conteneur -f Suppression forcée du conteneur 
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

  10、 Conteneur d'opération en vrac et miroir

  Réduction de la charge de travail,Une fois pour toutes, il faut avancer la douleur, Pensez d'abord à la suppression par lots , Installer le texte plus tard ,Opérations directes.

   Peut savoir supprimer docker container Et docker image La clé est de trouver la vérité. ID. Si disponible en vrac ID Supprimer la commande , Peut être supprimé par lots .

   Obtenir des conteneurs et des miroirs en vrac ID

 Pour obtenir des conteneurs en vrac ID
docker ps -a -q
Ou
docker container ls -aq

 Miroir par lots ID
docker image ls -aq
7c03076402d9
7ae4e0670a3f
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

   Supprimer tous les conteneurs natifs par lots

docker rm -rf $(docker ps -aq)
docker ps -a -q |xargs docker rm
docker  rm  $(docker  container  ls -aq)
    
  • 1.
  • 2.
  • 3.

    Supprimer tous les miroirs natifs par lots

docker rmi $(docker image ls -aq)
docker rmi $(docker images -q)
  • 1.
  • 2.

  Si vous ne voulez supprimer qu'une partie du conteneur ou du miroir en vrac

Écrivez le nom du conteneur à supprimer dans un fichier, Ensuite, selon le nom fourni ,Recombiner grep 、awk Attendez les ordres., Vous pouvez facilement obtenir la précision  ID Non.. Il suffit de l'avoir.  ID No.,Vous pouvez les supprimer en utilisant la méthode ci - dessus.
    
  • 1.

   Supprimer le miroir par Condition

   Pas d'étiquette. 

docker rmi `docker images -q | awk '/^<none>/ { print $3 }'`
   Le nom du miroir contient des mots clés 

docker rmi --force `docker images | grep doss-api | awk '{print $3}'`    //Parmi euxdoss-apiPour les mots clés
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

  11、 Faire un nouveau miroir du conteneur

docker commit -m "change somth" -a "somebody info" container_id(docker ps -aAccèsid)  Nouveau nom du miroir 
    
  • 1.

  Quatre)docker saveAvecdocker exportLa différence entre

  1、docker save

  docker save Est utilisé pour mettre un ou plusieurs image Emballage des outils enregistrés .

docker save -o images.tar postgres:9.6 mongo:3.4
    
  • 1.

  docker savePeut spécifierimage,Peut spécifiercontainer,docker save Ce qui sera sauvegardé est derrière le conteneur image.

   Importer un miroir emballé , Si un miroir avec le même nom existe localement, il sera écrasé

docker load -i images.tar
    
  • 1.

  Scénario d'application: Si votre application utilise docker-compose.yml Plusieurs combinaisons de miroirs orchestrées ,Mais le serveur client que vous déployez n'est pas connecté à l'Extranet.À ce moment - là,,Vous pouvez utiliserdocker save Emballer le miroir utilisé , Puis copiez - le sur le serveur client pour l'utiliser docker loadChargement.

  2、docker export

  docker export Est utilisé pour container Système de fichiers emballé ( Ne peut être spécifié que container)

docker export -o postgres-export.tar postgres
    
  • 1.

   À emballer container Charger dans l'utilisation docker import,Peut spécifiertag

docker import postgres-export.tar postgres:latest
    
  • 1.

  Attention!:

  1. docker importOui.container Une fois importé, devient un image, Au lieu de revenir à un container.
  2. Si un miroir avec le même nom existe déjà dans la Bibliothèque miroir locale, Le nom de l'image originale sera privé , Assigner à un nouveau miroir . L'image originale deviendra un fantôme. ,Uniquement parIMAGE IDExécution des opérations.

  docker exportLes scènes d'application sont principalement utilisées pour créer des miroirs de base: Par exemple, vous êtes passé d'un ubuntuLe miroir démarre un conteneur,Après avoir installé un logiciel et fait quelques réglages,Utiliserdocker export Enregistrer comme miroir de base .Et puis, Distribuer ce miroir à d'autres personnes

  3、docker saveEtdocker exportLa différence entre

  1. docker save Enregistrer est un miroir (image),docker export Le conteneur est sauvegardé (container);
  2. docker load Utilisé pour charger le paquet miroir ,docker import Utilisé pour charger le paquet conteneur , Mais les deux reviennent à l'image miroir ;
  3. docker load Impossible de renommer le miroir chargé ,Etdocker import Vous pouvez spécifier un nouveau nom pour le miroir .

Cinq、dockerfile Directive sur les mots réservés

   http://blog.itpub.net/28916011/viewspace-2213324/

  Un.) Lors de la personnalisation du miroir , Quelques suggestions

  • Utilisation de miroirs minces:Essayez de concentrer l'utilisation de chaque miroir、Unique,Évitez les structures grandes et complexes、Miroir multifonctionnel
  • Choisissez l'image de base appropriée:Un miroir de base trop grand peut créer un miroir gonflé, Généralement recommandé plus petit debianMiroir
  • Fournir des notes de commande suffisamment claires et des renseignements sur le mainteneur:dockerfile C'est aussi un code. ,Il faut tenir compte de la commodité de l'extension ultérieure et de l'utilisation par d'autres
  • Utiliser correctement le numéro de version : Utiliser les informations du numéro de version ,Par exemple:1.0,2.0,Au lieu delatest,Cela évitera une tragédie qui pourrait être causée par un contenu incohérent
  • Réduire le nombre de couches miroirs :Si vous voulez générer le moins de couches miroir possible, Fusionner les instructions autant que possible ,Par exemple, plusieursRUN Les instructions peuvent être fusionnées en une seule
  • Supprimer les fichiers temporaires et mis en cache en temps opportun : En particulier dans la mise en œuvre apt-getAprès la directive,/var/cache/apt Certains paquets d'installation sont mis en cache ci - dessous
  • Augmenter la vitesse de génération : Si le cache est utilisé correctement , Réduire les fichiers dans le Répertoire de contenu ,Ou utiliser.dockerignore Désignation des fichiers, etc.
  • Ajuster l'ordre raisonnable des commandes : Avec le cache allumé , Les instructions dont le contenu est inchangé doivent être précédées autant que possible. , Cela peut être réutilisé
  • Réduire l'interférence des sources externes : S'il est confirmé que les données doivent être importées de l'extérieur , Une adresse persistante doit être spécifiée , Avec des informations de version , Permettre aux autres de se répéter sans erreur

  2.) Miroir de base du système d'exploitation

  BusyBox、Alphine、Debian/Ubuntu、CentOSAttendez.

  La sélection du miroir de base du système d'exploitation nécessite une attention particulière:

  • Les miroirs officiels sont plus petits , Avec quelques composants de base . Un système rationalisé favorise la sécurité 、 Fonctionnement stable et efficace , Convient également à la personnalisation
  • Miroir de tiers individuel (Par exemple:tutum,A étédockerAcquisitions), La qualité est également très élevée .Ces miroirs sont généralement configurés pour l'application.
  • Pour des raisons de sécurité,Presque tous les miroirs officiels sont à peine installésSSHServices,Impossible de se connecter directement en utilisant le nom d'utilisateur et le mot de passe

  Attention:

  1. DockfilePeut avoir plus d'unCMDDirectives, Mais seul le dernier entre en vigueur. .
  2. ADDAvecCOPYLa différence entre: Le répertoire local est le répertoire source
    1. ADD srcPeut êtreURL;SitarDocumentation, Sera automatiquement décompressé vers destSous le chemin
    2. COPY C'est juste une copie. ,RecommandéCOPY
  3. HEALTHCHECKBilan de santé
  4. Utiliser.dockerignore Les fichiers pour faire dockerIgnorer les répertoires et les fichiers sous le chemin du module correspondant( Ajouter un motif de correspondance par ligne )

Six、 Pratique des conteneurs dans l'environnement de production

  Attention!:

  1. Sidocker Risque incontrôlable , D'autres solutions ont - elles été envisagées?
  2. Oui Non docker Conteneur pour limiter les ressources , Et comment limiter (Par exemple:CPU、Mémoire、Réseau、Disque, etc.)
  3. dockerLa gestion de la sécurité des conteneurs n'est pas parfaite,Des outils tiers peuvent être utilisés pour améliorer la gestion de la sécurité des conteneurs avant leur application dans l'environnement de production.Si utiliséapparmor Limiter la capacité du conteneur 、 Utiliser plus strictement iptableLes règles、InterdictionrootConnexion、Limiter les permissions normales des utilisateurs et tenir des registres du système
  4. Gestion des entrepôts privés au sein de l'entreprise 、 Si le problème de gestion du miroir est résolu .À l'heure actuelle, les outils de gestion des entrepôts privés offerts officiellement ne sont pas entièrement fonctionnels.harborJ'ai compris.

  Un.)Résumé des questions

  1、 Résoudre le problème que le miroir ne peut pas être supprimé multiple repositories

Error response from daemon: conflict: unable to delete ea5f89e79b1e (must be forced) - image is referenced in multiple repositories

Ça veut dire..., Plusieurs références miroir existent ,C'est la même chose.image idIl y en a plusieurs.repo.Attention requise, Êtes - vous vraiment sûr de vouloir supprimer !

Peut passerdocker rmi   $REPO/$NAME:$VERSION Méthode de suppression .
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

  2.)Élargir les points de connaissance

  1、Comment voirdocker Commande de démarrage du conteneur

1.Installationrunlike
    
  • 1.
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
    
  • 1.
python get-pip.py    # Exécuter le script d'installation
    
  • 1.
pip install runlike 

2.Exécuter les commandes runlike -p ConteneurID
  • 1.
  • 2.
  • 3.

  2、dockerParroot Conteneur de connexion d'identité

# Préface
 Lors du déploiement des services , Rencontre à l'intérieur du conteneur entrant ,Ce n'est pas pourrootL'identité de,Si nous devons exécuter la commande à l'intérieur du conteneur, Il y a un problème de permissions ,Par exemple,: Comme indiqué ci - dessous 

> bash-4.2$ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime          
- cp: cannot create regular file ‘/etc/localtime’: Permission denied

#### Solutions
Parroot L'identité entre dans le conteneur ,Les ordres sont les suivants::
> docker exec --privileged -u root -it Nom du conteneur/Conteneurid /bin/bash{sh}(bash{sh})
    
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

 

 
 
 
 

版权声明
本文为[Lin Haifeng 4573]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/09/20210914173523250t.html

Scroll to Top