Docker: Dockerfile intro
programacion·@arkangelb·
0.000 HBDDocker: Dockerfile intro
<html> <p><br></p> <center><img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSuNq4uJpqhY1nKIzMY6iqpAFlSAQ86WFxGbB4fso5sUwFKd_8G2g" width="223" height="226"/></center> <center>Imagen tomada de <a href="https://runnable.com/docs/">runnable</a></center> <p><br></p> <h1>Dockerfile</h1> <p>Se define como un documento de texto que contiene todos los comandos que un usuario puede llamar en CLI para generar una imagen. Utilizando el comando <em><strong>docker build</strong></em> los usuarios pueden construir automáticamente varias instrucciones que se ejecuten sucesivamente en la linea de comandos.</p> <p>Para definir un pequeño ejemplo:</p> <pre><code>FROM busybox RUN echo "Hola"</code></pre> <p>Tal cual dije es un pequeño ejemplo, aqui suceden algunas cosas veamos:</p> <ul> <li>Primero Docker analiza si ya se cuenta con la imagen elegida (busybox) <ul> <li>si no cuenta con la imagen se conecta con el server y la descarga</li> <li>De contar con esta imagen ya de manera local entonces solo se procede a seleccionarla y usarla.</li> </ul> </li> <li>El segundo comando <strong>RUN</strong> solo ejecuta el mensaje de <em>Hola</em> en consola</li> </ul> <p>Como ejecutar dockerfile: #docker build -t nombre:version . (el punto del final es 100% necesari0)</p> <p>Ahora veamos algo un poco mas avanzado y aparte con el uso de uno de los mejores lenguajes de programación <strong>Golang</strong></p> <pre><code>FROM scratch ADD . /app/ WORKDIR /app EXPOSE 8080 CMD ["./main"] </code></pre> <p>Veamos lo que pasa en el ejemplo anterio:</p> <ul> <li>En la primera linea se manda llamar un comando <strong>FROM scratch </strong>recordemos que aqui es donde se manda llamar la imagen del servidor de Docker pero estamos haciendo uso de la imagen mas pequeña que existe en docker llamada<strong> scratch.</strong></li> <li>El segundo comando lo que hace es una copia de todo el directorio actual a una carpeta llamada <strong>app</strong> dentro de la imagen</li> <li><strong>WORKDIR</strong> define que es la carpeta sobre la cual la imagen va a iniciar, es decir, cuando se genere un contenedor de esta imagen estan en la carpeta <strong>app</strong>.</li> <li><strong>EXPOSE</strong> se utiliza para "exponer", es decir, permitir la comunicacion del contenedor creado sea mediante el puerto <strong>8080</strong>, ya que este ejemplo contiene una pagina web.</li> <li><strong>CMD</strong> este comando funciona muy parecido a como lo hace el comando <strong>RUN</strong> la diferencia entre ellos es que <strong>CMD</strong> solo puede suceder una vez y si existe mas de una solo se tomara en cuenta la ultima en el archivo Dockerfile. Entonces este comando se encarga de ejecutar un programa (como lo es en este caso).</li> </ul> <p>Como ejecutar dockerfile: #<a href="https://docs.docker.com/engine/reference/commandline/build/">docker build</a> -p 8080:8080 -t nombre:version .</p> <p><em>*Como extra les dejo como crear ejecutable de programa hecho en Golang para que no requieras que este instalado Go en el SO: CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . </em></p> <p>Espero les ayude in poco a iniciar en el mundo de Docker, son libres de dejar que les gustaría saber o si les gustaría saber mas sobre alguno de los puntos vistos. Les dejo el enlace de mi <a href="https://steemit.com/docker/@arkangelb/docker-basico">post anterior</a> por si quien leer un poco mas de las bases de Docker.</p> <p>Aquí puedes encontrar <a href="https://docs.docker.com/edge/engine/reference/commandline/docker/">documentación oficial</a> de Docker para CLI.</p> <p>Les agradeceré sus votos y comentarios, Saludos. </p> <p><em>Now go and code around!</em> </p> </html>