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 se desea utilizar varias copias de una sola aplicación
  • Utilizamos máquinas virtuales si se desea flexibilidad ejecución múltiples aplicaciones
  • Utilizamos máquinas virtuales si se 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

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)

Instalación:

1. Crear archivo configuración repositorio Docker:

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

Nota: Para trabajar con repositorios “https” es necesario la instalación del paquete “apt-transport-https”

2. Agregar lo siguiente:

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

3. Descarga la firma repositorio

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


4. Actualizar indice repositorio:

root@server:/# aptitude update

5. Instalar docker-engine:

root@server:/# aptitude install docker-engine

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
 

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:

https://docs.docker.com/engine/installation/debian/
https://docs.oracle.com/cd/E37670_01/E37355/html/ol_docker.html

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