Sie sind auf Seite 1von 5

Introducción a Docker – Parte 3

guiadev.com/introduccion-docker-parte-3/

Andrés June 23, 2016

Dificultad: Intermedio
Tiempo de Lectura: 5 minutos
En esta oportunidad siguiendo con nuestra muestra de como utilizar Docker en nuestros
ambientes de desarrollo y orientandonos netamente en hacer ejercicios prácticos hoy
queremos guiarlos en la instalación de un ambiente LEMP (Linux Nginx MySQL PHP-
FPM) en sistema operativo Centos 6.8 y le vamos a realizar la instalación de estos
contenedores mediante archivos DockerFile.

Instalando contenedores mediante DockerFile


El DockerFile en resumen es un archivo de texto que nos permitirá centralizar de una
manera ordenada los comandos que interactuen con Docker los mismos se ejecutaran de
forma secuencial, uno detrás de otro. Conociendo esto entonces vamos paso a paso hasta
lograr crear una imagen base con la instalación de los servicios antes comentados via
DockerFile. Para luego en base a esta imagen personalizada poder crear nuestros
contenedores de prueba.

Crear carpeta para separar nuestros Dockerfiles en este caso vamos a crear una carpeta
llamada Centos6.8

mkdir Centos6.8;
cd Centos6.8;
touch Dockerfile;
nano -w Dockerfile;

Agregamos al DockerFile la imagen del sistema operativo Centos y la versión 6.8 con el
comando FROM https://hub.docker.com/explore/

# El Comando FROM nos permite importar cualquier imagen en este caso Centos 6.8
FROM centos:6.8

* Para probar este punto solo podemos ejecutar lo siguiente en nuestra consola, en donde
crearemos una imagen en base al contenido del dockerfile

#Nos ubicamos en la carpeta que contiene el dockerfile


cd Centos6.8;
#Creamos una imagen llamada infranetworking en base a el dockerfile, se utiliza el
"." para seleccionar el dockerfile actual
sudo docker build -t infranetworking .

Se debe ver algo como esto que indica que se esta creando la imagen llamada
infranetworking y esta descargando la imagen de Centos 6.8

1/5
Step 1 : FROM centos:6.8
7: Pulling from library/centos
a3ed95caeb02: Download complete
da71393503ec: Downloading 44.33 MB/70.58 MB

Al finalizar podemos ejecutar lo siguiente para ver la lista de imagenes actuales en Docker
en donde figurara una imagen llamada infranetworking

[infra@localhost Centos6.8]$ sudo docker images


REPOSITORY TAG IMAGE ID CREATED SIZE
centos 6.8 904d6c400333 2 weeks ago 196.7 MB
infranetworking latest 904d6c400333 2 weeks ago 196.7 MB

Importante para seguir haciendo pruebas es conocer como borrar la imagen que hemos
creado de prueba, seria con el siguiente comando

#docker rmi : se utiliza para borrar cualquier imagen


sudo docker rmi infranetworking:lastest
# Tambien se puede utilizar el ID de la imagen para borrarla
sudo docker rmi 904d6c400333

Incluimos los datos de contacto del encargado de la imagen

# Correo de contacto de la persona encargada de esta imagen


MAINTAINER Personal <tucorreo@dominio.com>

Agregamos los repositorios necesarios

# Agregamos repositorios a nuestra imagen


RUN yum -y install epel-release
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Instalamos algunas utilidades necesarias:

# Instalamos utilidades
RUN yum install -y wget

Instalamos Nginx en la version 1.11

# Instalamos Nginx en la version 1.11 y liberamos el puerto 80


RUN echo "[nginx]" >> /etc/yum.repos.d/nginx.repo
RUN echo "name=nginx repo" >> /etc/yum.repos.d/nginx.repo
RUN echo "baseurl=http://nginx.org/packages/mainline/rhel/6/x86_64" >>
/etc/yum.repos.d/nginx.repo
RUN echo "gpgcheck=1" >> /etc/yum.repos.d/nginx.repo
RUN echo "enabled=1" >> /etc/yum.repos.d/nginx.repo
RUN cat /etc/yum.repos.d/nginx.repo
RUN wget http://nginx.org/keys/nginx_signing.key
RUN rpm --import nginx_signing.key
RUN yum install -y nginx
EXPOSE 80

Instalamos Php-fpm y la versión de php 5.5

#Instalar Php-fpm con Php 5.5


RUN yum -y install --enablerepo=remi-php55 php-fpm php-mysql php-gd php-mcrypt php-
mbstring php-intl php-xml php-pgsql

2/5
Instalación de Mysql 5.5 (mariaDB)

#Instalar Mysql 5.5 (mariadb) y liberamos el puerto 3306


RUN yum -y install --enablerepo=remi,remi-test mysql mysql-server
EXPOSE 3306

Creamos el acceso via shell

#Acceso via shell


CMD ["/bin/bash"]

El archivo completo Dockerfile deberia quedar de la siguiente forma

# Procedemos a Instalar Centos 6.8


FROM centos:6.8
# Correo de contacto de la persona encargada de esta imagen
MAINTAINER Personal <tucorreo@dominio.com>
# Agregamos repositorios a nuestra imagen
RUN yum -y install epel-release
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# Instalamos utilidades
RUN yum install -y wget
# Instalamos Nginx en la version 1.11 y liberamos el puerto 80
RUN echo "[nginx]" >> /etc/yum.repos.d/nginx.repo
RUN echo "name=nginx repo" >> /etc/yum.repos.d/nginx.repo
RUN echo "baseurl=http://nginx.org/packages/mainline/rhel/6/x86_64" >>
/etc/yum.repos.d/nginx.repo
RUN echo "gpgcheck=1" >> /etc/yum.repos.d/nginx.repo
RUN echo "enabled=1" >> /etc/yum.repos.d/nginx.repo
RUN cat /etc/yum.repos.d/nginx.repo
RUN wget http://nginx.org/keys/nginx_signing.key
RUN rpm --import nginx_signing.key
RUN yum install -y nginx
EXPOSE 80
#Instalar Php-fpm con Php 5.5
RUN yum -y install --enablerepo=remi-php55 php-fpm php-mysql php-gd php-mcrypt php-
mbstring php-intl php-xml php-pgsql
#Instalar Mysql 5.5 y liberamos el puerto 3306
RUN yum -y install --enablerepo=remi,remi-test mysql mysql-server
EXPOSE 3306
#Acceso via shell
CMD ["/bin/bash"]

Ejecutar el archivo completo seria con el siguiente comando para que nos cree la
imagen infranetworking

sudo docker build -t infranetworking .

Procedemos a crear nuestro contenedor llamado infratuto a partir de nuestra imagen

sudo docker run -t -i -p 80:80 -p 3306:3306 --name infratuto infranetworking


/bin/bash

Con el anterior comando nos conectara automaticamente a nuestro contenedor se debe


ver algo asi

3/5
[infra@localhost Centos6.8]$ sudo docker run -t -i -p 80:80 -p 3306:3306 --name
infratuto infranetworking /bin/bash
[root@e1827a12f80b /]#
[root@e1827a12f80b /]# nginx -v
nginx version: nginx/1.11.1
[root@e1827a12f80b /]# mysql --version
mysql Ver 14.14 Distrib 5.5.50, for Linux (x86_64) using readline 5.1
[root@e1827a12f80b /]# php-fpm -version
PHP 5.5.36 (fpm-fcgi) (built: May 25 2016 16:01:56)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
[root@e1827a12f80b/]# /etc/init.d/nginx start
Starting nginx: [ OK ]
[root@b4f9ec0b28f0 /]# /etc/init.d/php-fpm start
Starting php-fpm: [ OK ]
[root@b4f9ec0b28f0 /]# /etc/init.d/mysqld start
Initializing MySQL database: Installing MySQL system tables...
160621 15:42:14 [Note] /usr/libexec/mysqld (mysqld 5.5.50) starting as process 118
...
OK
Filling help tables...
160621 15:42:14 [Note] /usr/libexec/mysqld (mysqld 5.5.50) starting as process 125
...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h b4f9ec0b28f0 password 'new-password'
Alternatively you can run:
/usr/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl
Please report any problems at http://bugs.mysql.com/
[ OK ]
Starting mysqld: [ OK ]

Conclusión
Como pudimos ver tenemos la opción de poder crear nuestras imágenes personalizadas
con instalaciones de servicios también personalizados y todo en un archivo de texto el cual
podemos ir mejorando a través del tiempo, esta es la forma correcta de crear ambientes de
desarrollo escalable para cualquiera que programe en nuestro equipo y que solo el
desarrollador se preocupe por el código no por la infraestructura.

4/5
Ya que podemos crear un archivo base, luego al hacer algún cambio podemos decirle al
desarrollador que borre su imagen actual y vuelva a instalar la nueva imagen para que
tenga los nuevos cambios en la plataforma ya que sera siempre lo más parecido a
producción. Para la siguiente entrega hablaremos de los Microservicios, donde
exploraremos como una imagen nos sirve para tener cada servicio de forma independiente
a nivel de contenedores y poder enlazarlos así vía Docker.

Lecturas recomendadas:

DockerFile

Si te gustó esta Parte 3, sígue con la Parte 04:

Introducción a Docker – Parte 4

5/5

Das könnte Ihnen auch gefallen