Maison  >  Article  >  Opération et maintenance  >  Comment utiliser Dockerfile pour créer une image nginx

Comment utiliser Dockerfile pour créer une image nginx

WBOY
WBOYavant
2023-05-14 20:13:104136parcourir

Introduction au dockerfile

Docker peut créer automatiquement une image en lisant le contenu du dockerfile. Le dockerfile est un fichier texte qui contient toutes les commandes qui doivent être exécutées pendant le processus de construction. On peut également comprendre que dockfile est un script qui est interprété par le programme docker. Il est constitué d'instructions une par une. Chaque instruction correspond à une commande sous le système Linux. Le programme docker traduit ces instructions dockerfile en véritables commandes Linux. Dockerfile a son propre format d'écriture et des commandes prises en charge. Le programme Docker résout les dépendances entre ces commandes, de la même manière que makefile.

Le programme Docker lira le fichier Docker et générera une image personnalisée selon les instructions. Comparé à une image de type boîte noire, un script évident comme dockerfile est plus facile à accepter pour les utilisateurs. Il montre clairement comment l'image est générée. Avec dockerfile, lorsque nous devons personnaliser nos propres exigences supplémentaires, il nous suffit d'ajouter ou de modifier des instructions sur le fichier docker et de régénérer l'image, éliminant ainsi les problèmes de saisie de commandes.

Méthode Docker pour créer une image : commit, dockerfile

1. Utilisez commit pour créer une image :

 Commit est une image construite à partir de l'image originale. Le but de l'utilisation de cette méthode pour créer une image est de. enregistrez certaines des images. informations de configuration et informations modifiées. Équivalent à un instantané d’une image.

 2. Utilisez dockerfile pour créer l'image :

  Dockerfile est une image (personnalisée) requise pour une construction rapide.

instructions dockerfile :

 from : Spécifiez l'image de base (from est une instruction obligatoire et doit être la première instruction).

 run : utilisé pour exécuter des commandes en ligne de commande. Son format de base :

   Format Shell : run , entrez simplement la commande dans l'environnement bash. Un fichier docker est autorisé à utiliser run pour pas plus de 127 couches. Par conséquent, pour utiliser run une fois, utilisez ' ' pour changer. la ligne et utilisez ' && 'Exécutez la commande suivante. Ce format est généralement utilisé ;

  Format Exec : exécutez , cette méthode est comme le format des appels de fonction

 copie : copiez le fichier. Son format de base :

                                                       」                       quelque part dans | Path>"]

 ajouter : Copie de fichier plus avancée, ajoutant certaines fonctions sur la base de la copie. Si le package compressé est copié, il sera décompressé directement sans qu'il soit nécessaire de le faire. utilisez run pour décompresser ;

 cmd : commande de démarrage du conteneur. Son format de base :

   Format Shell : cmd

  Format Exec : cmd ["fichier exécutable", "Paramètre 1", "Paramètre 2"...]

   Format de la liste des paramètres : cmd [" Paramètre 1 ", "Paramètre 2"...], après avoir spécifié la commande Entrypoint, utilisez cmd pour spécifier les paramètres spécifiques

 entrypoint: Entry Point. Son format de base est divisé en exec et shell. Le but du point d'entrée est le même que celui de cmd, qui consiste à spécifier le programme et les paramètres de démarrage du conteneur. Le point d'entrée peut être remplacé pendant le fonctionnement, mais il est plus lourd que cmd et doit être spécifié via le paramètre --entrypoint de docker run. Lorsque le point d'entrée est spécifié, la signification de cmd change Au lieu d'exécuter sa commande directement, le contenu de cmd est transmis à la commande Entrypoint en tant que paramètre. Une fois exécuté, il devient : ""

 env : définir les variables d'environnement. (Vous pouvez utiliser les variables utilisées ici) Son format de base :

  Format 1 : env

  Format 2 : env = ;...

  arg : Paramètres de construction. L'effet des paramètres de build et d'env est le même. Ils définissent tous deux des variables d'environnement. La différence est que les variables d'environnement créées par arg n'existeront pas lors de l'exécution future du conteneur. Son format de base :

  Format 1 : arg [=]

  Format 2 : Cette valeur par défaut peut être utilisée dans la commande build docker build --build-arg pour remplacer

 volume : définit un volume anonyme. Son format de base :

  Format 1 : volume ["", ""...]

  Format 2 : volume

  exposer : Port exposé. La directive expose déclare le port fourni par le conteneur d'exécution. Lors du démarrage du conteneur, le port ne sera pas ouvert à cause de cette déclaration. Son format de base :

 Format 1 : exposer [...]

  Workdir : Spécifiez le répertoire de travail. Son format de base :

 Format 1 : workdir

 user : Spécifiez l'utilisateur actuel. user vous aide à passer à l'utilisateur spécifié. Son format de base :

   Format 1 : user

  healthcheck : Bilan de santé pour déterminer si l'état du conteneur est normal. Format de base : 式 Format 1 : Healtcheck [Options] CMD & LT; Command & GT; : Définir la commande de l'état de santé du conteneur

Format 2 : Healtcheck Aucun : Si le miroir de base a une instruction de contrôle de santé, vous pouvez utilisez ce format pour le bloquer. Instructions de contrôle de santé

Construisez l'image nginx :

Créez un répertoire et écrivez le fichier docker dans le répertoire :

[root@docker ~]# mkdir mynginx
[root@docker ~]# cd mynginx/
[root@docker mynginx]# pwd
/root/mynginx
[root@docker mynginx]#

Téléchargez le package de code source nginx dans le répertoire créé (répertoire mynginx) :

[root@docker ~]# wget -p /root/mynginx/ http://nginx.org/download/nginx-1.15.2.tar.gz

Écrivez le fichier docker :

[root@docker mynginx]# vi dockerfile

Le contenu est le suivant :

from centos
run ping -c 1 www.baidu.com
run yum -y install gcc make pcre-devel zlib-devel tar zlib
add nginx-1.15.2.tar.gz /usr/src/
run cd /usr/src/nginx-1.15.2 \
  && mkdir /usr/local/nginx \
  && ./configure --prefix=/usr/local/nginx && make && make install \
  && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \
  && nginx
run rm -rf /usr/src/nginx-1.15.2
expose 80

Exécutez la commande docker pour créer l'image :

[root@docker mynginx]# docker build -t nginx:v3 .
sending build context to docker daemon 1.029mb
step 1/7 : from centos
 ---> 5182e96772bf
step 2/7 : run ping -c 1 www.baidu.com
 ---> using cache
 ---> 2f70f8abaf2a
step 3/7 : run yum -y install gcc make pcre-devel zlib-devel tar zlib
 ---> using cache
 ---> dbdda4b7ae6f
step 4/7 : add nginx-1.15.2.tar.gz /usr/src/
 ---> using cache
 ---> 18ace6285668
step 5/7 : run cd /usr/src/nginx-1.15.2   && mkdir /usr/local/nginx   && ./configure --prefix=/usr/local/nginx && make && make install   && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/   && nginx
 ---> using cache
 ---> 99629488ede9
step 6/7 : run rm -rf /usr/src/nginx-1.15.2
 ---> using cache
 ---> 869fbad71879
step 7/7 : expose 80
 ---> using cache
 ---> 384bed72ea6f
successfully built 384bed72ea6f
successfully tagged nginx:v3

La sortie de deux avec succès signifie que la construction est réussie !

Démarrez l'image personnalisée :

Utilisez des images Docker pour afficher l'image construite :

Comment utiliser Dockerfile pour créer une image nginxDémarrez l'image personnalisée :

[root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3
ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858
[root@docker ~]# docker ps -a
container id    image        command       created       status       ports        names
ecaafe119044    nginx:v3      "/bin/bash"     3 seconds ago    up 2 seconds    0.0.0.0:80->80/tcp  nginx

Remarque : À ce stade, quelle que soit la façon dont vous démarrez le conteneur, il sera toujours dans l’état sorti.

Après diverses solutions, j'ai enfin compris où se situe le problème. Il s'avère que lorsque le conteneur démarre, il est démarré en arrière-plan correspondant à un thread. Il est déjà démarré au démarrage, mais après avoir exécuté la commande, il se ferme et ne s'exécute pas en arrière-plan, utilisez donc le paramètre -dit. pour le laisser, exécutez-le simplement en arrière-plan.

[root@docker ~]# docker run -dit -p 80:80 --name nginx nginx:v3
ecaafe1190447878b98dfb0198e92439db60ff7dab57a1674e0e9e7282a9c858
[root@docker ~]# docker ps -a
container id    image        command       created       status       ports        names
ecaafe119044    nginx:v3      "/bin/bash"     3 seconds ago    up 2 seconds    0.0.0.0:80->80/tcp  nginx

Cependant...

Un autre problème est survenu à ce moment-là. Même si elle était active, l'interface de la page Web nginx n'était pas accessible et la connexion a été refusée ! ! ! !

[root@docker ~]# curl 192.168.100.22
curl: (7) failed connect to 192.168.100.22:80; 拒绝连接
[root@docker ~]# elinks --dump 192.168.100.22
elinks: 拒绝连接

Puis, après avoir demandé à Baidu, fq et Google, j'ai finalement trouvé le problème. Il s'avère qu'il vous suffit d'utiliser exec pour entrer dans le conteneur et démarrer nginx.

[root@docker ~]# docker exec -it nginx bash
[root@ecaafe119044 /]# nginx
[root@ecaafe119044 /]# exit
exit
rrree

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer