Maison >Opération et maintenance >Nginx >Comment utiliser Dockerfile pour créer une image nginx
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
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
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 :
Dé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 exitrrree
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!