Docker + Ansible
Ansible como herramienta de aprovisionamiento de contenedores
Conceptos Básicos
Docker
- Contenedor
- Imagen
- Herencia
- Repositorios
- Linking: enlaces entre contenedores
DevOps
- Desarrollo + Operaciones
- Gestión del ciclo de vida del producto
- Tres caminos
- Pensamiento sistemático
- Retroalimentación amplificada
- Experimentación contínua
- CAMS: Cultura, Automatización, Medición, "Sharing"
- Influencia de principios "Agile" en el desarrollo y operación
Ansible
¿Qué es Ansible?
- Un motor de automatización de IT
- Un sistema de gestión de configuración
- Una herramienta para el despliegue contínuo de aplicaciones
Agentless
Operación sin agentes en los nodos
- Máquina de Control (Solo Linux ATM)
- Inventario de Hosts o Nodos
- Variables por Grupo o Nodo
Pilares
- Minimalismo
- Consistencia e Idempotencia
- Seguridad
- Modularidad
- Facilidad de aprendizaje
Tecnologías
- Python ( 2.7 :-( )
- YAML
- Jinja2
- OpenSSH
Módulos
- Todos los proveedores Cloud principales
- AWS, OpenStack, GCP, Azure, DO, etc.
- Gestión de paquetes
- APT, Yum, pacman, pip, npm...
- Manejo de servicios
- systemd, upstart, supervisord
- Herramientas del sistema
- Manejo de archivos, cron, firewall, selinux
Ansible Galaxy
Playbooks
Roles
Tasks
Modules
Docker + Ansible
¿Redundancia?
Opciones...
Ansible dentro del container
FROM ansible/ubuntu14.04-ansible:stable
RUN mkdir /srv/example
WORKDIR /srv/example
ADD site.yml /srv/example/
RUN ansible-galaxy install geerlingguy.memcached
RUN ansible-playbook site.yml -c local
EXPOSE 11211
# And then start up our service
ENTRYPOINT ["/usr/bin/memcached", "-u", "memcache", ...]
Ansible para el despliegue de containers
- name: sync app code
synchronize: src={{ playbook_dir }}/../
dest={{ app_path_server }}
recursive=yes
- name: add docker directory
file: path={{ app_path_server }}/docker state=directory
- name: add docker run scripts
template: src={{ item }}.sh.j2 dest={{ app_path_server }}/docker/{{ item }}.sh
with_items:
- functions
- prepare
- run
- name: add dockerfile
template: src=Dockerfile.j2 dest={{ app_path_server }}/docker/Dockerfile
- name: add docker-compose setup
template: src=docker-compose.yml.j2 dest={{ app_path_server }}/docker-compose.yml
- name: build the service via docker-compose
docker_service:
project_src: "{{ app_path_server }}"
ansible-container
$ ansible-container init
$ ansible-container install
$ ansible-container build
$ ansible-container run
$ ansible-container push
$ ansible-container shipit
No solo automatiza la construcción de imágenes, sino que también gestiona todo el ciclo de vida de las aplicaciones.
ShipIt soporta actualmente Kubernetes y OpenShift
¡Gracias!
Docker y Ansible
By sebasmagri
Docker y Ansible
- 514