Entonces ha implementado una infraestructura OpenStack. También ha oído hablar de Docker y es muy consciente de la inmensa emoción que generó. Bueno, OpenStack y Docker son dos tecnologías complementarias que agilizan el funcionamiento de los equipos que trabajan en los centros de datos comunes. Docker es un programa de código abierto que organiza automáticamente las aplicaciones en contenedores. Hace que la solución LXC (Linux Containers) sea el estándar y permite a los usuarios ejecutar varios contenedores en un servidor. Por otro lado, OpenStack ofrece una API abierta que se enfoca en redes, almacenamiento, computación y otros servicios. Simplifica el consumo de infraestructura para facilitar los tiempos de ejecución de los contenedores y los sistemas operativos (puede obtener más información sobre esto en nuestra guía de hosting de contenedores).

Una forma de mejorar OpenStack es utilizar complementos de Docker. Docker se puede integrar fácilmente en OpenStack Nova como hipervisor. Sin embargo, una de las mejores técnicas para combinar OpenStack con Docker es organizar sus contenedores con OpenStack Heat.

Si tiene curiosidad por la integración de estas tecnologías, ha llegado a la página correcta. El manual le ayuda a integrar Docker con OpenStack. Además, recibirá instrucciones detalladas para la instalación sin errores de contenedores Docker con OpenStack Heat. La orquestación se detalla con instrucciones paso a paso fáciles de entender para que sea adecuada para todos, incluidos los principiantes.

¿Listo? ¡Aquí vamos!

Nota especial: antes de implementar contenedores Docker con OpenStackHeat, necesita un servidor Linux virtual. Póngase en contacto con Hosting Más Barato para encontrar los mejores proveedores de hosting de Linux con opiniones reales de usuarios.

Parte 1: instalar el complemento de Docker

Paso 1: descarga el complemento

El complemento de Docker está contenido en la carpeta Heat (carpeta zip), que está disponible en GitHub a través de:

https://github.com/openstack/heat/tree/stable/icehouse

Descargue la carpeta y extráigala con:

unzip heat-stable-icehouse.zip

Después de extraer la carpeta, busque la carpeta Pruebas y elimínela para evitar conflictos:

cd heat-stable-icehouse/contrib/
rm -rf docker/docker/tests

Paso 2: crea un directorio

A continuación, use el siguiente comando para crear un nuevo directorio en la carpeta /usr/lib/heat/:

cp -r docker/* /usr/lib/heat/docker-plugin

Paso 3: instale el complemento

Ya se cumplen los requisitos previos para instalar el complemento de Docker. Ejecute el siguiente comando para iniciar la tarea.

cd /usr/lib/heat/docker-plugin
apt-get install python-pip
pip install -r requirements.txt

El archivo /etc/heat/heat.conf debe editarse antes de reiniciar el servicio. Utilice el siguiente comando para editar este archivo:

vi /etc/heat/heat.conf
(add)
plugin_dirs=/usr/lib/heat/docker-plugin/docker

Ahora puede reiniciar los servicios con el siguiente comando:

service heat-api restart
service heat-api-cfn restart
service heat-engine restart

Parte 2: Creación de la plantilla de calor

En esta guía acoplaremos e implementaremos una aplicación LAMP. Debido a esto, necesitamos crear dos contenedores Docker; uno que se ejecuta en una base de datos MySQL y otro que se ejecuta en Apache con PHP.
Describimos un recurso OS :: Heat :: SoftwareConfig que define la configuración y otro recurso OS :: Heat :: SoftwareDeployement para implementar configuraciones en el servidor Docker. Luego podemos asociar una IP flotante con OS :: Nova :: server para habilitar la conexión a Internet. También creamos dos contenedores Docker con el formato DockerInc :: Docker :: Container en nuestro host Docker.

: Solo estamos creando una plantilla de calor simple para este tutorial. Se puede crear una plantilla avanzada con múltiples parámetros como nombres, enlaces, enlaces, puertos y más. La plantilla de calor extendida facilita el uso versátil de Docker. Sin embargo, el complemento de Docker que estamos utilizando no admite estos parámetros.

Crea la plantilla

Crea una plantilla en la carpeta docker-stack.yml y agregue el siguiente contenido;

$ vi docker-stack.yml

heat_template_version: 2013-05-23

description: >
  Dockerize a multi-node application with OpenStack Heat.
  This template defines two docker containers running
  apache with php and mysql database.

parameters:
  key:
    type: string
    description: >
      Name of a KeyPair to enable SSH access to the instance. Note that the
      default user is ec2-user.
    default: key1

  flavor:
    type: string
    description: Instance type for the docker server.
    default: m1.medium

  image:
    type: string
    description: >
      Name or ID of the image to use for the Docker server.  This needs to be
      built with os-collect-config tools from a Fedora base image.
    default: fedora-software-config

  public_net:
    type: string
    description: name of public network for which floating IP addresses will be allocated.
    default: nova

resources:
  configuration:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config: |
        #!/bin/bash -v
        setenforce 0
        yum -y install docker-io
        cp /usr/lib/systemd/system/docker.service /etc/systemd/system/
        sed -i -e '/ExecStart/ { s,fd://,tcp://0.0.0.0:2375, }' /etc/systemd/system/docker.service
        systemctl start docker.service
        docker -H :2375 pull marouen/mysql
        docker -H :2375 pull marouen/apache

  deployment:
    type: OS::Heat::SoftwareDeployment
    properties:
      config: {get_resource: configuration}
      server: {get_resource: docker_server}

  docker_server:
    type: OS::Nova::Server
    properties:
      key_name: {get_param: key}
      image: { get_param: image }
      flavor: { get_param: flavor}
      user_data_format: SOFTWARE_CONFIG

  server_floating_ip:
    type: OS::Nova::FloatingIP
    properties:
      pool: { get_param: public_net}

  associate_floating_ip:
    type: OS::Nova::FloatingIPAssociation
    properties:
      floating_ip: { get_resource: server_floating_ip}
      server_id: { get_resource: docker_server}

  mysql:
    type: DockerInc::Docker::Container
    depends_on: [deployment]
    properties:
      image: marouen/mysql
      port_specs:
        - 3306
      docker_endpoint:
        str_replace:
          template: http://host:2375
          params:
            host: {get_attr: [docker_server, networks, private, 0]}

  apache:
    type: DockerInc::Docker::Container
    depends_on: [mysql]
    properties:
      image: marouen/apache
      port_specs:
        - 80
      docker_endpoint:
        str_replace:
          template: http://host:2375
          params:
            host: {get_attr: [docker_server, networks, private, 0]}

outputs:
  url:
    description: Public address of apache
    value:
      str_replace:
        template: http://host
        params:
          host: {get_attr: [docker_server, networks, private, 0]}

Parte 3: Implementar la pila

Ahora que ha creado la plantilla, puede continuar con la implementación de su pila.

Paso 1: crea un archivo de credenciales

Antes de implementar la pila, debe crear un archivo de credenciales con el siguiente comando:

vi creds

# Agregue lo siguiente:
export OS_TENANT_NAME=admin
export OS_TENANT_NAME=admin
export OS_PASSWORD=admin_pass
export OS_AUTH_URL="http://controller:5000/v2.0/"

Siga los pasos a continuación para crear una imagen basada en Fedora

$ git clone https://git.openstack.org/openstack/diskimage-builder.git
git clone https://git.openstack.org/openstack/tripleo-image-elements.git
git clone https://git.openstack.org/openstack/heat-templates.git
git clone https://git.openstack.org/openstack/dib-utils.git
export PATH="${PWD}/dib-utils/bin:$PATH"
export ELEMENTS_PATH=tripleo-image-elements/elements:heat-templates/hot/software-config/elements
diskimage-builder/bin/disk-image-create vm 
  fedora selinux-permissive 
  os-collect-config 
  os-refresh-config 
  os-apply-config 
  heat-config-ansible 
  heat-config-cfn-init 
  heat-config-docker 
  heat-config-puppet 
  heat-config-salt 
  heat-config-script 
  -o fedora-software-config.qcow2
glance image-create --disk-format qcow2 --container-format bare --name fedora-software-config < 
  fedora-software-config.qcow2 $

Si aún no necesita crear una clave, ejecute el siguiente comando:

ssh-keygen
nova keypair-add --pub-key ~/.ssh/id_rsa.pub key1

Para permitir el acceso a su servidor Docker, integramos reglas en nuestro grupo de seguridad estándar:

Permitir $ ICMP (ping):

nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0

Permitir el acceso a $ Secure Shell (SSH):

nova secgroup-add-rule default tcp 22 22 0.0.0.0/0

Permitir acceso al puerto de $ 2375 (punto final de Docker):

nova secgroup-add-rule default tcp 2375 2375 0.0.0.0/0

Luego use el siguiente comando para crear una red privada:

source creds

$ Crea una red privada:

nova network-create private --bridge br100 --multi-host T  --dns1 8.8.8.8  
--gateway 172.16.0.1 --fixed-range-v4 172.16.0.0/24

A continuación, cree el grupo de IP flotante:

nova-manage floating create --pool=nova --ip_range=192.168.100.100/28

Paso 2: construye tu pila

Ahora creemos nuestra pila a partir de la plantilla recién creada.

source creds

heat stack-create -f docker-stack.yml docker-stack

A continuación, verifique que su pila se haya creado correctamente:

Lista de pilas de calor

La siguiente ventana se muestra después de que se inicia el lote:

Ejecute el siguiente comando para confirmar que sus contenedores se crearon correctamente:

ssh ec2-user@192.168.100.97

sudo docker -H :2375 ps

Obtendrá el siguiente resultado:

¡Eso es! Ha instalado correctamente contenedores Docker con OpenStack Heat.

Consulte los 3 principales servicios de hosting de Linux