Come eseguo un'istanza docker da un DockerFile?


94

Finalmente ho capito come far funzionare 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

L'ho collegato a un'istanza di Redis, fantastico.

Questo è da zero e presumo che quando ho creato l'istanza redis

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

tira l'immagine da un repo remoto?

NodeBB offre un Dockerfile https://github.com/NodeBB/NodeBB/blob/master/Dockerfile Non sono proprio sicuro di come usarlo. Presumo di poter in qualche modo creare un ambiente locale chiamando questo Dockerfile sul mio telecomando.

È corretto? In caso affermativo, come posso creare l'istanza locale che punta al remoto?


puoi creare l'immagine finestra mobile nel tuo ambiente locale e estrarla localmente
BMW

$ cat Dockerfile | docker build -t <image_name> - # attenzione al trattino
jbobbylopez

Risposte:


95

Scarica il file e dalla stessa directory esegui docker build -t nodebb .

Questo ti darà un'immagine sulla tua macchina locale chiamata nodebb da cui puoi avviare un contenitore docker run -d nodebb(puoi cambiare nodebb con il tuo nome).


1
Come funziona? Se ho semplicemente il dockerfile come fa a sapere del mio progetto? C'è un collegamento nel dockerfile? Quindi presumo se ci sono maniglie di finestra mobile che impacchettano una nuova immagine che posso quindi migrare sul mio server. In questo packaging assorbe tutte le risorse del mio progetto? Scusa se sembro ignorante, docker è un nuovo concetto per me ma mi piace imparare.
Michael Joseph Aubry

2
Grazie a proposito e cosa rappresenta <> nel tuo esempio perché hai scelto <nodebb>?
Michael Joseph Aubry

Nessun contenitore Docker conosce il "tuo" progetto, sono molto generici.
Andreas Wederbrand

3
Il comando che hai fornito non ha funzionato, quindi ho provato `docker build .` e ha funzionato, ma poiché non è denominato non posso eseguirlo. docker build -t <nodebb> .mi dà file exists: .. Ho un progetto esistente fornito con un Dockerfilequindi l'ho appena eseguito all'interno di quella directory.
Michael Joseph Aubry

2
Questo sta rispondendo a molte delle mie domande anche se docs.docker.com/engine/reference/builder
Michael Joseph Aubry

45

Non è possibile avviare un contenitore da un Dockerfile.

Il processo va in questo modo:

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

Per avviare (o eseguire) un container è necessaria un'immagine. Per creare un'immagine è necessario creare il Dockerfile [1].

[1]: puoi anche docker importun'immagine da un tarball o di nuovo docker load.


26

Sebbene le risposte precedenti fossero utilizzabili, questo mi ha davvero aiutato, quindi lo metto anche qui.

Dalla documentazione :

Invece di specificare un contesto, puoi passare un singolo Dockerfile nell'URL o reindirizzare il file tramite STDIN. Per reindirizzare un Dockerfile da STDIN:

$ docker build - < Dockerfile

Con Powershell su Windows, puoi eseguire:

Get-Content Dockerfile | docker build -

Al termine della compilazione, eseguire il comando:

docker image ls

Vedrai qualcosa del genere:

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

Copia il tuo ID IMMAGINE effettivo e poi esegui

docker run 123456789

Dove il numero alla fine è l'ID immagine effettivo del passaggio precedente

Se non vuoi ricordare l'ID dell'immagine, puoi taggare la tua immagine con

docker tag 123456789 pavel/pavel-build

Che etichetterà la tua immagine come pavel/pavel-build


Incredibile che nel 2020 ci sia voluto così tanto tempo per trovare quel primo frammento.
fullStackChris

Questa è solo la risposta accettata con più cerimonie.
Michail

18

La soluzione semplice e immediata è:

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

3000 - può essere qualsiasi porta

a3e628814c68 - risultato hash fornito dal comando build riuscito

NOTA : dovresti trovarti nella directory che contiene Dockerfile .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.