Création et gestion d'images Docker (utilisation de l'entrepôt officiel du Hub et construction du centre d'enregistrement privé)

écrit devant

Environnement système : centos 7

1. Comment Docker crée-t-il une image miroir

Il existe deux sources de mise en miroir :

  1. Téléchargez l'image à partir du référentiel miroir ;
  2. Créez vous-même de nouveaux miroirs. Il existe deux types de création : (1) création à partir d'images existantes ; (2) création à l'aide de Dockerfile.

1.1 Créer à partir d'une image existante

La création d'images basées sur des conteneurs existants consiste principalement à créer de nouvelles images via la commande docker commit. Les étapes de construction sont principalement divisées en trois étapes : (1) exécuter le conteneur ; (2) modifier le conteneur ; (3) enregistrer le conteneur en tant que nouvelle image.

exécuter le conteneur
docker run -it ubuntu   # 运行容器

insérez la description de l'image ici

modifier le conteneur

Ici, nous avons ajouté le fichier hello.c au conteneur

touch hello.c   ## 修改容器,
exit            # 退出容器

insérez la description de l'image ici

enregistrer en tant que nouveau conteneur
docker commit -a "panda" -m "commit test" 7f77678f7782 ubuntu-hello  # 保存为新的容器
docker images # 查看

Vous pouvez voir qu'il existe déjà une image ubuntu-hello. Démarrez la nouvelle image et vérifiez si le fichier hello.c existe.
insérez la description de l'image ici

1.2 Créer avec Dockerfile

1.2.1 Les étapes pour construire une image miroir sont divisées en trois étapes :
  1. envoyer le contexte au démon ;
  2. Le démon obtient le contexte, envoie une requête http au serveur docker et construit l'image
  3. Le serveur docker obtient le contexte et crée une image en fonction des exigences du fichier docker. Le processus de construction peut utiliser le cache
1.2.2 Mots-clés Dockerfile
FROM         设置镜像使用的基础镜像
MAINTAINER   设置镜像的作者
RUN    		 编译镜像时,要执行的命令
CMD   		 设置容器的启动命令
LABEL 		 设置镜像标签
EXPOSE 		 设置镜像暴露的端口
ENV          设置容器的环境变量
ADD 		 编译镜像时复制上下文中文件到镜像中
COPY  		 编译镜像时复制上下文中文件到镜像中
ENRYPOINT 	 设置容器的入口程序
VOLUME 		 设置容器的挂载卷
USER 		 设置 RUN CMD ENTRYPOINT 的用户名
WORKER 		 设置RUN CMD ENTRYPOINT COPY ADD 指令的工作目录
ARG 	     设置编译镜像时加入的参数
ONBUILD      设置镜像的 ONBUILD 指令
STOPSIGNAL   设置容器退出时候的信号量

La différence entre ajouter et copier

COPY  ./hello.c  ./
ADD   ./nginx.tar.gz  ./
ADD   http://www.panda.com/nginx.tar.gz

ADD peut décompresser directement le fichier compressé lors de sa copie. Si ADD est suivi d'une URL, le fichier peut être téléchargé directement depuis le site Web. Ici, il s'agit simplement de télécharger le fichier sans décompression !

1.2.2 Dockerfile en pratique : prenez hello.c comme exemple pour créer un Dockerfile

Plus d'informations sur l'écriture et l'optimisation de Dockerfile, un article spécial sera publié ultérieurement, les étudiants intéressés peuvent continuer à faire attention ~

Créer le fichier source hello.c

#include <stdio.h>
int main()
{
    
    
    printf("hello, world\n");
    return 0;
}

Créer un fichier Docker

FROM gcc spécifie l'image de base, s'il s'agit d'un programme go, FROM golang : 1.18, si la version n'est pas spécifiée, la dernière version est par défaut. Remarque : pwd est exécuté pendant le processus de construction, pas dans le conteneur .

FROM gcc
MAINTAINER panda
COPY ./hello.c ./
RUN pwd
LABEL myhello 1.0.0
LABEL env prod
RUN gcc  hello.c -o hello
CMD ["./hello"]

construire une image

docker build -t myhellc .

insérez la description de l'image ici

miroir de course

docker run -it myhelloc

insérez la description de l'image ici

Des amis attentifs ont peut-être découvert que notre code est en fait écrit sur une seule ligne. Cependant, l'image construite a 1,27 g, ce qui est évidemment déraisonnable. À ce stade, une construction en plusieurs étapes est requise.

2. Gestion des images Docker

2.1 Utilisation de l'entrepôt officiel du Hub

Docker Hub est actuellement un entrepôt public officiellement maintenu par Docker, il est utilisé pour enregistrer nos images, y compris des images massives, telles que : nginx, redis, ubuntu, etc., qui est similaire à github.

2.1.1 Pour utiliser l'entrepôt officiel Hub, un nom d'utilisateur, un mot de passe et une adresse e-mail sont nécessaires pour créer un compte. Après vous être enregistré et connecté avec succès, vous pouvez commencer à construire votre propre entrepôt.

insérez la description de l'image ici
insérez la description de l'image ici

2.1.2 Vérification de connexion

Remarque : La connexion par défaut utilise le référentiel officiel, tout comme la déconnexion.

docker login -u panbamboo  # 直接使用-u 默认登录的是官方仓库

insérez la description de l'image ici

2.1.3 Vérification de l'envoi d'images

Nous remappons l'image myhelloc générée dans la première partie (hello est le nom de l'image et la balise est 1.0.0) et la téléchargeons dans l'entrepôt public que nous venons de construire.

# 打tag
docker tag myhelloc:latest panbamboo/hello:1.0.0
# 推送到公有仓库
docker push panbamboo/hello:1.0.0

insérez la description de l'image iciUne fois le push terminé, actualisez l'interface pour voir que l'image dans la boîte rouge sur le chemin a été téléchargée avec succès.

insérez la description de l'image ici
Maintenant, nous pouvons supprimer l'image locale panbamboo/hello:1.0.0, les images docker voient qu'il n'y a pas une telle image localement.

docker rmi panbamboo/hello:1.0.0  # 

insérez la description de l'image ici

Extrayez ensuite l'image de l'entrepôt distant.
insérez la description de l'image ici
À ce stade, nous avons maîtrisé l'utilisation de l'entrepôt officiel du Hub pour pousser et extraire des images, n'est-ce pas très simple ~

2.2 Construire un entrepôt privé

Le fonctionnaire nous a fourni un miroir de registre pour nous aider à créer un registre miroir privé. Recherchez le registre sur la page d'accueil, puis copiez la commande dans la zone rouge, prête à extraire l'image. Si l'entrepôt privé est accessible via l'intranet de l'entreprise, le nom d'utilisateur et le mot de passe peuvent également être considérés comme omis.
insérez la description de l'image ici

2.2.1 Extraire l'image du registre
docker pull registry

insérez la description de l'image ici

2.2.2 Installer apache2-utils

apache2-utils est utilisé pour générer le nom d'utilisateur et le mot de passe, la commande d'installation est la suivante :

#  ubuntu 
sudo apt-get install apache2-utils   
# centos
sudo yum -y install httpd-tools     
2.2.3 Créer un répertoire de stockage

Comme il s'agit d'un centre d'enregistrement pour le stockage des images, nous créons d'abord un emplacement pour stocker nos images.

Remarque : Utilisez echo $HOME pour vérifier quel est votre chemin HOME avant de créer, sinon vous ne saurez pas où se trouve le répertoire que vous avez créé après la création

echo  $HOME
/root        #  $HOME 的值
mkdir -p $HOME/registry
mkdir -p $HOME/registry/auth
mkdir -p $HOME/registry/data

Écrivez le nom d'utilisateur et le mot de passe dans le fichier htpasswd dans le répertoire /root/registry/auth/, et le mot de passe est sous forme cryptée.

# 用户名和密码都是:panda
htpasswd -Bbn panda panda > $HOME/registry/auth/htpasswd

insérez la description de l'image ici

2.2.4 exécuter le menu fixe
docker run -d -p 5000:5000 --name registry --restart=always -v $HOME/registry/data:/var/lib/registry -v $HOME/registry/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2

L'utilisation de docker ps pour voir le registre indique que le démarrage est terminé.
insérez la description de l'image ici

Supplément : Vous pouvez également utiliser Docker Inspect Registry pour afficher le répertoire de montage (champ Mounts)
insérez la description de l'image ici

2.2.5 Modifier le fichier de configuration docker.service

Ajoutez après l'emplacement suivant : –insecure-registry localhost:5000, localhost:5000 est le nom d'utilisateur, qui peut être nommé arbitrairement.

vim /lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
--insecure-registry localhost:5000

insérez la description de l'image iciÀ ce stade, notre centre d'enregistrement privé est construit.

2.2.6 Vérification poussée et tirée du centre privé

Étant donné que nous utilisons actuellement l'entrepôt officiel, nous devons nous déconnecter avant de pouvoir nous connecter au centre d'enregistrement privé.

Changement de registre
docker logout

docker login localhost:5000   # 这里写你自己的

docker tag myhelloc:latest localhost:5000/hello:1.0.0
pousser la vérification
docker push localhost:5000/hello:1.0.0   ## 等待推送成功即可
tirer la vérification
docker images # 找到localhost:5000/hello:1.0.0 对应的 IMAGE ID a62b4a7b6bfc

docker rmi -f a62b4a7b6bfc   # -f 强制删除该镜像

docker pull localhost:5000/hello:1.0.0  ## 拉取镜像

2.3 commande docker save/load

docker save peut enregistrer l'image locale existante dans le fichier xxx.tar, puis charger l'image locale via docker load -i xxx.tar

docker save -o nginx.tar nginx:latest  # 将nginx镜像保存到本地 nginx.tar 文件

tar -xvf nginx.tar -C tmp/  # 将镜像解压到tmp目录,有兴趣的可以看看里面有什么,实际上还是分层存储
docker load -i nginx.tar  # 从本地加载镜像

insérez la description de l'image ici
La différence avec docker import/export :
docker load ne peut pas modifier le nom et le tag de l'image lors du chargement, mais docker import/export le peut.

Recommander un tutoriel gratuit de Zero Sound Academy. Personnellement, je pense que le professeur l'a bien enseigné, donc je voudrais
le partager avec vous : [Linux, Nginx, ZeroMQ, MySQL, Redis,
fastdfs, MongoDB, ZK, streaming media, CDN, P2P, K8S, Docker,
TCP/IP , Coroutine, DPDK et autres contenus techniques, cliquez pour apprendre immédiatement :

Je suppose que tu aimes

Origine blog.csdn.net/weixin_46935110/article/details/129017245
conseillé
Classement