Docker Container Primeros Pasos

Primero tenga en cuenta:

Contenedores:
Es un entorno configurado con aplicaciones y procesos, incluso su propio sistema operativo, pero no su propio kernel, del cual depende del anfitrion. Son utilizados cuando existe la necesidad de ejecutar una aplicación (servicio) y no una maquina virtual. Un contenedor es un método de “virtualización” a nivel de Sistema Operativo. Es un entorno aislado especialmente utilizado para entornos con múltiples hardware y bajo el mismo sistema operativo.
Cómo funciona:
Los componentes espaciales del núcleo, son proporcionados por el sistema operativo anfitrion, una imagen contiene todo lo que se necesita para ejecutar un contenedor.
Componentes:

  • NameSpaces: Ejecutar procesos (PID), usuarios, red, .. en contenedor. Aislar recursos
  • Cgroups: Limitar recursos
  • UnionFS: fusionar diferentes sistemas de archivos en un sistema de archivo virtual “tmpfs”

Diferencia entre contenedor y virtualización:

  • Utilizamos contenedores si desea utilizar varias copias de una sola aplicación
  • Utilizamos contenedores si desea trabajar con microservicios
  • Utilizamos máquinas virtuales si desea flexibilidad ejecución múltiples aplicaciones
  • Utilizamos máquinas virtuales si desea ser capaz de funsionar en cualquier Sistema Operativo

Limitaciones Contenedores:

  • Por defecto no son múltiplataforma. El contenido del contendor depende del Kernel del anfitrion
  • Si se cae el núcleo (Kernel), se cae todos los contenedores
  • Posible crecimiento desordenado (Aunque existen orquestadores como Kubernetes)

EL presente instructivo tiene como finalidad dar a conocer una instalación básica de Docker y los primeros pasos para su ejecución.

Requisitos:

  • Se debe contar con suficiente privilegios para la configuración de aplicativos

Plataforma:

  • Equipos de arquitectura 64 bits
  • Sistema operativo ‘GNU/Linux’ Debian versión 8.0 (actualmente estable)

Nota: 02/03/2017 Hoy anunciamos Docker Enterprise Edition (EE), una nueva versión de la plataforma Docker optimizada para implementaciones críticas. Por razones de coherencia, también estamos cambiando el nombre de los productos Docker gratuitos a Docker Community Edition (CE) y adoptando un nuevo ciclo de vida y un esquema de control de versiones basado en tiempo para Docker EE y CE. La versión Docker CE y EE 17.03 de hoy es la primera en utilizar el nuevo esquema.

Instalación:
0.- Revisar la versión de Debian:

root@server:/# lsb_release -cs
jessie

0. Instalar algunas aplicaciones básicas de utilidad debian

root@server:/# apt-get install apt-transport-https net-tools aptitude curl

1. Crear archivo configuración repositorio Docker:

root@server:/# nano /etc/apt/sources.list.d/docker.list

2. Agregar lo siguiente:

deb https://apt.dockerproject.org/repo debian-jessie main

Nuevo repositorio:

deb https://download.docker.com/linux/debian jessie stable

Nota: El repositorio download.docker.com debe ser utilizado en el futuro. El repositorio get.docker.com se mantiene para no romper las instalaciones existentes, pero eventualmente no se publicarán nuevos paquetes allí

3. Descarga la firma repositorio

root@server:/# apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Nuevo repositorio:

root@server:/# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -


4. Actualizar indice repositorio:

root@server:/# aptitude update

5. Instalar docker-engine:

root@server:/# aptitude install docker-engine

Nuevo binario

root@server:/# aptitude install docker-ce

6. Verificar la instalación de docker:

root@server:/# docker version
Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 12:59:02 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 12:59:02 UTC 2015
 OS/Arch:      linux/amd64
 

Nueva versión

Client:
 Version:      17.06.0-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:17:22 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.06.0-ce
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:16:12 2017
 OS/Arch:      linux/amd64
 Experimental: false

Crear Contenedor
1. Crear Contenedor forma 1 (Rápida)

1.1. Crear primer contenedor basado en imagen de ubuntu:

root@server:/# docker run -i -t ubuntu /bin/bash

donde:

 -i -> --interactive
 -t -> (--tty) acceso consola
 ubuntu -> Nombre de la imagen de la distribución a utilizar
 /bin/bash -> consola de comando disponible
 

Nota: En éste caso no se colocó el nombre del container, ni la versión de la distribución a utilizar. En el caso del nombre del container, docker colocará uno relacionado con “personalidades célebres” y en el caso de la versión de la distribución, utilizará la última disponible “ubuntu:latest”

2. Crear Contenedor forma 2 (crear e iniciar)

2.1. Crear contenedor basado en ubuntu versión 14.04, con el nombre “trucupei” y arrancarlo automáticamente:

root@server:/# docker run --name trucupei -i -t ubuntu:14.04 /bin/bash

donde:

  run -> comando para crear e iniciar contenedor
  --name -> nombre del contenedor, en el ejemplo es "trucupei"
  -i -> Interactive
  -t -> (--tty) acceso consola 
  ubuntu:14.04 -> Nombre y versión de la imagen de la distribución a utilizar
  /bin/bash -> consola de comandos a utilizar
 

Nota: Si la imagen no se encuentra disponible localmente (ubuntu:14.04), será descargada automáticamente(repository docker.io)

3. Crear Contenedor forma 3 (crear)

3.1. Crear contenedor con el nombre “nuevo”, basado en la distribución Ubuntu version 14.04:

root@server:/# docker create --name nuevo ubuntu:14.04 

92432fdcf98ceb3aeba38115dba20013cf9d2c89d347d3428370b032341d7446
donde:

  create -> comando para crear nuevo contendor
  --name -> nombre del contenedor, en el ejemplo es "nuevo"
  ubuntu:14.04 -> Nombre y versión de la imágen de distribución a utilizar
 

Nota: En este caso al crear el contenedor, el mismo no es iniciado automáticamente, por lo que debemos arrancarlo y acceder al mismo con otro comando

Listar Contenedor

1. Listar todos los contenedores del sistema, incluyendo los contenedores que están “detenidos”:

root@server:/# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                  PORTS       NAMES
c0d5cd6ff1fc   ubuntu    "/bin/bash"   15 minutes ago   Up 15 minutes                       trucupei
9bd613dbbf8a   ubuntu    "/bin/bash"   4 hours ago      Exited (0) 3 hours ago              serene_yalow

2. Listar todos los contenedores que están “corriendo” o ejecutandose en el sistema:

root@portatil10:/# docker ps
CONTAINER ID    IMAGE    COMMAND                  CREATED        STATUS        PORTS               NAMES
9bd613dbbf8a    ubuntu   "/usr/sbin/apache2ctl"   17 hours ago   Up 17 hours   0.0.0.0:80->80/tcp  serene_yalow
 

Gestionar Imagenes

1. Buscar imagen

root@server:/# docker search debian | more
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
debian                         Debian is a Linux distribution that's comp...   1641      [OK]       
neurodebian                    NeuroDebian provides neuroscience research...   28        [OK]       
armbuild/debian                ARMHF port of debian                            8                    [OK]
jesselang/debian-vagrant       Stock Debian Images made Vagrant-friendly ...   8                    [OK]
eboraas/debian                 Debian base images, for all currently-avai...   6                    [OK]
--More--

Nota: para ubicar la distribución linux o el aplicativo de preferencia, sustituir debian por: centos, fedora, ubuntu, apache, mysql, nginx, wordpress, … En el siguiente enlace: imagenes docker se encuentra las imagenes disponibles

2. Descargar imagen docker localmente

root@server:/# docker pull debian:8
Using default tag: latest
8: Pulling from library/debian
8ad8b3f87b37: Pull complete 
Digest: sha256:2340a704d1f8f9ecb51c24d9cbce9f5ecd301b6b8ea1ca5eaba9edee46a2436d
Status: Downloaded newer image for debian:8

Nota: Si no se especifica la versión, se descargará la última estable “debian:latest”

3. Listar las imagenes disponibles localmente:

root@server:/# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
debian              latest              031143c1c662        12 days ago         125.1 MB
ubuntu              latest              bd3d4369aebc        2 weeks ago         126.6 MB
 

Nota: En éste punto se pueden crear contenedores con las imagenes descargadas y almacenadas localmente

Arrancar Contenedores

1. Levantar contenedor:

root@server:/# docker start nombre_contenedor

2. Entrar o “Enganchar” la consola de bash del contendor:

root@server:/# docker attach nombre_contenedor (dos veces enter)

Resultado:

root@c0d5cd6ff1fc:/#

3. Levantar un contenedor y tener acceso a la consola:

root@server:/# docker start -i nombre_contenedor

donde:
-i -> ingresar a la consola bash

4. Ejecutar consola de bash para entrar al contenedor creado:

root@server:/# docker exec -it nombre_contenedor bash
root@c0d5cd6ff1fc:/#

5. Salir del contenedor y detener su ejecución:

root@c0d5cd6ff1fc:/# exit

6. Salir del contenedor pero sin detener su ejecución (detach)

root@c0d5cd6ff1fc:/# mantener presionada la tecla Ctrl, luego pulsar la tecla P y por último la tecla Q

7. Detener un contenedor:

root@server:/# docker stop trucupei

Comandos de Administración

1. Inspeccionar container:

root@server:/# docker inspect trucupei
 [
 {
    "Id": "c0d5cd6ff1fc5237ea4ef0dc68f3a7555693290e4760fb7bd23dce7c94f3f729",
    "Created": "2016-01-20T19:54:30.510888751Z",
    "Path": "/bin/bash",
    "Args": [],
 .....
 

2. Inspeccionar los procesos del contenedor “trucupei”:

root@server:/# docker top trucupei
UID      PID     PPID     C    STIME   TTY   TIME        CMD
root     3934    2819     0    11:19   ?     00:00:00    tail -f /var/log/apache2/access.log
root     16738   2819     0    feb17   ?     00:00:00    /bin/sh /usr/sbin/apache2ctl -D FOREGROUND
root     16770   16738    0    feb17   ?     00:00:02    /usr/sbin/apache2 -D FOREGROUND
www-data 16798   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUND
www-data 16815   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUND
www-data 16817   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUND
www-data 16818   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUND
www-data 16819   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUN
www-data 16914   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUND
www-data 16920   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUND
www-data 16921   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUND
www-data 17019   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUND
www-data 17029   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUND
www-data 17030   16770    0    feb17   ?     00:00:00    /usr/sbin/apache2 -D FOREGROUND
 

3. Ejecutar comandos dentro de un contenedor:

root@server:/#docker exec -i trucupei cat /var/log/apache2/access.log
172.17.42.1 - nagiosadmin [17/Feb/2016:21:18:55 +0000] "GET /nagios/ HTTP/1.1" 200 775 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0"
172.17.42.1 - nagiosadmin [17/Feb/2016:21:18:55 +0000] "GET /nagios/side.php HTTP/1.1" 200 1399 "http://127.0.0.1/nagios/" "Mozilla/5.0 (X11; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0"
172.17.42.1 - nagiosadmin [17/Feb/2016:21:18:55 +0000] "GET /nagios/main.php HTTP/1.1" 200 3558 "http://127.0.0.1/nagios/" "Mozilla/5.0 (X11; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0"
172.17.42.1 - nagiosadmin [17/Feb/2016:21:18:56 +0000] "GET /nagios/stylesheets/common.css?4.1.1 HTTP/1.1" 200 2760 "http://127.0.0.1/nagios/side.php" "Mozilla/5.0 (X11; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0"
172.17.42.1 - nagiosadmin [17/Feb/2016:21:18:56 +0000] "GET /nagios/stylesheets/common.css?4.1.1 HTTP/1.1" 200 2760 "http://127.0.0.1/nagios/main.php" "Mozilla/5.0 (X11; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0"
 

Detener y Eliminar Contenedor

1. Detener contenedor

root@server:/# docker stop nombre_contenedor

2. Eliminar contenedor:

root@server:/# docker rm nombre_contenedor

3. Eliminar imagen:

root@server:/# docker rmi ubuntu:14.04

Nota: No deben existir contenedores asociados a la imagen a borrar

Nota: Otros Comando Docker Commandline

Enlaces:
Get Docker CE for Debian

Anuncios

Un comentario en “Docker Container Primeros Pasos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s