Docker.pdf

Vista previa de texto
Problema:
Ejecutar contenedores en modo interactivo, hacer algunos cambios y para luego
comitear estos en una nueva imagen, funciona bien. Pero en la mayoría de los
casos, tal vez quieras automatizar este proceso de creación de nuestra propia
imagen y compartir estos pasos con otros.
Solución:
Para automatizar el proceso de creación de imágenes Docker, prepararemos
tales paso en un archivo de manifiesto, llamado Dockerfile. Este archivo de
texto está compuesto por una serie de instrucciones que describe cuál es
la imagen base de la que el nuevo contenedor se basará, cuáles pasos necesitan
llevarse a cabo para instalar las dependencias de la aplicación,
cuáles archivos necesitan estar presentes en la imagen, cuáles puertos
serán expuestos por el contenedor y cuáles comando ejecutar cuando se ejecuta
el contenedor, entre otras cosas.
Para ilustrar esto, crearemos un simple Dockerfile. La imagen resultante nos
permitirá crear un contenedor que ejecuta el comando /bin/echo.
FROM ubuntu:14.04
ENTRYPOINT ["/bin/echo"]
La instrucción FROM dice de cuál imagen base partimos para crear la nuestra. En
este caso ubuntu:14.04, que la primera vez será descargada del repositorio
del Docker Hub.
La instrucción ENTRYPOINT dice cuál es el comando a ejecutar cuando el
contenedor basado en esta imagen, sea ejecutado.
Para hacer build de esta imagen, ejecutamos docker build .
Hecho el build, ejecutamos un nuevo contenedor a partir de esta imagen:
docker images
REPOSITORY
VIRTUAL SIZE
<none>
187.9 MB
TAG
IMAGE ID
CREATED
<none>
99fac58824c2
5 minutes ago
docker run 99fac58824c2 Hi Docker!
Hi Docker !
Lo que hemos hecho es ejecutar un contenedor a partir de la imagen
previamente creada, pasándole como argumento Hi Docker!. El contenedor al
ejecutarse, corrió el comando definido por el ENTRYPOINT, seguido por el
argumento anteriormente mencionado. Una vez que el comando
ha finalizado (la tarea finaliza), el contenedor es finalizado también.
Tambien podemos usar la instrucción CMD en un Dockerfile. Esta tiene la ventaja
que se puede sobreescribir cuando este se ejecuta, pasándolo como argumento.
Por ejemplo:
FROM ubuntu:14.04
