Comment exécuter une instance de docker à partir d'un DockerFile?

94

J'ai finalement compris comment faire fonctionner Docker.

docker run --name my-forum-nodebb --link my-forum-redis:redis -p 80:80 -p 443:443 -p 4567:4567 -P -t -i nodebb/docker:ubuntu

Je l'ai lié à une instance redis, cool.

C'est à partir de zéro et je suppose que lorsque j'ai créé l'instance redis

docker run --name my-forum-redis -d -p 6379:6379 nodebb/docker:ubuntu-redis

il tire l'image d'un repo distant?

NodeBB propose un Dockerfile https://github.com/NodeBB/NodeBB/blob/master/Dockerfile Je ne sais pas vraiment comment l'utiliser. Je suppose que je peux en quelque sorte créer un environnement local en appelant ce Dockerfile sur ma télécommande.

Est-ce correct? Si oui, comment puis-je créer l'instance locale pointant vers la télécommande?

Michael Joseph Aubry
la source
vous pouvez créer l'image de docker dans votre environnement local et la tirer localement
BMW
$ cat Dockerfile | docker build -t <nom_image> - # attention au trait d'union
jbobbylopez

Réponses:

95

Téléchargez le fichier et exécutez à partir du même répertoire docker build -t nodebb .

Cela vous donnera une image sur votre machine locale nommée nodebb à partir de laquelle vous pourrez lancer un conteneur docker run -d nodebb(vous pouvez changer nodebb en votre propre nom).

Andreas Wederbrand
la source
1
Comment cela marche-t-il? Si je possède simplement le fichier docker, comment connaît-il mon projet? Y a-t-il un lien dans le fichier docker? Ensuite, je suppose que s'il y a des poignées de docker empaquetant une nouvelle image que je peux ensuite migrer vers mon serveur. Dans ce packaging il absorbe tous les atouts de mon projet? Désolé si j'ai l'air ignorant, docker est un nouveau concept pour moi mais j'aime apprendre.
Michael Joseph Aubry
2
Merci au fait et que représente le <> dans votre exemple pourquoi avez-vous choisi <nodebb>?
Michael Joseph Aubry
Aucun conteneur de docker ne connaît "votre" projet, ils sont très génériques.
Andreas Wederbrand
3
La commande que vous avez fournie n'a pas fonctionné, j'ai donc essayé `docker build .` et cela a fonctionné, mais comme elle n'est pas nommée, je ne peux pas l'exécuter. docker build -t <nodebb> .me donne file exists: .. J'ai un projet existant qui est venu avec un Dockerfiledonc je l'ai juste exécuté dans ce répertoire.
Michael Joseph Aubry
2
Cela répond à beaucoup de mes questions via docs.docker.com/engine/reference/builder
Michael Joseph Aubry
45

Vous ne pouvez pas démarrer un conteneur à partir d'un Dockerfile.

Le processus se déroule comme suit:

Dockerfile = [ docker build] => Docker image = [ docker run] => Conteneur Docker

Pour démarrer (ou exécuter) un conteneur, vous avez besoin d'une image. Pour créer une image, vous devez créer le Dockerfile [1].

[1]: vous pouvez également docker importune image d'une archive tar ou encore docker load.

Auzias
la source
26

Alors que les réponses ci-dessus étaient utilisables, cela m'a vraiment aidé, donc je les mets également ici.

De la documentation :

Au lieu de spécifier un contexte, vous pouvez transmettre un seul Dockerfile dans l'URL ou diriger le fichier via STDIN. Pour diriger un Dockerfile depuis STDIN:

$ docker build - < Dockerfile

Avec Powershell sous Windows, vous pouvez exécuter:

Get-Content Dockerfile | docker build -

Lorsque la construction est terminée, exécutez la commande:

docker image ls

Vous verrez quelque chose comme ceci:

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
<none>                     <none>              123456789        39 seconds ago      422MB

Copiez votre ID IMAGE réel, puis exécutez

docker run 123456789

Où le numéro à la fin est l'ID d'image réel de l'étape précédente

Si vous ne souhaitez pas vous souvenir de l'identifiant de l'image, vous pouvez marquer votre image par

docker tag 123456789 pavel/pavel-build

Qui marquera votre image comme pavel/pavel-build

Pavel Janicek
la source
Étonnant qu'en 2020, ce premier extrait ait mis si longtemps à trouver.
fullStackChris
C'est juste la réponse acceptée avec plus de cérémonie.
Michail
18

La solution simple et directe est:

docker build .
=> ....
=> Successfully built a3e628814c67
docker run -p 3000:3000 a3e628814c67

3000 - peut être n'importe quel port

a3e628814c68 - résultat de hachage donné par la commande success build

REMARQUE : vous devez être dans le répertoire contenant Dockerfile .

zhisme
la source