Como empezar con docker
Docker funciona mediante los conceptos de container e imágenes. Una imagen es una máquina sin instanciar, con todo instalado y que no puede ser modificada una vez creada. Una imagen de Docker parte siempre de otra imagen. Un containter es la instancia de una máquina que parten de una imagen.
Fichero Dockerfile
Para generar una imagen, se debe crea un fichero Dockerfile donde se indica la imagen de la que se parte. Para ver los listados de imágenes disponibles se pueden buscar en https://hub.docker.com/ En el fichero Dockfile se aplican los cambios que sea necesario para nuestro proyecto. Se realizan copia de ficheros mediante el comando ADD (deprecate) o COPY, se pueden establecer variables de entorno con el comando ENV y ejecutar comandos , instalación de paquetes, con el comando RUN.
Fichero Dockerfile
Para generar una imagen, se debe crea un fichero Dockerfile donde se indica la imagen de la que se parte. Para ver los listados de imágenes disponibles se pueden buscar en https://hub.docker.com/ En el fichero Dockfile se aplican los cambios que sea necesario para nuestro proyecto. Se realizan copia de ficheros mediante el comando ADD (deprecate) o COPY, se pueden establecer variables de entorno con el comando ENV y ejecutar comandos , instalación de paquetes, con el comando RUN.
Para que se puedan acceder a los puertos de la imagen se usa el comando EXPOSE en el fichero Dockefile. Como pueden ser los tipicos de ssh y tomcat EXPOSE 22 80 9001
Para finalizar se usa el servicio supervisiord para la ejecución de varios servicios de nuestra imagen y en el que se debe configurar un fichero para lanzar los script correctamente en el puerto 9001
CMD ["/usr/bin/supervisord"]
Comandos de docker para crear un proyecto
Para llevar a cabo la creacion de un sistema docker he eguido los siguientes pasos
- Se crea una imagen, ver fichero Dockerfile, mediante el comando docker build -t usuario/proyecto .
- Se crea un volumen de datos docker volume create --name datosPersistentes para los volumenes
- Se crea el container docker run -p 8080:8080 -p 9001:9001 -v datosPersistentes:/data -v -i -t usuario/proyecto. Desde este momento ya se puede acceder al container. Ver si se dejan todos los puertos abiertos o simplemente el 8080 . Si se hace un control-c se para el container. Si se lanza con la opción -d se desvincula y no se parará el container y si se quiere parar con el comando docker stop idcontainercreado
- Se inicializa el container docker start idcontainercreado, cada vez que se quiera lanzar el container
El comando se puede concatenar para ser mas rápido.
docker build -t usuario/proyecto . && docker run -p 8080:8080 -p 9001:9001 -v datosPersistentes :/data -i -t usuario/proyecto
Los container se pueden para la ejecución y volver a ejecutarlos mediante el comando docker stop y docker start
Para acceder a una máquina docker se puede ejecutar el comando docker exec -i -t idcontainercreado /bin/bash
Es recomendable borrar las imágenes y container ya que ocupan mucho espacio.
Por último se puede publicar una imagen en un repositorio publico como el de https://hub.docker.com con el comando docker login --username=usuario --email=miemail@loquesea.nose
Se hace login en el sistema y con el comando
docker push usuario/proyecto
Se publica la imagen
Comandos útiles de docker
Ver todos los container
docker ps -a
Ver la version de docker
docker -v
Borrar los container
docker rm idimagen
Borra Todos los container que cumplen como nombre del container ‘condicion’
docker ps -a | grep ‘condicion' | awk '{print $1}' | xargs --no-run-if-empty docker rm
Borrar todos los volúmenes. Cuidado con borrar los datos del container
docker volume ls | awk '{print $2}' | xargs docker volume rm
Borrar todas las imágenes. No borrará los container en start
docker images | grep condition | awk '{print $3}' | xargs docker rmi
Copiar ficheros desde el host a un container
docker cp foo.txt mycontainer:/foo.txt