Introducción

En este módulo, exploraremos cómo Ansible puede integrarse con Docker para automatizar la gestión de contenedores. Docker es una plataforma que permite a los desarrolladores empaquetar aplicaciones en contenedores, que son entornos ligeros y portátiles. Ansible, por su parte, es una herramienta de automatización que puede gestionar configuraciones y despliegues de manera eficiente. Juntos, Ansible y Docker pueden simplificar y optimizar el flujo de trabajo de DevOps.

Objetivos del Módulo

  • Comprender cómo Ansible puede interactuar con Docker.
  • Aprender a usar módulos de Ansible específicos para Docker.
  • Desplegar y gestionar contenedores Docker usando Ansible.
  • Automatizar la construcción de imágenes Docker con Ansible.

Conceptos Clave

  1. Contenedores Docker: Entornos ligeros y portátiles que contienen todo lo necesario para ejecutar una aplicación.
  2. Imágenes Docker: Plantillas inmutables que se utilizan para crear contenedores Docker.
  3. Módulos de Ansible para Docker: Conjunto de módulos que permiten gestionar contenedores, imágenes, redes y volúmenes Docker.

Módulos de Ansible para Docker

Ansible proporciona varios módulos para interactuar con Docker. Algunos de los más utilizados son:

  • docker_container: Gestiona contenedores Docker.
  • docker_image: Gestiona imágenes Docker.
  • docker_network: Gestiona redes Docker.
  • docker_volume: Gestiona volúmenes Docker.

Ejemplo Práctico: Desplegar un Contenedor Docker con Ansible

A continuación, veremos un ejemplo práctico de cómo usar Ansible para desplegar un contenedor Docker.

Paso 1: Instalación de Dependencias

Antes de comenzar, asegúrate de tener Docker y Ansible instalados en tu sistema. Puedes instalar Docker siguiendo las instrucciones en la documentación oficial de Docker. Para instalar Ansible, puedes usar el siguiente comando:

sudo apt-get update
sudo apt-get install ansible

Paso 2: Crear un Playbook de Ansible

Crea un archivo llamado deploy_docker.yml y añade el siguiente contenido:

---
- name: Desplegar un contenedor Docker
  hosts: localhost
  tasks:
    - name: Asegurarse de que Docker está instalado
      apt:
        name: docker.io
        state: present
      become: true

    - name: Iniciar el servicio Docker
      service:
        name: docker
        state: started
        enabled: true
      become: true

    - name: Desplegar un contenedor Nginx
      docker_container:
        name: nginx_container
        image: nginx:latest
        state: started
        ports:
          - "80:80"

Explicación del Playbook

  1. Instalar Docker: Utiliza el módulo apt para asegurarse de que Docker está instalado en el sistema.
  2. Iniciar el servicio Docker: Utiliza el módulo service para iniciar y habilitar el servicio Docker.
  3. Desplegar un contenedor Nginx: Utiliza el módulo docker_container para desplegar un contenedor Nginx y exponer el puerto 80.

Paso 3: Ejecutar el Playbook

Para ejecutar el playbook, usa el siguiente comando:

ansible-playbook deploy_docker.yml --ask-become-pass

Este comando ejecutará el playbook y desplegará un contenedor Nginx en tu sistema.

Ejercicio Práctico

Ejercicio 1: Desplegar una Aplicación Web en un Contenedor Docker

Objetivo: Desplegar una aplicación web simple en un contenedor Docker usando Ansible.

  1. Crear un Dockerfile: Crea un archivo llamado Dockerfile con el siguiente contenido:

    FROM python:3.8-slim
    WORKDIR /app
    COPY . /app
    RUN pip install flask
    CMD ["python", "app.py"]
    
  2. Crear una Aplicación Flask: Crea un archivo llamado app.py con el siguiente contenido:

    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():
        return 'Hello, World!'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0')
    
  3. Crear un Playbook de Ansible: Crea un archivo llamado deploy_flask_app.yml con el siguiente contenido:

    ---
    - name: Desplegar una aplicación Flask en Docker
      hosts: localhost
      tasks:
        - name: Asegurarse de que Docker está instalado
          apt:
            name: docker.io
            state: present
          become: true
    
        - name: Iniciar el servicio Docker
          service:
            name: docker
            state: started
            enabled: true
          become: true
    
        - name: Construir la imagen Docker
          docker_image:
            name: flask_app
            build:
              path: .
    
        - name: Desplegar el contenedor Flask
          docker_container:
            name: flask_container
            image: flask_app:latest
            state: started
            ports:
              - "5000:5000"
    
  4. Ejecutar el Playbook: Usa el siguiente comando para ejecutar el playbook:

    ansible-playbook deploy_flask_app.yml --ask-become-pass
    

Solución del Ejercicio

El playbook deploy_flask_app.yml realiza las siguientes acciones:

  1. Instalar Docker: Asegura que Docker está instalado en el sistema.
  2. Iniciar el servicio Docker: Inicia y habilita el servicio Docker.
  3. Construir la imagen Docker: Construye una imagen Docker a partir del Dockerfile.
  4. Desplegar el contenedor Flask: Despliega un contenedor Docker que ejecuta la aplicación Flask y expone el puerto 5000.

Conclusión

En este módulo, hemos aprendido cómo Ansible puede integrarse con Docker para automatizar la gestión de contenedores. Hemos visto cómo usar módulos de Ansible específicos para Docker y cómo desplegar y gestionar contenedores Docker usando Ansible. Además, hemos realizado un ejercicio práctico para desplegar una aplicación web en un contenedor Docker. Con estos conocimientos, estás preparado para integrar Ansible y Docker en tus flujos de trabajo de DevOps y automatizar la gestión de contenedores de manera eficiente.

© Copyright 2024. Todos los derechos reservados