Docker

Docker





Disk image location: /Users/enricsarradell/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw

Docker: installation and use

Ejemplo sencillo con github-dockerhub para forma de trabajar


    • Resources
    • En Tools seleccionar Docs
    • Seleccionar Get Docker en la parte izquierda
    • Seleccionar Docker Engine - Community
    • Elegir MacOS para Mac  ó Linux si lo queremos en el servidor 
    • Cuando instalamos Docker:
      • En el Mac también se instala Docker Compose
      • En Linux no se instala Docker Compose. Hay que instalarlo 
    • Después de instalar ejecutamos: docker run hello-world.  y nos tiene que salir los siguiente mensajes:
    • Hello from Docker!
      This message shows that your installation appears to be working correctly.
      To generate this message, Docker took the following steps:
      1. The Docker client contacted the Docker daemon.
      2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
      (amd64)
      3. The Docker daemon created a new container from that image which runs the
      executable that produces the output you are currently reading.
      4. The Docker daemon streamed that output to the Docker client, which sent it
      to your terminal.
      To try something more ambitious, you can run an Ubuntu container with:
      $ docker run -it ubuntu bash
      Share images, automate workflows, and more with a free Docker ID:
      https://hub.docker.com/
      For more examples and ideas, visit:
      https://docs.docker.com/get-started/

  • Instalar extensión "Docker" de Microsoft en Visual Studio Code
    • Crear carpeta
    • Crear archivo Dockerfile
    • Teclear FROM < teclear ubuntu o node> y siempre cojer la version oficial
    • tecleamos ubuntu:
    • Si presionamos Control + espaciador nos sugerirá la versión que queremos  
    • En el terminal podemos pedir ayuda de los comandos:
      •  docker --help    (todos los comandos
      • docker build -- help   (para el comando build)


  • Dockerfile: Crea imágenes. Mas sencillo que docker commit. 
      • Comandos principales
        • FROM: Definir una imagen base para crear nuestra nueva imagen con Dockerfile 
          • FROM Ubuntu:16.04
        • MAINTAINER: Creador del Dockerfile
          • MAINTAINER ENRIC enricsarra@gmail.com
        • RUN: Nos permite ejecutar comandos en la imagen base antes de ser creada
          • RUN apt-get update && apt-get install apache2
        • ADD/COPY: Nos permite agregar o copiar archivos desde el equipo local a la imagen
        • ADD index.html  /var/www/html
        • EXPOSE: Nos permite exponer por defecto un puerto para el contenedor
          • EXPOSE 8080
        • CMD: Ejecutar acción por defecto al crear el contenedor, es la finalidad.
          • CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
    • Ejemplo sencillo
      • Creamos la carpeta docker (puede ser cualquier nombre de carpeta)
      • Creamos el fichero example.sh que contiene: echo "Called example.sh"
      • Crear el fichero Dockerfile dentro de la carpeta docker
        • FROM ubuntu:18.04
        • RUN mkdir /mi-carpeta
        • WORKDIR /mi-carpeta
        • RUN app-get update
        • RUN app-get install -y nginx
        • RUN echo "hola aqui estoy"
        • ADD example.sh /mi-carpeta/
        • ADD start_app.sh /mi-carpeta/
        • RUN chgmod +x example.sh    
        • RUN ./example.sh
      • Cómo trabajamos en el terminal para crear la imagen 
        • Nos situamos en la carpeta docker
        • docker build .   (construye la imagen dentro de la carpeta docker a partir del fichero dockerfile)
          • Si no nos situamos en la carpeta
            • docker build  /ruta absoluta de la carpeta
          • Si queremos poner un tag
            • docker build -t my-App
          • Ejemplo completo
            • docker build -t my-App /ruta absoluta de la carpeta
        • Se van generando las capas sobre la imagen de ubuntu a medida que va ejecutando las líneas del fichero Dockerfile.
        • Vemos que va poniendo un identificador a cada capa
        • Al finalizar vemos algo parecido a Successsfully built d29a554f9d08
        • docker images  (vemos las imágenes dentro de mi ordenador)
        • Localizamos la  Image Id d29a554f9d08
        • docker run -it d29a554f9d08 bash  (Genera el contenedor para ejecutar la imagen. -it es para que sea un proceso interactivo). Con bash indicamos que comando queremos ejecutar dentro de ese contenedor.
        • En este momento nos encontramos dentro de esta imagen y nos aparece algo como:
        • root@d29a554f9d08:/mi-carpeta#
        • Si tecleamos ls veremos los archivos example.sh y start_app.sh que teníamos en nuestra carpeta docker
          • example.sh     start_app.sh
        •  Si tecleamos pwd vemos que estamos en el directorio: mi-carpeta
          • /mi-carpeta
        • Puedo teclear: service nginx stop
        • Puedo teclear: service nginx start
        • Puedo modificar el fichero example.sh con nano
          • apt-get install nano   (lo instalo si no lo tengo en el contenedor)
          • nano example.sh   (modifico echo "Called example.sh" por echo "Called from the container"
        • ./example.sh    (ejecuto el fichero y nos aparece "Called from the container"
        • exit   (salimos del contenedor y lo finalizamos)
          • Al pulsar Ctrl+p+q salimos del contenedor pero no lo finalizamos
          • De esta manera podemos volver a entrar con docker attach id-del contenedor
        • docker ps   (visualiza los contenedores activos. Al salir no debemos ver el contenedor con el que estamos trabajando.
        • docker ps -a  (historial contenedores)
        • docker run -it d29a554f9d08 bash   (ejecutamos de nuevo el contenedor)
        • Vemos que example.sh tiene el contenido original que está en Dockerfile y no tiene instalado nano.
        • Es decir: las modificaciones que hacemos se pierden. 
        • docker ps -a    (vemos el historico de contenedores o mejor dichos contenedores detenidos)
          • 2 contenedores a partir de la misma imagen
        • docker rm f9xxxxxxxx    (eliminamos el contenedor que queramos. Si se está ejecutando no se elimina)
        • docker rm -f f9xxxxxxxx  (forzamos para eliminarlo aunque se esté ejecutando)
        • docker build . --tag example:1   (ponemos un tag a la imagen)
        • docker build . --tag example:1 --no-cache   (no utiliza ninguna de las imágenes que tiene en cache y empieza de nuevo toda la construcción de la imagen desde cero. Es útil cuando modificamos el fichero Dockerfile
        • docker run --name example_1 -it example:1 bash  (creamos un contenedor con nombre a partir de una imagen con el tag example:1)
        • docker rm  -f   $(docker ps -aq)    (elimina todos los contenedores que estén corriendo)
        • docker rmi d29a554f9d08  (elimina la imagen con éste Image  Id y sus dependencias que podemos ver com docker images)
        • Importante: Este ejemplo es muy sencillo. hemos hecho el run -it para poder entrar en el contenedor, revisar, debug etc y al salir se cierra. Si fuera un node express el servidor seguiría funcionando. Más adelante se verá con mas detalle

  • Volúmenes
    • Ejemplo:
      • docker run --name node-nodemon -p 49160:8080 -v /Users/enricsarradell/Desktop/Curso-Docker/docker1-node:/usr/src/app   node-nodemon:1.0.0
    • Docs volumen en Docker
    • Tips
    • Otro tip
    • En el Mac se encuentran en /Users/enricsarradell/Library/Containers/com.docker.docker/Data/vms

Entradas populares de este blog

Angular

Spotify

Document Object Model (DOM)