Creando imágenes con Docker Container

El presente instructivo tiene como finalidad la creación de una imágen “personalizada” de docker y “subirla” a una cuenta en Docker Hub, utilizando para ellos los comandos Docker commit y Docker file

Requisitos:

  • Se debe contar con suficiente privilegios para la configuración de aplicativos
  • Se debe tener docker instalado
  • Tener una cuenta creada en Docker Hub

Configuraciones Relacionados:

Plataforma:

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

Crear Imagen

Las “buenas prácticas” recomiendan, que los datos de las aplicaciones no deben ser guardados en las imágenes, los mismos deberán ser guardadas en volumenes compartidos, lo que se guarda en las imagenes son los aplicativos o servicios y las configuraciones o customización. El objetivo es que dichas imagenes puedan ser reutilizadas.

Existen básicamente dos formas de crear una imágen:

  • 1.- Utilizando el comando de construcción de Docker Dockerfile (recomendado)
  • 2.- Utilizando el comando de Docker commit

Para la creación de imágenes “personalizadas” es recomendeble utilizar Dockerfile, ya que utiliza un mecanismo más flexible, potente, transparente y repetible

CREANDO IMAGEN
Las imagenes creadas en los siguientes ejemplo será una imagen docker a partir de debian 8 y contedrá la instalación de apache2, el modulo de soporte de apache para php5, php5 y el módulo de conexión de mysql para php5. Al final estará expuesto el puerto 80 con el servicio apache instalado

1.- CREANDO IMAGEN CON DOCKER FILE

1.- Crear directorio de trabajo

root@server:/# mkdir -p /opt/apache2

2.- Estando en el directorio de trabajo, crear archivo Dockerfile

root@server:/opt/apache2# nano Dockerfile

Nota: Se utiliza nano para editar el archivo, pero puede usar cualquier editor de textos

3.- Agregar el siguiente contenido:

# Version: 1
FROM debian:8
MAINTAINER Juan Trucupei "rodriguezmjuan@gmail.com"
RUN apt-get update && apt-get install -y apache2 libapache2-mod-php5 php5 php5-mysql 
EXPOSE 80

Donde:
FROM -> Imagen Base
MAINTAINER -> datos del mantenedor
RUN -> comando que se desea ejecutar
EXPOSE -> puerto a escuchar cuando los contenedores se ejecuten

Nota: Las instrucciones (FROM, MAINTAINER, RUN, …) pueden ser escritos en mayusculas o minisculas, sin embargo, es recomendable escribirlas en mayúsculas para distinguirlos más fácilmente de los argumentos

4.- Crear imagen:

root@server:/opt/apache2# docker build -t="juantrucupei/apache2:v1" .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM debian:8
 ---> ddf73f48a05d
Step 2 : MAINTAINER Juan Trucupei "rodriguezmjuan@gmail.com"
 ---> Using cache
 ---> e1083b2434b4
Step 3 : RUN apt-get update && apt-get install -y apache2 php5 php5-mysql
 ---> Running in 94c287be9194
Get:1 http://security.debian.org jessie/updates InRelease [63.1 kB]
Ign http://httpredir.debian.org jessie InRelease
Get:2 http://httpredir.debian.org jessie-updates InRelease [142 kB]
Get:3 http://security.debian.org jessie/updates/main amd64 Packages [391 kB]
........
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
Setting up xml-core (0.13+nmu2) ...
Processing triggers for libc-bin (2.19-18+deb8u6) ...
Processing triggers for systemd (215-17+deb8u5) ...
Processing triggers for libapache2-mod-php5 (5.6.26+dfsg-0+deb8u1) ...
Processing triggers for sgml-base (1.26+nmu4) ...
 ---> f4847ae03638
Removing intermediate container 94c287be9194
Step 4 : EXPOSE 80
 ---> Running in 76a94e19b003
 ---> 384c9c0ad1f9
Removing intermediate container 76a94e19b003
Successfully built 384c9c0ad1f9

5.- Verificar la creación de la imágen:

root@server:/# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
juantrucupei/apache2   v1                  384c9c0ad1f9        3 minutes ago       222.9 MB
ubuntu                 latest              c73a085dc378        10 days ago         127.1 MB
debian                 8                   ddf73f48a05d        2 weeks ago         123 MB

2.- CREANDO IMAGEN CON DOCKER COMMIT

1.- Crear un contenedor basado en debian 8

root@server:/# docker run -i -t debian:8 /bin/bash
root@a465668d1972:/#

2.- Instalar dentro del contenedor los aplicativos

root@a465668d1972:/# apt-get -y update && apt-get -y install apache2 libapache2-mod-php5 php5 php5-mysql

3.- Salir del contenedor

root@a465668d1972:/# exit

4.- Efectuar commit del contenedor creado “a465668d1972”

root@server:/# docker commit -m "Una nueva imagén personalizada de apache2" -a "Juan Trucupei" a465668d1972 juantrucupei/apache2:v1
sha256:e6ff5a9d99d1d4e07cc3f9159a5c172317fca52474cffbb7b7be22bfe5a0a330

donde:
-m -> mensaje explicativo “Una nueva imagén personalizada de apache2”
-a -> autor “Juan Trucupei”
a465668d1972 -> ID del contenedor
juantrucupei/apache2 -> username y nombre de la imagen
:v1 -> versión de la imágen, es éste caso es la primera versión

Nota: La creación de la imagen se puede efectuar en “caliente”, no es necesario detener el contenedor. Si desea subir la imagen al repositorio Hub de Docker (https://hub.docker.com/), el username debe conincidir con el username registrado en el portal

5. Comprobar la creación de la imagen

root@server:/# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
juantrucupei/apache2   v1                  87a7be9ead37        37 seconds ago      265.2 MB
ubuntu                 latest              c73a085dc378        10 days ago         127.1 MB
debian                 8                   ddf73f48a05d        2 weeks ago         123 MB

6. Efectuar inspección de la imagen

root@server:/# docker inspect 87a7be9ead37
[
    {
        "Id": "sha256:e6ff5a9d99d1d4e07cc3f9159a5c172317fca52474cffbb7b7be22bfe5a0a330",
        "RepoTags": [
            "juantrucupei/apache2:v1"
        ],
        "RepoDigests": [],
        "Parent": "sha256:c73a085dc3782b3fd4c032971c76d6afb45fa3728a048175c8c77d7403de5f21",
        "Comment": "Una nueva imagén personalizada de apache2",
        "Created": "2016-10-07T18:29:05.95742766Z",
        "Container": "c53be169ee261429c534320ec60b8e1aaf0f19b27e9ead78406362ec3583ea1a",
..........

CREANDO CONTENEDOR A PARTIR DE LA(S) IMAGEN(ES) CREADA(S)

1. Crear contenedor con la imagen de juantrucupei/apache2:v1

root@server:/# docker run -i -t -p 80:80 juantrucupei/apache2:v1 /bin/bash

2. Levantar el servicio de apache:

root@3cab511c97be:/# /etc/init.d/apache2 start
 * Starting Apache httpd web server

3. Salir del contenedor:

root@3cab511c97be:/# Mantener presionada tecla Ctrl + la tecla p y luego q

4. Verificar la creación del contenedor

root@server:/# docker ps
CONTAINER ID  IMAGE                  COMMAND     CREATED    STATUS  PORTS              NAMES
3cab511c97be  juantrucupei/apache2:v1 "/bin/bash" 46 seconds up      0.0.0.0:80->80/tcp admiring_golick

5.- Acceder a la página de inicio del servidor web:

root@server:/# links http://127.0.0.1

SUBIR LA IMAGEN A DOCKER HUB

Para subir la imágen a Docker Hub, se hace necesario crear una cuenta en Docker Hub, en nuestro caso se ya tenemos la de “juanctrucupei”

1. Logearse en el portal desde el equipo:

root@server:/# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: juantrucupei
Password: 
Login Succeeded

2.- Revisar las credenciales creadas por Docker Hub para la autenticación:

root@server:/# cat ~/.docker/config.json
{
	"auths": {
		"https://index.docker.io/v1/": {
			"auth": "anVhbnRydWN1cGVpOkozc3VjcjEydDQ="
		}
	}

3. Subir la imagen creada al repositorio Hub Docker

root@server:# docker push juantrucupei/apache2:v1
The push refers to a repository [docker.io/juantrucupei/apache2]
13103c363e13: Pushing [=========================================>         ] 113.4 MB/138.2 MB
f215f043863e: Mounted from juantrucupei/apache 
0c291dc95357: Mounted from juantrucupei/apache 
a9ee34f9e4e2: Mounted from juantrucupei/apache 
e15f8eeda399: Mounted from juantrucupei/apache 
040ba7b9591c: Mounted from juantrucupei/apache 
1: digest: sha256:6a01e3cb8989444110da5c497da320b15bdd44a60fba33d1221359aeca005d27 size: 1569

4. Verificando en el repositorio de Hub docker:

docker_juan_trucupei_1

Nota: Ya en éste punto la imágen creada puede ser utilizada por cualquier persona que tenga acceso a la internet.

5. Salir de la sesión Docker Hub

root@server:/# docker logout
Remove login credentials for https://index.docker.io/v1/

Enlaces:

understanding-docker
Taller Docker – Juanda
James Turnbull – TheDocker Book Containerization is the new virtualization
Dockerfile reference
Best practices for writing Dockerfiles
Docker

Anuncios

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