lunes, 16 de septiembre de 2019

Que es un DockerFile

El DockerFile nos permitirá definir las funciones basicas del contenedor partiendo
de la construccion de una imagen.
Debemos crearlo dentro de la carpeta site, junto con el source del sitio en Jenkins
............................

Ingredientes de un DockerFile

FROM: Define una imagen base para crear nuestra nueva imagen con DockerFile
-FROM repositorio:tag
-FROM Ubuntu:16:04

MANTAINER: Hace referencia al creador de la receta
-MANTAINER user mail@cuenta.comandos
-MANTAINER kimberling pikim@gmail.com

RUN: Nos permite ejecutar comandos en la imagen base antes de ser creada dentro del contenedor
-RUN apt-get update && apt-get install app
-RUN apt-get update && apt-get install apache2

ADD/COPY: Nos permite agregar o copiar archivos desde el equipo local a la imagen
-ADD FILE.ext /DIR/DIR/DIR
-ADD index.html /var/www/html

EXPOSE: Nos permite exponer por defecto un puerto para el contenedor
-EXPOSE NUM-PUERTO
-EXPOSE 8080

CDM: Ejecutar una sentencia o accion por defecto (FOREGROUND) al crear el contenedor es finalidad
-CDM ["/usr/sbin/apache2", "-D", "FOREGROUND"]

Crear imagen en Docker a partir de un DockerFile

En este espacio voy a detallar como se crea una imagen a apartir de un archivo DockerFile

Primero entramos en un terminal y creamos un directorio donde vamos a crear nuestro archivo
#cd /home/usuario/
#mkdir testdocker

Entramos en el directorio creado anteriormente


#cd testdocker/

Procedemos a creamos el archivo Dockerfile
#nano Dockerfile

Y agregamos el siguiente contenido del DockerFile
FROM ubuntu:latest

RUN apt-get -y update; \
    apt-get -y upgrade; \
    apt-get -y install apt-utils \
    nano \
    htop;
RUN apt-get -y install dstat

CMD ["bash"]



Una vez guardado el Dockerfile procedemos a crear la imagen con el siguiente comando

Ejemplo sintaxis
#docker build -t "nameimage:dockerfile"

Creacion de la Imagen
#docker build -t "imgubuntu:dockerfile"


Para verificar la cracion de la imagen colocamos
#docker images

Ahora vamos a crear un container a a partir de la imagen creada con un dockerfile con el siguiente comando

Ejemplo sintaxis
#docker run -dti --name name-container ID-imagen

Creación del container
#docker run -dti --name contubuntu 02f37139ae36


Consultamos el container
#docker ps
INER ID                  IMAGE               COMMAND         CREATED             STATUS              PORTS          NAMES
c83e738fb69e        02f37139ae36        "bash"           22 seconds ago      Up 19 seconds                            contubuntu



Vamos acceder al contenedor y verificar las aplicaciones instaladas

Sintaxis
#docker exec -i -t name-container /bin/bash

Acceder al container
#docker exec -i -t contubuntu /bin/bash

Una vez dentro del container consultamos con un comando su instalacion 
#dstat

viernes, 13 de septiembre de 2019

Como obtener informacion de un container Docker

Para obtener información de los container de docker como ID, fecha de creación, estado del container, imagen que utiliza, IP, etc, se debe correr el siguiente comando

#docker inspect CONTAINER_ID

#docker inspect CONTAINER_ID | grep "campo_a_consultar"

#docker inspect CONTAINER_ID | grep "IPAddress"

Guardar y restaurar una imagen en Docker

En este articulo vamos a ver como podemos guardar una imagen de docker y restaurarla en otro servidor

Primero procedemos a listar las imágenes que tenemos actualmente en nuestro servidor docker
#docker images

arrojaría lo siguiente


GUARDAR
Procedemos a comprimir la imagen, vamos a trabajar la imagen de nginx,
entramos al directorio donde guardamos las imágenes y con el siguiente comando la comprimimos
#cd /var/lib/docker/images

Y corremos el siguiente comando 
#docker save nombre-de-imagen | gzip > nombre-de-imagen.tar.gz

Ahora procedemos a guardar el container
#docker save -o  /ruta/nombre-del-container.tar nombre-del-container

Puedes utilizar este comando 
#docker save nombre-del-container > /ruta/nombre-del-container.tar

RESTAURAR
Como ultimo paso vamos a restaurar la copia en el servidor que deseamos con el siguiente comando
#docker load -i /ruta/nombre-del-container.tar

Puedes utilizar este comando  
#docker load < /ruta/nombre-del-container.tar

Debemos ubicarnos en el directorio donde guardamos las imágenes con el siguiente comando
#cd /var/lib/docker/images

Y ejecutar el siguiente comando
#docker load -i nombre-de-imagen.tar.gz

viernes, 6 de septiembre de 2019

Como instalar Docker en Debian

Verificamos la version del kernel
#uname -rm 

Verificamos la version del sistema operativo
#lsb_release –a

Actualizar el índice de paquetes
#apt-get update

Instalacion de paquetes complementarios
#apt-get install -y --no-install-recommends \
    linux-image-extra-$(uname -r) \
    linux-image-extra-virtual
   
IMPORTANTE : Al usar comandos con la opción -y todas las preguntas interactivas se
contestan automáticamente con “Sí”. La opción --no-install-recommends impide que Linux
instale de forma automática los paquetes recomendados.   

Instalacion de herramientas basicas
apt-get install htop multitail aptitude locate net-tools open-vm-tools ssh

Instalacion de herramientas necesarias para instalar docker
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Asignando permisos al usuario en el grupo de docker
usermod -aG docker username 

Instalamos la clave del repositorio oficial de docker en nuestro gestor de paquetes para posteriormente proceder a la descarga del software
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

Verificación de la clave con
apt-key fingerprint 0EBFCD88

El resultado que podemos esperar es el siguiente
pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22

Ahora añadimos el repositorio en el fichero de sources de apt del sistema
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

Actualizar el índice de paquetes
apt-get update

Procedemos con la instalación de docker con el comando
apt-get install docker-ce docker-ce-cli containerd.io


Una vez finalizada la instalacion procedemos con el registro en hub.docker
-> https://hub.docker.com/

Al tener usuario y password en https://hub.docker.com/ se procede a ir nuevamente al terminal y acceder de la siguiente forma para ingresar las credenciales
docker login

Luego de ingresar procedemos a crear nuestro primer container de pruebas
 docker run hello-world

Debe arrojar lo siguiente: 

# docker run hello-world
 
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.
 

jueves, 5 de septiembre de 2019

Creando un pipeline usando dockerfile en un jenkinsfile

Mediante este ejemplo basico te explicare como crear un pipeline en jenkins utilizando un dockerfile 




Primero creamos el archivo dockerfile
nano /proyect/dockerfile

Incorporamos el contenido del archivo
FROM ubuntu:16.04

MANTAINER khernandez khernandez@gmail.comandos

RUN apt-get update
RUN apt-get -y install apache2
RUN apt-get install wget
RUN apt-get unzip
RUN wget http://github.com/proyecto/directorio/archivos/file.zip
RUN unzip file.zip
RUN cp -a /directorio/archivos/* var/www/html

EXPOSE 82

CDM /usr/sbin/apache2ctl -D FOREGROUND

Luego creamos el archivo jenkinsfile
nano /proyect/jenkinsfile


EJEMPLO :
pipeline {
    agent any
    stage {
        stage ('Example') {
            steps {
                echo 'Hello world'
            }
        }
    }
}
Colocamos el contenido del archivo, incorporamos el agente dockerfile en el archivo jenkinsfile

pipeline {
    agent {
        dockerfile true
    }
    stage {
        stage ('Prueba') {
            steps {
                echo 'Verificando archivo'
                sh 'cat /var/www/html'
            }
        }
    }
}