Dans cet article, vous découvrirez une partie très cruciale de toute la configuration Docker, le dockerfile. Le dockerfile utilise une structure simple. Bien que cette simplicité soit une bonne chose, elle permet aux individus de simplement pirater les commandes, sans comprendre pleinement l'impact.
À la fin de cet article, vous aurez une meilleure compréhension du dockerfile. Alors, vous pourrez écrire des dockerfiles que vous comprenez.
À l'intérieur du docker
Le dockerfile est essentiellement un fichier texte. Mais, contrairement aux fichiers texte réguliers, vous verrez qu'il n'a pas de .SMS extension de fichier. Le dockerfile est un fichier que vous enregistrerez en tant que Dockerfile, sans extensions de fichiers.
Dans ce dockerfile existe toutes les commandes utilisées pour assembler une image docker. Bien que vous puissiez transmettre ces commandes dans la CLI Docker lors de la création d'une image, vous conviendrez qu'il est mieux pratique d'avoir un fichier pour cela, afin que les choses puissent être mieux organisées.
Les commandes dans le dockerfile sont essentielles pour construire une image docker.
Voici pourquoi:
Chaque ligne de commande dans le dockerfile crée les couches qui composent l'image docker. À condition que le dockerfile reste le même, chaque fois que vous construisez une image, il est certain que vous obtiendrez les mêmes résultats. Cependant, lorsque vous ajoutez une nouvelle ligne de commande, Docker construit simplement cette couche et l'ajoute aux couches existantes.
Tout comme le compilateur ou l'interprète fait aux langages de programmation, Docker lit le dockerfile de haut en bas. Par conséquent, le placement des commandes compte beaucoup.
Contrairement à la plupart des langages de programmation, les commandes du dockerfile ne sont pas sensibles à la casse. Mais, vous verrez à partir d'exemples dockerfiles que les commandes sont écrites en majuscules. Ce n'est rien d'autre qu'une convention, que vous devriez suivre aussi.
Comme les langages de programmation, vous pouvez écrire des commentaires dans vos dockerfiles. Les commentaires dans Dockerfiles sont désignés en utilisant le symbole de hachage ou de livre # au début de la ligne. Vous devez noter qu'il ne prend en charge que les commentaires d'une ligne, donc pour écrire des commentaires multi-lignes, vous utiliserez le symbole de hachage sur chaque ligne.
Attention cependant, tous les symboles de hachage que vous voyez dans un dockerfile ne sont pas des commentaires. Les symboles de hachage pourraient également indiquer directives d'analyseurs. Les directives d'analyse sont des commandes dans le dockerfile qui indiquent la façon dont le dockerfile doit être lu.
Seules deux directives d'analyse sont disponibles sur Docker comme au moment de la rédaction de cet article. Ils sont les s'échapper et syntaxe directives d'analyseurs. Le syntaxe La directive n'est disponible sur Docker que lorsqu'il fonctionne sur un backend BuildKit.
Le s'échapper La directive fonctionne partout. Le s'échapper La directive vous permet de décider de ce que le symbole Docker utilise comme caractère d'évasion.
Vous pouvez avoir dans votre dockerfile, une ligne similaire à celle ci-dessous:
Index de copie.HTML C: \\ Documents
Vous ne devriez pas encore vous soucier de ce que fait la commande, concentrez-vous sur l'emplacement du fichier. L'utilisation de la commande ci-dessus dans une image Docker basée sur Windows est valide. Mais, vous vous souviendrez que Docker est basé sur Linux, il utilise donc l'arrière-plan \ En tant que personnage d'évasion en raison des conventions Linux. Par conséquent, lorsque Docker lit le Dockerfile, il échappera à l'arrière-plan au lieu de le lire comme chemin de fichier.
Pour modifier ce comportement, vous utiliserez le s'échapper Directive d'analyse comme indiqué ci-dessous:
# Escape = '
Cette directive amène Docker à utiliser la backtick comme personnage d'évasion, au lieu de la barre arrière. Pour utiliser la directive Parser, vous devrez le mettre en haut du dockerfile, sinon cela ne compte que comme un commentaire, vous devez le placer même au-dessus des commentaires, si vous avez les commentaires en haut du fichier.
Instructions Dockerfile
Docker s'appuie sur chaque ligne de commande dans le dockerfile et les exécute, construisant une couche pour chaque ligne du processus.
Vous aurez besoin d'une compréhension des commandes pour écrire des dockerfiles. Un point de prudence cependant: beaucoup de commandes Dockerfile font des choses similaires. Vous n'avez pas à vous inquiéter, vous comprendrez aussi ces commandes.
Voici une liste des commandes que vous apprendrez:
DEPUIS
N'oubliez pas que l'objectif principal de Docker est de virtualiser les choses au niveau du système d'exploitation (OS), en créant des conteneurs. Par conséquent, quelle que soit l'image que Docker construit à partir de votre dockerfile doit être basé sur un système d'exploitation existant, vous construisez une image de base.
La commande From est utilisée pour indiquer le système d'exploitation que vous avez l'intention d'utiliser comme image de base. Si vous avez l'intention de construire sur une image de base, la commande de la commande devoir Soyez la première commande dans les directives et commentaires de l'analyse dockerfile-asides.
ÉTIQUETER
Le dockerfile a besoin de métadonnées, et la commande d'étiquette est ce que vous utilisez pour les créer. Après avoir construit une image et exécuté un conteneur, vous pouvez utiliser le Inspecte de docker commande pour trouver des informations sur le conteneur.
Env
Variables d'environnement. Mots familiers? Eh bien, la commande env est utilisée pour définir des variables d'environnement lors de la construction de l'image Docker. Vous pourrez également voir que ces variables d'environnement définies sont également accessibles après le lancement du conteneur.
Dockerfile a une commande similaire à Env, connu sous le nom d'Arg. Cependant, quelle que soit la variable d'environnement définie en utilisant Arg n'est disponible que lors de la construction de l'image, mais pas après avoir lancé le conteneur.
EXPOSER
De la même manière que votre hôte docker, votre machine locale est l'hôte docker dans ce cas-chou pour une communication telle que 8080, 5000, etc. est de la même manière que les conteneurs Docker ont des ports.
Vous utiliserez la commande Expose pour choisir quels ports devraient être disponibles pour communiquer avec un conteneur.
Lorsque vous exécutez des conteneurs Docker, vous pouvez passer dans le -p Argument connu sous le nom de publication, qui est similaire à la commande exposée.
Voici la différence subtile: vous utilisez la commande Expose pour ouvrir des ports à d'autres conteneurs Docker, tandis que le -p L'argument est utilisé pour ouvrir les ports à l'environnement externe I.e. En dehors du conteneur Docker.
Si vous n'utilisez pas d'exposition ou -p Du tout, alors le conteneur Docker ne sera accessible à travers aucun ports de l'extérieur du conteneur ou d'autres conteneurs Docker.
COURIR
Lors de la construction d'une image Docker, vous devrez peut-être exécuter des commandes pour des raisons telles que l'installation d'applications et de packages pour faire partie de l'image.
En utilisant la commande Run, vous pouvez faire tout cela. Mais rappelez-vous: les commandes sont exécutées uniquement lorsque vous construisez l'image Docker.
COPIE
Il existe différentes raisons de copier des fichiers de votre hôte docker à votre image docker. Certains fichiers que vous souhaitez copier pourraient être des fichiers de configuration, ou le code source - si vous l'exécutez dans votre conteneur Docker.
Pour copier des fichiers de votre hôte docker vers une image Docker, vous pouvez utiliser la commande Copier.
Il y a la commande ADD qui est similaire à Copy, et est un peu différent. Bien que la copie ne puisse copier que les fichiers de votre hôte docker à l'image Docker, ADD peut copier des fichiers à partir d'une URL et également extraire des fichiers compressés à l'image Docker.
Pourquoi utiliser la copie au lieu d'ajouter? Eh bien, vous comprendrez que la copie des fichiers à partir d'une URL est une tâche que vous pouvez exécuter avec Curl en utilisant la commande RUN. Vous pouvez également extraire des fichiers dans l'image docker à l'aide de la commande RUN.
Cependant, il n'y a rien de mal à utiliser Add pour extraire directement des fichiers compressés dans l'image docker.
Travail
N'oubliez pas la commande RUN? Vous pouvez utiliser la commande run pour exécuter des commandes dans votre image docker. Cependant, parfois vous aurez une raison d'exécuter une commande dans certains répertoires. À titre d'exemple, pour décompresser un fichier, vous devez être dans le répertoire du fichier zip ou le pointer.
C'est là que Workdir est utile. WorkDir vous permet de modifier le répertoire pendant que Docker construit l'image, et le nouveau répertoire reste le répertoire actuel pour le reste des instructions de construction.
CMD
Votre conteneur Docker est généralement configuré pour exécuter un processus. Mais comment sait-il quel processus exécuter? C'est via la commande cmd. La commande CMD est utilisée pour exécuter des commandes car Docker lance le conteneur Docker à partir de l'image.
Bien que vous puissiez spécifier l'exécution de la commande lors du lancement à partir de la ligne de commande, les commandes indiquées à l'instruction CMD restent la valeur par défaut.
Docker ne peut exécuter qu'une seule commande CMD. Par conséquent, si vous insérez deux instructions CMD ou plus, Docker ne ferait que l'exécution du dernier I.e. le plus récent.
Le point d'entrée est similaire à CMD, cependant, vous pouvez exécuter des commandes lors du lancement et cela ne remplacerait pas les instructions que vous avez définies sur EntryPoint.
Exemple
Dans cet exemple, vous verrez une implémentation de presque toutes les commandes discutées ci-dessus. Vous verrez comment une application Flask serait exécutée dans un conteneur Docker. Si vous ne savez pas ce qu'est Flask, Flask est un cadre Web écrit en Python pour créer des applications Web.
C'est assez simple, donc vous n'avez pas besoin d'avoir une connaissance de la langue pour exécuter l'exemple.
Pour commencer, vous devrez installer Git sur votre machine. Après avoir installé Git, vous cloner vous cloner le code source du référentiel GitHub ici.
Tout d'abord, créez un nouveau répertoire. Vous aurez le code source et le dockerfile dans ce répertoire. Vous pouvez créer un répertoire, vous pouvez l'appeler échantillon de docker-et le dockerfile en utilisant les commandes ci-dessous:
MKDIR Docker-échantillon && cd docker-échantillon
Touch dockerfile
N'oubliez pas que le dockerfile n'est qu'un fichier texte brut? Vous vous souvenez également qu'il ne devrait pas avoir le .SMS extension? Vous trouverez cette discussion au début de la section «Inside the Dockerfile», si vous l'avez manqué.
Ensuite, vous téléchargerez le code source de GitHub en utilisant le clone git Commande comme vu ci-dessous:
git clone https: // github.com / craigkersttiens / flask-helloworld.git
Vous pouvez vérifier le contenu du Flask-Helloworld annuaire:
ls flask-helloworld
Vous verrez les fichiers suivants:
Écrire le dockerfile
Ce dockerfile a toutes les instructions Docker discutées ci-dessus. Il y a aussi des commentaires, pour vous aider à comprendre ce que fait chaque ligne.
# De l'instruction choisit l'image parent pour Docker.# L'instruction d'étiquette crée des étiquettes.
# La première étiquette est mainteller avec la valeur Linux indique.
# La deuxième étiquette est Appname avec la valeur FLASK Hello. Monde
# Vous pouvez avoir autant de paires de clés que vous le souhaitez.
# Vous pouvez également choisir n'importe quel nom pour les clés.
# Le choix de l'agentener et de l'application dans cet exemple
# est un choix personnel.
Étiqueter "maintellerer" = "linux hint" "appname" = "flask hello world"
# L'instruction Env attribue des variables d'environnement.
# Le répertoire / usr / src tient des programmes téléchargés,
# que ce soit une source ou un binaire avant de les installer.
Env Applocation / USR / SRC
# Copier des copies d'instructions ou répertoires,
# de l'hôte docker à l'image docker.
# Vous copiez le code source sur l'image docker.
# La commande ci-dessous utilise la variable d'environnement set.
Copier Flask-Helloworld $ Applocation / Flask-Helloworld
# Utiliser à nouveau l'instruction Env.
Env Flaskapp $ Applocation / Flask-Helloworld
# Workdir Instruction modifie le répertoire actuel dans l'image docker.# Exécuter l'instruction exécute les commandes,
# La commande ci-dessous change le répertoire en / usr / src / flask-helloworld.
# Le répertoire cible utilise la variable d'environnement.
Workdir $ flaskapp /
Construire l'image Docker
Après avoir écrit le dockerfile, vous pouvez construire l'image docker avec la commande ci-dessous:
sudo docker build -t samptample_image .
Ici, sample_image est le nom de l'image docker. Vous pouvez lui donner un autre nom. Le point (.) À la fin de la commande, indique que les fichiers avec lesquels vous travaillez sont dans le répertoire actuel.
Exécution du conteneur Docker
Pour exécuter le conteneur Docker, vous pouvez utiliser le run docker Commande ci-dessous:
sudo docker run -ip 5000: 5000 Sample_image: Dernière
Le paramètre -i garantit que le conteneur Docker s'exécute en mode interactif et le paramètre -p lie le port de l'hôte Docker au port du conteneur Docker. Pensez-y comme: Docker-Host: Docker-Container.
Après avoir lancé le conteneur Docker, vous pouvez visiter LocalHost: 5000 dans votre navigateur pour voir les résultats de l'application Flask.
Le dockerfile est le plan pour une image docker. Comprendre le fonctionnement de Dockerfiles et les écrire confortablement ferait de l'expérience de votre docker agréable.
En travaillant à ce sujet à travers cet article, vous avez vu comment fonctionnent Dockerfiles. J'espère que vous comprenez également ce que signifient les instructions majeures de Docker et que vous pouvez les utiliser pour construire vos propres images Docker.
Toute question que vous avez sur Dockerfiles serait la bienvenue. Merci d'avoir lu.