Apuntes Docker - Sergio Clavijo

APUNTES SOBRE DOCKER La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software q

Views 120 Downloads 7 File size 582KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

APUNTES SOBRE DOCKER La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues. Docker, me permite meter en un contenedor (“una caja”, algo auto contenido, cerrado) todas aquellas cosas que mi aplicación necesita para ser ejecutada (java, Maven, tomcat…) y la propia aplicación. Así yo me puedo llevar ese contenedor a cualquier máquina que tenga instalado Docker y ejecutar la aplicación sin tener que hacer nada más, ni preocuparme de qué versiones de software tiene instalada esa máquina, de si tiene los elementos necesarios para que funcione mi aplicación , de si son compatibles… Yo ejecutaré mi aplicación software desde el contenedor de Docker, y dentro de él estarán todas las librerías y cosas que necesita dicha aplicación para funcionar correctamente.

Guía de comandos:  

  

docker search : Buscar imágenes en docker hub docker run : Crear un contenedor de la imagen o -it: interactivo o --name: darle nombre o --detach: no mantener en el cmd, luego se puede acceder con attach o --publish: definir puertos, ej --publish puerto_local:puerto_contenedor --publish 8080:80, o -e definir variable de entorno, o --link nombrecontenedor:alias, o --network poner el contenedor en una red específica, o --rm eliminar el contenedor cuando este termine su ejecución o --net : poner el contenedor en una red específica (igual a -network) o --net-alias : poner un alias del contenedor en la red o -v : Definir el volumen para la imagen, ej -v mysql-data:/var/lib/mysql (esto es un named volume) docker pull : Descargar una imagen de docker hub docker ps : Mostrar contenedores en ejecución, -a: mostrar todos los contenedores (incluye terminados) docker rm : Eliminar un contenedor

              

              

docker rmi : Eliminar una imagen (no deben existir contenedores de la misma) docker start : Iniciar un contenedor detenido docker stop : Detener un contenedor que está en ejecución docker attach : Acceder al bash de un contenedor en ejecución docker commit : Crea una imagen personalizada a partir de un contenedor (con sus modificaciones, ej programas instalados, etc) docker build -t : Crea una imagen a partir de un Dockerfile docker logs : Muestra los logs de un contenedor docker top : Muestra los procesos que se están ejecutando en un contenedor en ejecución docker system prune : Borrar todos los contenedores, caché, entre otros docker history : Mostrar las diferentes "capas" de que se compone una imagen determinada docker tag : "Taggear" una imagen (no reemplaza tags existentes) docker exec -it bash : Acceder al bash de un contenedor en ejecución (ejecutar un comando) docker inspect : Mostrar información detallada de contenedor docker cp : Copiar archivos del interior de un contenedor al equipo host docker inspect : Detalles de la configuración del contenedor o --format : Ayuda a buscar entre la configuración, ej (--format '{{ .NetworkSettings.IPAddress }}') docker stats : Estadísticas de rendimiento para todos los contenedores docker port : Revisión rápida de puertos de un contenedor docker network ls : Mostrar todas las redes docker network inspect : Detalles de la configuración de la red docker network create --driver : Crear una red, si no se pone --driver, por defecto lo toma como "bridge" docker network connect : Poner un contenedor en la red docker network disconnect : Retirar un contenedor de la red docker history : muestra los cambios en las capas de la imagen, image layers docker image inspect : Detalles de la configuración de la imagen docker image tag : "Taggea" una imagen docker image push : Carga una imagen (personalizada) a DockerHub docker login : Para autenticarse ante DockerHub docker logout : Para cerrar la sesión ante DockerHub docker volume inspect : inspeccionar configuración de un volumen docker volume create : Crear un nuevo volumen

    

docker volume prune : Elimina todos los volúmenes (No usados actualmente por contenedor?) docker deploy --orchestrator kubernetes --compose-file /ruta/al/docker-compose.yml docker-compose up : Setup volumes, network and start all containers (services) docker-compose down : Stop all containers (services) and remove all, INCLUDING VOLUMES AND NETWORKS (Creados en él, es decir los external no) docker-compose config : Muestra el contenido validado de docker-compose.yml, se le puede agregar > name.yml para escribir la salida a un archivo (puede ser útil para kubernetes, komposer up)

Notas:      

       

Para los ids, se puede poner solo el inicio, no es necesario todo el ID Para especificar las imágenes si no se le pone tag (:), por defecto toma "latest", por ej "ubuntu:14.04", "ubuntu:latest" Para salir de un contenedor interactivo sin detenerlo se presiona Control + P + Q Para imagen ubuntu para ejecutar comandos y sale el error "command not found", primero se debe ejecutar un apt-get update Docker build (Dockerfiles) es mejor que docker commit Al hacer cambios en un Dockerfile, no es necesario eliminar la imagen previa, Docker detecta los cambios y realiza los ajustes automáticamente, los pasos que no cambiaron los obtiene de caché Cuando en un DockerFile se extiende de una imagen que ya tiene definido su CMD, y este no debe variar, no es necesario ponerlo en nuestro Dockerfile En Dockerfile, "comando" WORKDIR establece el directorio desde donde se van a ejecutar todos los comandos que le sigan y hasta que se cambie el WORKDIR En Dockerfile, "comando" VOLUME establece un path en el contenedor que será el volumen En Dockerfile, COPY . . copea todo lo de la carpeta actual a la carpeta especificada previamente en el WORKDIR Bind Mounts : Es vincular una carpeta host a carpeta en el contenedor. Volumes? : Ubicación especial por fuera de los contenedores, es "más" administrada por docker, persistent data Los volúmenes solo pueden ser eliminados manualmente Si a un contenedor que maneje volúmenes no se le define explícitamente un volumen (-v name:path), crea un volumen cada vez que se instancie un contenedor

  

Bind mounting, si es en linux sería ej /var/etc/somepath:/var/lib/mysql/data, y en windows //c/mysql/data:/var/lib/mysql/data (Note los slash) $(pwd) : pone el working directory en la consola En los volumenes se puede definir el permiso de acceso ej. //x/xampp/mysql/config.ini:/var/mysql/config.ini:ro (ro: readonly)

Docker Compose:  

  

docker-compose up : Cargar el archivo docker-compose.yml o -d : dettached, no mostrar logs de los servicios (containers) docker-compose down : Detiene y elimina los contenedores del docker-compose.yml o -v : eliminar volumenes o --rmi all|local : eliminar imágenes, all todo hasta dependencias, local solo las definidas directamente en el compose docker-compose ps : Muestra los contenedores (del archivo) que se están ejecutando actualmente docker-compose top : Muestra los procesos en ejecución de los contenedores (en ejecución) del docker-compose.yml docker-compose build : Construye las images que se deban construir que se definan en el archivo (build) o --build : Reconstruye las imágenes

Ejemplo de archivo docker-compose.yml version: '3'

services: product-service: #build: ./product build: context: . dockerfile: nginx.Dockerfile #Se le puede pasar el nombre personalizado del Dockerfile (por defecto Dockerfile) image: nombre-imagen #Si está definido build e image en el mismo servicio, el image será el nombre de la imagen del Dockerfile

volumes: - ./product:/usr/src/app ports: - 5001:80

website: image: php:apache volumes: - ./website:/var/www/html ports: - 5000:80 depends_on: - product-service #Ayuda a darle a entender a docker que servicios (o containers) debe cargar primero, ej en este caso inicia primero product-service

Fuentes y recursos adicionales  



Documentación oficial: https://docs.docker.com/ Curso gratis de Docker, de Miguel Arranz: https://www.youtube.com/watch?v=AR9grGcukPE&list=PLfW3im2fiA7W9F4DbjmRDIZgA Hsea20ON https://www.javiergarzas.com/2015/07/que-es-docker-sencillo.html