Hola Comunidad, hoy estaremos hablando sobre Docker, instalación y creación de una imagen de Centos 7, para aquellos que no conocen Docker pueden revisar algunos artículos anteriores.

Docker

Instalando docker 1.12:

En dependencia de nuestro sistema agregamos una de estás linea a nuestros repositorios.
Ubuntu Precise 12.04 (LTS)

deb http://apt.dockerproject.org/repo ubuntu-precise main

Ubuntu Trusty 14.04 (LTS)

deb http://apt.dockerproject.org/repo ubuntu-trusty main

Ubuntu Xenial 16.04 (LTS)

deb http://apt.dockerproject.org/repo ubuntu-xenial main

Debian Wheezy

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

Debian Jessie

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

Debian Stretch/Sid

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

Centos 7

sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

Luego abrimos un terminal y ejecutamos:

Install the Docker package.

# Debian/Ubuntu
sudo apt-get install docker-engine 

# Centos 
sudo yum install docker-engine

Acá les dejo el deb para Ubuntu 16.04 docker-engine.zip (70 descargas) .

Agregando el dns UCI a docker

Docker cuenta con un archivo para establecer configuraciones por defecto que se encuentra en /etc/default/docker, lo abrimos con nuestro editor de texto favorito y buscamos la linea DOCKER_OPTS y la reemplazamos por lo siguiente:

# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="--dns 10.0.0.3 --dns 10.0.0.4 --dns-search=uci.cu"

En el caso de Ubuntu 16.04, necesitamos decirle al docker daemon que use las opciones del archivo de configuración, para ello modificamos el archivo /etc/systemd/system/multi-user.target.wants/docker.service, buscamos la linea ExecStart y la reemplazamos por:

EnvironmentFile=/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS

Reiniciamos el docker daemon:

sudo systemctl restart docker.service

Run Docker sin root:

Por defecto los comandos de docker debemos ejecutarlos con permisos de root esto se debe a que el docker daemon solo responde al root o al grupo docker por tanto agreguemos nuestro usuario al grupo docker; abrimos un terminal y ejecutamos el siguiente comando.

sudo usermod -aG docker $USER

Cerrar la sesión y volver a iniciarla, esto asegura que su usuario se está ejecutando con los permisos correctos. Para probar que todo está bien sin cerrar la sesión ejecutamos:

sudo login $USER
#luego de iniciar
docker info

Debemos ver algo como esto:

Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 25
Server Version: 1.12.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 13
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
...

Creando una imagen de Centos

La imagen la podemos realizar desde el repo oficial en github o desde los repositorios, la actualización mensual la podremos encontrar acá, descomprimimos la imagen y veremos dos archivos Dockerfile y centos-7-docker.tar.xz, luego con nuestro editor de texto favorito abrimos el Dockerfile y reemplazamos su contenido por el siguiente:

FROM scratch
MAINTAINER Nesty < easantana@estudiantes.uci.cu > 
ADD centos-7-docker.tar.xz /

RUN rm /etc/yum.repos.d/*.repo

COPY Centos-UCI.repo /etc/yum.repos.d/Centos-UCI.repo

LABEL name="CentOS Base Image" \
    vendor="CentOS" \
    license="GPLv2" \
    build-date="20160729"

CMD ["/bin/bash"]

para más información sobre los Dockerfiles podemos consultar la documentación oficial.

Descargamos el archivo de repositorios para centos de la uci. y lo copiamos en la misma carpeta donde tenemos el Dockerfile.

Ejecutamos un terminal en la carpeta del Dockerfile y escribimos lo siguiente:

docker build -t centos:7 .

El parametro -t es el tag que tendrá nuestra imagen.

Construyendo la imagen desde los repositorios

Cuando instalamos Docker una serie de scripts para realizar imagenes se copian en  /usr/share/docker-engine/contrib/ usaremos el mkimage.sh para realizar nuestra imagen, pero antes debemos modificar /usr/share/docker-engine/contrib/mkimage/rinse, al final del archivo veremos algo como esto:

# make sure we're fully up-to-date, too
(
    set -x
    chroot "$rootfsDir" yum update -y
)

Lo reemplazamos por:

# make sure we're fully up-to-date, too
(
    set -x
    rm "$rootfsDir"/etc/yum.repos.d/*.repo
    cp $PATH$/Centos-UCI.repo "$rootfsDir"/etc/yum.repos.d/Centos-UCI.repo
    chroot "$rootfsDir" yum update -y
)

Como pueden apreciar debemos cambiar $PATH$ por la dirección donde guardamos el archivo Centos-UCI.repo

En un terminal ejecutamos:

sudo apt-get install rinse

Una vez terminada la instalación crearemos la imagen con el siguiente comando:

sudo /usr/share/docker-engine/contrib/mkimage.sh -t centos:7 rinse --distribution centos-7 --mirror http://centos.uci.cu/centos/7.2/os/x86_64/Packages/

Este script agrega automáticamente la imagen a Docker. Y esto es todo por hoy, en próximos artículos estaremos hablando un poco más sobre este asombroso mundo de Docker. No olvides dejarnos tus comentarios y experiencias.