Arquitectura y Componentes

DockerHost Es el servidor o equipo donde va a correr Docker.

Docker CLI: Cliente que usa comandos para manejar docker, manejar imagenes, volumenes y redes

Rest API: API para administrar docker desde peticiones GET o POST por ejemplo docker ps es GET /containers/json ideal para Jenkins

Docker Daemon: Es el demonio del servidio de docker

Que son los contenedores docker? Un contenedor es un proceso que corre sobre el servidor, ocupa menos recursos que levantar todo un sistema operativo. Ejemplo, si solo necesito Apache no puedo usar un contenedor apache sin necesidad de virtualizar un sistema operativo. Un Contenedor ejecuta una imagen. Los contenedores pueden contener (Imagenes, Volumes, y Redes) Los contenedores se puede editar, pero solo de manera temporal. Para que sean Persistentes se hacen Volumenes

Volumenes en Docker

Los volumenes se utilizan para poner datos permanentes en un contenedor.

Existen 3 tipos

Host: Se indica un directorio en el docker host.

Anonimos: Docker genera un volumen random.

Volumenes Nombrados: Volumenes que nosotros creamos pero lo maneja docker.

Que son las imagenes docker?

Es un paquete que tiene la informacion necesaria para que una aplicacion se pueda ejecutar -Una imagen esta compuesta por capas FROM, RUN, CMD las imagenes son solo de Lectura y no se pueden modificar!

  • Podemos crear imagenes utilizando un fichero de texto llamado Dockerfile (Algo asi como una receta) Ejemplo

      FROM Centos:7
          
      RUN yum -y install httpd
          
      CMD ["apachectl","-DFOREGROUND"]
    

El DockerFile tiene varias capas

FROM Establece la imagen base FROM <image>[:<tag>][AS<name>] Puede aparecer varias veces dentro del dockerfile para crear multiples imagenes o etapas de copilacion. Se puede asignar un nombre a la etapa de copilacion con AS los TAGS son opcionales, si no se indica se toma por defecto la ultima version de la imagen.

RUN Se utiliza para correr comandos <command> Utiliza Shell por defecto /bin/sh -c o cmd /S /C en Windows Los comandos deben ser Desatendidos ejemplo yum -y install

ENTRYPOINT Recibe como parametro lo que ponemos en el CMD Permite configurar un contenedo para que sea ejecutable.

ENTRYPOINT["executable", "param1", "param2"]

CMD Es el comando que se usa para levantar nuestra aplicacion, debe levanta en primer plano para mantener vivo el contenedor.

CMD["executable", "param1", "param2"]

Solo puede haber un CMD en un dockerfile

Ejemplo

syntax=docker/dockerfile:1
FROM node:12-alpine
RUN apk add --no-cache python2 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

Construyendo Una Imagen

linux# vim Dockerfile

Vamos a trabajar a partir de un ubunto image Vamos a actualizar e instalar python 3 Copiamos el script python que queremos que ejecute. #Podriamos usar el ENTRYPOINT para poder ejecutar el .py

FROM ubuntu:lastest

RUN apt update && apt install -y python3

COPY scriptpython.py /scriptpython.py

#ENTRYPOINT ["python3"]

#CMD ["/scriptpython.py"]

CMD ["python3", "/scriptpython.py"]

linux# docker build -t NOMBREIMAGE:lastest .

(*el . hace referencia a la ruta donde se encuentra el dockerfile*)

Al ejecutar luego el comando

linux# docker images

Deberiamos ver la imagen creada

Si el dockerfile tiene un nombre diferente ejmeplo dockerfilepython

linux# docker build -t NOMBREIMAGE:lastest -f dockerfilepython

IMPORTANTE: El directorio donde esta el dockerfile debe estar solo el dockerfile de lo contrario carga todo lo que esta en el directorio, para evitar eso podemos usar el .dockerignore

.DOCKERIGNORE Ignora ficheros o archivos que no se utilizaran para la construccion de la imagen de modo que la construccion de la imagen sera mas rapida!

Dentro del .dockerignore agregamos los archivos a omitir en la contruccion del docker image. (Archivos que NO queremos que esten en la imagen)

COPY/ADD Se utilizan para copiar archivos o directorios al contenedor.

COPY/ADD[--chown=<user>:<group>]<src>....<dest>

La diferencia entre COPY y ADD es que con ADD se puede copiar un fichero desde una URL. Incluso si el src es un archivo comprimido lo descomprime en el destino.

Para descargar Imagenes docker vamos a la web Docker Hub

Docker hub testeta las imagenes subidas

Las imagenes mas utilizadas suelen estar en alpine un SSOO que ocupa entre 5 y 10 Megas

Para descargar una imagen usamos el comando docker pull ngix

## Redes Las redes docker es toda la configuracion de red que utilizan los contenedores para comunicarsen entre si. Hay varios tipos.

Bridge Red estandar.

Hosts Todas las tarjetar de red y el nombre de nuestro docker host se asignaran al contenedor.

None No se asigna ninguna red al contenedor

## COMANDOS MAS USADOS EN DOCKER

Ver contenedores activos

docker ps

Ver ultimo contenedor creado

docker ps -l

Ver contenedores activos y inactivos

docker ps -a

Crear un contenedor

docker run

Tenemos varios argumentos que podemos utilizar

--name NOMBRE CONTENEDOR
-d CORRE CONTENEDOR SEGUNDO PLANO
-p EXPONE EL PUERTO DEL CONTENEDOR
-network INDICARLE UNA RED AL CONTENEDOR (POR DEFAUL BRIDGE)
--ip ASIGNAR IP AL CONTENEDOR
--hostname NOMBRE PARA EL CONTENEDOR
--memory LIMITE DE MEMORIA PARA EL CONTENEDOR
--cpuset-cpus LIMITE DE NUMERO DE CPUS QUE PODRA USAR EL CONTENEDOR

Para acceder al bash de un contener usamos el siguiente comando

docker exec -it NOMBRECONTENEDOR bash

Ver el consumo de recursos de un contenedor

docker stats NOMBRECONTENEDOR

Renombrar un contenedor

docker rename NOMBREVIEJO NOMBRENUEVO

Eliminar Contenedor Utilize -f para eliminar contenedor que esta en ejecucion

docker rm CONTEDOR

Ver los Docker logs -f permite verlos en tiempo real -t añade timestamp al log (hora de cada log)

docker logs -f -t

Docker Commit Crear una imagen apartir de un contenedor No es recomendable

 docker commit IDCONTENEDOR NOMBRE

Docker Inspect inspecciona toda la informacion de un contenedor, Redes, Volumenes etc

 docker inspect CONTENEDOR

<
Previous Post
Comandos Chmod y Chowm
>
Next Post
Que es y como usar Comandos Crontab