¿Cómo ejecuto una instancia de Docker desde un DockerFile?

101

Finalmente descubrí cómo poner en funcionamiento la ventana acoplable.

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

Lo vinculé a una instancia de redis, genial.

Esto es desde cero y supongo que cuando creé la instancia de redis

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

extrae la imagen de un repositorio remoto?

NodeBB ofrece un Dockerfile https://github.com/NodeBB/NodeBB/blob/master/Dockerfile No estoy muy seguro de cómo usarlo. Supongo que de alguna manera puedo crear un entorno local llamando a este Dockerfile en mi control remoto.

¿Es esto correcto? Si es así, ¿cómo puedo crear la instancia local apuntando al control remoto?

Michael Joseph Aubry
fuente
se puede construir la imagen ventana acoplable en su entorno local y tire de ella a nivel local
BMW
$ cat Dockerfile | docker build -t <nombre_imagen> - #
cuidado con

Respuestas:

104

Descarga el archivo y desde el mismo directorio ejecuta docker build -t nodebb .

Esto le dará una imagen en su máquina local que se llama nodebb desde la que puede lanzar un contenedor docker run -d nodebb(puede cambiar nodebb a su propio nombre).

Andreas Wederbrand
fuente
1
¿Como funciona esto? Si simplemente tengo el dockerfile, ¿cómo sabe sobre mi proyecto? ¿Hay un enlace en el dockerfile? Entonces supongo que si hay docker maneja empaquetar una nueva imagen que luego puedo migrar a mi servidor. ¿En este empaque absorbe todos los activos de mi proyecto? Lo siento si sueno ignorante, Docker es un concepto nuevo para mí, pero estoy disfrutando aprendiendo.
Michael Joseph Aubry
2
Gracias por cierto y ¿qué representa <> en su ejemplo, por qué eligió <nodebb>?
Michael Joseph Aubry
Ningún contenedor de Docker conoce "su" proyecto, son muy genéricos.
Andreas Wederbrand
3
El comando que proporcionó no funcionó, así que probé `docker build .` y funcionó, pero como no se llama no puedo ejecutarlo. docker build -t <nodebb> .me da file exists: .. Tengo un proyecto existente que vino con un, Dockerfileasí que lo ejecuté dentro de ese directorio.
Michael Joseph Aubry
2
Esto responde a muchas de mis preguntas a través de docs.docker.com/engine/reference/builder
Michael Joseph Aubry
48

No puede iniciar un contenedor desde un Dockerfile.

El proceso es así:

Dockerfile = [ docker build] => Imagen de Docker = [ docker run] => Contenedor de Docker

Para iniciar (o ejecutar) un contenedor, necesita una imagen. Para crear una imagen necesita construir el Dockerfile [1].

[1]: también puede docker importuna imagen de un tarball o de nuevo docker load.

Auzias
fuente
29

Si bien las respuestas anteriores eran utilizables, esto realmente me ayudó, por lo que también lo estoy poniendo aquí.

De la documentación :

En lugar de especificar un contexto, puede pasar un solo Dockerfile en la URL o canalizar el archivo a través de STDIN. Para canalizar un Dockerfile desde STDIN:

$ docker build - < Dockerfile

Con Powershell en Windows, puede ejecutar:

Get-Content Dockerfile | docker build -

Cuando finalice la compilación, ejecute el comando:

docker image ls

Verá algo como esto:

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

Copie su ID de IMAGEN real y luego ejecute

docker run 123456789

Donde el número al final es el ID de imagen real del paso anterior

Si no desea recordar la identificación de la imagen, puede etiquetar su imagen por

docker tag 123456789 pavel/pavel-build

Que etiquetará tu imagen como pavel/pavel-build

Pavel Janicek
fuente
Es sorprendente que en 2020 ese primer fragmento haya tardado tanto en encontrar.
fullStackChris
Esta es solo la respuesta aceptada con más ceremonia.
Michail
21

La solución sencilla y sencilla es:

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

3000 - puede ser cualquier puerto

a3e628814c68 - resultado hash dado por el comando de construcción exitosa

NOTA : debe estar dentro del directorio que contiene Dockerfile .

zhisme
fuente