SlideShare a Scribd company logo
1 of 25
Docker deploy automation
with Fabric
1MOSCOW, October 2016
$ fab
RINAT KHABIBIEV
2
https://github.com/renskiy https://www.facebook.com/rinat.khabibiev
Since 2008
http://www.redmadrobot.com
5
https://www.docker.com/company
SOME DOCKER STATISTICS
6
DOCKER, CAVEATS
Open source
Network overhead
https://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf
7
DOCKER, BENEFITS
Simple requirements
CI/CD integration
Doesn’t require Internet connection to update App
The 12-factor App (12factor.net)
8
REDMADROBOT: TOTAL DOCKERIZATION
Python (Django)
Cron
PostgreSQL
RabbitMQ
Nginx
Elasticsearch
Redis
9
AVAILABLE DEPLOY TOOLS
Vagrant
Fabric
Ansible
Capistrano
Docker compose
Kubernetes
?
10
DEPLOY TOOL REQUIREMENTS
Arbitrary environment support
Easy adaptation (copy/paste)
Easy customization
No special education or experience requirements
Docker support
DB migrations apply and rollback
Support of private registry and complex networks
FABRICIO
11
https://github.com/renskiy/fabricio
DOCKER DEPLOY AUTOMATION TOOL
12
FABRICIO DEPLOY CONFIG EXAMPLE
# fabfile.py
from fabricio import docker, tasks
class NginxContainer(docker.Container):
image = docker.Image('nginx:1.9')
ports = '80:80'
nginx = tasks.DockerTasks(
container=NginxContainer(name='web'),
hosts=['user@example.com'],
)
13
FABRICIO DEPLOY PROCESS
$ fab --list
Available commands:
nginx backup -> pull -> migrate -> update
nginx.deploy backup -> pull -> migrate -> update
nginx.pull pull Docker image from registry
nginx.rollback rollback Docker container to previous version
nginx.update start new Docker container if necessary
$ fab nginx
[user@example.com] Executing task ‘pull’
[user@example.com] run: docker pull nginx:stable
[user@example.com] out: 1.9: Pulling from library/nginx
...
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec44b023adf0 nginx:1.9 "nginx -g" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp web
14
FABRICIO FEATURES
Build Docker images
Create containers from images with provided tags
Unlimited infrastructures
Parallel execution (Fabric feature)
Rollback containers to previous version
Work with public and private Docker registries
DB migrations and rollback, backup and restore
15
FABRICIO COMMAND PARAMS
# show detailed information about command
$ fab --display nginx
Displaying detailed information for task 'nginx':
backup -> pull -> migrate -> update
Arguments: self, tag=None, force=False, migrate=True, backup=False
# deploy container using image with provided tag
$ fab nginx:1.10
# force new container
$ fab nginx:force=yes
# combo!
$ fab nginx:1.10,force=yes
# rollback container to previous version
$ fab nginx.rollback
16
FABRICIO DOCKER CONTAINER DEFINITION
class Container(object):
image = None # type: Image
cmd = None
stop_timeout = 10
user = None
ports = None
env = None
volumes = None
links = None
hosts = None
network = None
restart_policy = None
stop_signal = None
def __init__(self, name, **options):
self.name = name
...
18
FABRICIO AND PRIVATE DOCKER REGISTRY
# start local Docker registry
$ docker run -d -p 5000:5000 --name registry -v /data/registry:/var/lib/registry registry:2
nginx = tasks.PullDockerTasks(
container=NginxContainer('web'),
hosts=['user@example.com'],
)
$ fab --list
Available commands:
nginx prepare -> push -> backup -> pull -> migrate -> update
nginx.deploy prepare -> push -> backup -> pull -> migrate -> update
nginx.prepare prepare Docker image
nginx.pull pull Docker image from registry
nginx.push push Docker image to registry
nginx.rollback rollback Docker container to previous version
nginx.update start new Docker container if necessary
19
BUILD DOCKER IMAGES WITH FABRICIO
class MyContainer(docker.Container):
image = docker.Image('my_image')
app = tasks.BuildDockerTasks(
container=MyContainer('my_service'),
hosts=['user@example.com'],
build_path='.',
)
$ fab --list
Available commands:
app prepare -> push -> backup -> pull -> migrate -> update
app.deploy prepare -> push -> backup -> pull -> migrate -> update
app.prepare prepare Docker image
app.pull pull Docker image from registry
app.push push Docker image to registry
app.rollback rollback Docker container to previous version
app.update start new Docker container if necessary
20
FABRICIO ROLES AND INFRASTRUCTURES
from fabric import api as fab
@tasks.infrastructure
def production():
fab.env.update(roledefs={'front': ['user@example.com']})
nginx = tasks.DockerTasks(
container=NginxContainer(name='web'),
roles=['front'],
)
$ fab --list
Available commands:
production select production infrastructure to run task(s) on
production.confirm automatically confirm production infrastructure selection
...
$ fab production nginx
Are you sure you want to select production infrastructure to run task(s) on? [y/N]
21
FABRICIO: DEPLOYING DJANGO PROJECTS
from fabric import api as fab
from fabricio import docker, tasks
from fabricio.apps.python.django import DjangoContainer
class BaseDjangoContainer(DjangoContainer):
image = docker.Image('my_django')
@property
def env(self):
return 'DJANGO_SETTINGS_MODULE=settings.{}'.format(
fab.env.infrastructure,
)
django = tasks.BuildDockerTasks(
container=BaseDjangoContainer('api'),
hosts=['user@example.com'],
migrate_commands=True,
)
22
FABRICIO: DEPLOYING DJANGO PROJECTS
$ fab --list
Available commands:
django prepare -> push -> backup -> pull -> migrate -> update
django.deploy prepare -> push -> backup -> pull -> migrate -> update
django.migrate apply migrations
django.migrate_back remove previously applied migrations if any
django.prepare prepare Docker image
django.pull pull Docker image from registry
django.push push Docker image to registry
django.rollback rollback Docker container to previous version
django.update start new Docker container if necessary
23
FABRICIO: DATA BACKUP AND RESTORE
from fabricio.apps.db.postgres import PostgresqlBackupMixin
class BackupDjangoContainer(BaseDjangoContainer,
PostgresqlBackupMixin):
volumes = '/data/backup/postgres:/backup'
db_backup_dir = '/backup'
django = tasks.BuildDockerTasks(
container=BackupDjangoContainer('api'),
hosts=['user@example.com'],
backup_commands=True,
)
$ fab --list
Available commands:
django.backup backup data
django.restore restore data
...
24
FABRICIO REQUIREMENTS AND INSTALL
Python 2.6 or 2.7
Docker CLI (Linux/Mac/Windows)
Docker 1.9 or greater recommended (remote side)
# virtualenv install
$ pip install --upgrade fabricio
# macOS system-wide install
$ sudo pip install --upgrade fabricio six==1.4.1
25
FABRICIO ROADMAP
Master-Slave configurations for PostgreSQL
Docker Swarm support
docker-py integration
MySQL?
Non-Django frameworks?
26
27
USEFUL LINKS & QUESTIONS
Fabricio: https://github.com/renskiy/fabricio
Author of Fabricio: https://www.facebook.com/rinat.khabibiev
Хабра-блог Redmadrobot: https://habrahabr.ru/company/redmadrobot
Redmadrobot on Facebook: https://www.facebook.com/redmadrobot
The 12-factor App (SaaS dev patterns): https://12factor.net
Docker image with cron: https://hub.docker.com/r/renskiy/cron
Questions

More Related Content

What's hot

Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)Soshi Nemoto
 
Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)Ben Hall
 
Check the version with fixes. Link in description
Check the version with fixes. Link in descriptionCheck the version with fixes. Link in description
Check the version with fixes. Link in descriptionPrzemyslaw Koltermann
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionBen Hall
 
Python virtualenv & pip in 90 minutes
Python virtualenv & pip in 90 minutesPython virtualenv & pip in 90 minutes
Python virtualenv & pip in 90 minutesLarry Cai
 
Streamline your development environment with docker
Streamline your development environment with dockerStreamline your development environment with docker
Streamline your development environment with dockerGiacomo Bagnoli
 
CoreOS + Kubernetes @ All Things Open 2015
CoreOS + Kubernetes @ All Things Open 2015CoreOS + Kubernetes @ All Things Open 2015
CoreOS + Kubernetes @ All Things Open 2015Brandon Philips
 
Big query - Command line tools and Tips - (MOSG)
Big query - Command line tools and Tips - (MOSG)Big query - Command line tools and Tips - (MOSG)
Big query - Command line tools and Tips - (MOSG)Soshi Nemoto
 
Dessi docker kubernetes paas cloud
Dessi docker kubernetes paas cloudDessi docker kubernetes paas cloud
Dessi docker kubernetes paas cloudMassimiliano Dessì
 
手把手帶你學Docker 03042017
手把手帶你學Docker 03042017手把手帶你學Docker 03042017
手把手帶你學Docker 03042017Paul Chao
 
Lessons from running potentially malicious code inside Docker containers
Lessons from running potentially malicious code inside Docker containersLessons from running potentially malicious code inside Docker containers
Lessons from running potentially malicious code inside Docker containersBen Hall
 
Docker workshop 0507 Taichung
Docker workshop 0507 Taichung Docker workshop 0507 Taichung
Docker workshop 0507 Taichung Paul Chao
 
Docker & Kubernetes
Docker & KubernetesDocker & Kubernetes
Docker & KubernetesTroy Harvey
 
Docker Ecosystem: Part III - Machine
Docker Ecosystem: Part III - MachineDocker Ecosystem: Part III - Machine
Docker Ecosystem: Part III - MachineMario IC
 
PuppetCamp SEA 1 - Version Control with Puppet
PuppetCamp SEA 1 - Version Control with PuppetPuppetCamp SEA 1 - Version Control with Puppet
PuppetCamp SEA 1 - Version Control with PuppetWalter Heck
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetWalter Heck
 
How to deploy spark instance using ansible 2.0 in fiware lab v2
How to deploy spark instance using ansible 2.0 in fiware lab v2How to deploy spark instance using ansible 2.0 in fiware lab v2
How to deploy spark instance using ansible 2.0 in fiware lab v2Fernando Lopez Aguilar
 
PuppetCamp SEA 1 - Puppet Deployment at OnApp
PuppetCamp SEA 1 - Puppet Deployment  at OnAppPuppetCamp SEA 1 - Puppet Deployment  at OnApp
PuppetCamp SEA 1 - Puppet Deployment at OnAppWalter Heck
 

What's hot (20)

Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)
 
Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)
 
Check the version with fixes. Link in description
Check the version with fixes. Link in descriptionCheck the version with fixes. Link in description
Check the version with fixes. Link in description
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and Production
 
Python virtualenv & pip in 90 minutes
Python virtualenv & pip in 90 minutesPython virtualenv & pip in 90 minutes
Python virtualenv & pip in 90 minutes
 
Streamline your development environment with docker
Streamline your development environment with dockerStreamline your development environment with docker
Streamline your development environment with docker
 
CoreOS + Kubernetes @ All Things Open 2015
CoreOS + Kubernetes @ All Things Open 2015CoreOS + Kubernetes @ All Things Open 2015
CoreOS + Kubernetes @ All Things Open 2015
 
Big query - Command line tools and Tips - (MOSG)
Big query - Command line tools and Tips - (MOSG)Big query - Command line tools and Tips - (MOSG)
Big query - Command line tools and Tips - (MOSG)
 
Docker in practice
Docker in practiceDocker in practice
Docker in practice
 
Dessi docker kubernetes paas cloud
Dessi docker kubernetes paas cloudDessi docker kubernetes paas cloud
Dessi docker kubernetes paas cloud
 
手把手帶你學Docker 03042017
手把手帶你學Docker 03042017手把手帶你學Docker 03042017
手把手帶你學Docker 03042017
 
Lessons from running potentially malicious code inside Docker containers
Lessons from running potentially malicious code inside Docker containersLessons from running potentially malicious code inside Docker containers
Lessons from running potentially malicious code inside Docker containers
 
Docker workshop 0507 Taichung
Docker workshop 0507 Taichung Docker workshop 0507 Taichung
Docker workshop 0507 Taichung
 
Docker & Kubernetes
Docker & KubernetesDocker & Kubernetes
Docker & Kubernetes
 
Docker Ecosystem: Part III - Machine
Docker Ecosystem: Part III - MachineDocker Ecosystem: Part III - Machine
Docker Ecosystem: Part III - Machine
 
Docker perl build
Docker perl buildDocker perl build
Docker perl build
 
PuppetCamp SEA 1 - Version Control with Puppet
PuppetCamp SEA 1 - Version Control with PuppetPuppetCamp SEA 1 - Version Control with Puppet
PuppetCamp SEA 1 - Version Control with Puppet
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
 
How to deploy spark instance using ansible 2.0 in fiware lab v2
How to deploy spark instance using ansible 2.0 in fiware lab v2How to deploy spark instance using ansible 2.0 in fiware lab v2
How to deploy spark instance using ansible 2.0 in fiware lab v2
 
PuppetCamp SEA 1 - Puppet Deployment at OnApp
PuppetCamp SEA 1 - Puppet Deployment  at OnAppPuppetCamp SEA 1 - Puppet Deployment  at OnApp
PuppetCamp SEA 1 - Puppet Deployment at OnApp
 

Viewers also liked

2016 Tellurian Diary and Notebook Collection
2016 Tellurian Diary and Notebook Collection2016 Tellurian Diary and Notebook Collection
2016 Tellurian Diary and Notebook CollectionTellurian Book Production
 
Goetz buyer persona
Goetz buyer personaGoetz buyer persona
Goetz buyer personaSydney Goetz
 
Chef a la local [autosaved]
Chef a la local [autosaved]Chef a la local [autosaved]
Chef a la local [autosaved]Drakkar Jones
 
Voluntrme Introduction
Voluntrme IntroductionVoluntrme Introduction
Voluntrme Introductionvoluntrme
 
Configuration d'Outlook
Configuration d'OutlookConfiguration d'Outlook
Configuration d'Outlooks_0ra
 

Viewers also liked (9)

PRACTICA UPS A10
PRACTICA UPS A10PRACTICA UPS A10
PRACTICA UPS A10
 
Alpine pyramid
Alpine pyramidAlpine pyramid
Alpine pyramid
 
2016 Tellurian Diary and Notebook Collection
2016 Tellurian Diary and Notebook Collection2016 Tellurian Diary and Notebook Collection
2016 Tellurian Diary and Notebook Collection
 
PHPUnit
PHPUnitPHPUnit
PHPUnit
 
Goetz buyer persona
Goetz buyer personaGoetz buyer persona
Goetz buyer persona
 
Chef a la local [autosaved]
Chef a la local [autosaved]Chef a la local [autosaved]
Chef a la local [autosaved]
 
resume (1)
resume (1)resume (1)
resume (1)
 
Voluntrme Introduction
Voluntrme IntroductionVoluntrme Introduction
Voluntrme Introduction
 
Configuration d'Outlook
Configuration d'OutlookConfiguration d'Outlook
Configuration d'Outlook
 

Similar to Fabricio - Docker deploy automation

Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerMarcus Lönnberg
 
Docker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developersDocker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developersArun Gupta
 
Dockerfiles building docker images automatically v (workdir, env, add, and ...
Dockerfiles   building docker images automatically v (workdir, env, add, and ...Dockerfiles   building docker images automatically v (workdir, env, add, and ...
Dockerfiles building docker images automatically v (workdir, env, add, and ...ansonjonel
 
Architecting .NET Applications for Docker and Container Based Deployments
Architecting .NET Applications for Docker and Container Based DeploymentsArchitecting .NET Applications for Docker and Container Based Deployments
Architecting .NET Applications for Docker and Container Based DeploymentsBen Hall
 
Docker for mere mortals
Docker for mere mortalsDocker for mere mortals
Docker for mere mortalsHenryk Konsek
 
Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020CloudHero
 
Docker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudDocker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudSamuel Chow
 
Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4Binary Studio
 
Develop with docker 2014 aug
Develop with docker 2014 augDevelop with docker 2014 aug
Develop with docker 2014 augVincent De Smet
 
DevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux ContainersDevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux Containersinside-BigData.com
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 applicationRoman Rodomansky
 
Delivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devicesDelivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devicesAjeet Singh Raina
 
Build service with_docker_in_90mins
Build service with_docker_in_90minsBuild service with_docker_in_90mins
Build service with_docker_in_90minsLarry Cai
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdfOKLABS
 
Docker Introductory workshop
Docker Introductory workshopDocker Introductory workshop
Docker Introductory workshopRuncy Oommen
 
Pluralsight Webinar: Simplify Your Project Builds with Docker
Pluralsight Webinar: Simplify Your Project Builds with DockerPluralsight Webinar: Simplify Your Project Builds with Docker
Pluralsight Webinar: Simplify Your Project Builds with DockerElton Stoneman
 

Similar to Fabricio - Docker deploy automation (20)

Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with Docker
 
Docker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developersDocker, Kubernetes, and Mesos recipes for Java developers
Docker, Kubernetes, and Mesos recipes for Java developers
 
Dockerfiles building docker images automatically v (workdir, env, add, and ...
Dockerfiles   building docker images automatically v (workdir, env, add, and ...Dockerfiles   building docker images automatically v (workdir, env, add, and ...
Dockerfiles building docker images automatically v (workdir, env, add, and ...
 
Architecting .NET Applications for Docker and Container Based Deployments
Architecting .NET Applications for Docker and Container Based DeploymentsArchitecting .NET Applications for Docker and Container Based Deployments
Architecting .NET Applications for Docker and Container Based Deployments
 
Docker for mere mortals
Docker for mere mortalsDocker for mere mortals
Docker for mere mortals
 
Docker^3
Docker^3Docker^3
Docker^3
 
Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020Docker Essentials Workshop— Innovation Labs July 2020
Docker Essentials Workshop— Innovation Labs July 2020
 
Docker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudDocker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google Cloud
 
Docker
DockerDocker
Docker
 
Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4Academy PRO: Docker. Lecture 4
Academy PRO: Docker. Lecture 4
 
Develop with docker 2014 aug
Develop with docker 2014 augDevelop with docker 2014 aug
Develop with docker 2014 aug
 
DevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux ContainersDevOps Workflow: A Tutorial on Linux Containers
DevOps Workflow: A Tutorial on Linux Containers
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
 
Delivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devicesDelivering Docker & K3s worloads to IoT Edge devices
Delivering Docker & K3s worloads to IoT Edge devices
 
Build service with_docker_in_90mins
Build service with_docker_in_90minsBuild service with_docker_in_90mins
Build service with_docker_in_90mins
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdf
 
Docker Introductory workshop
Docker Introductory workshopDocker Introductory workshop
Docker Introductory workshop
 
Learning Docker with Thomas
Learning Docker with ThomasLearning Docker with Thomas
Learning Docker with Thomas
 
Pluralsight Webinar: Simplify Your Project Builds with Docker
Pluralsight Webinar: Simplify Your Project Builds with DockerPluralsight Webinar: Simplify Your Project Builds with Docker
Pluralsight Webinar: Simplify Your Project Builds with Docker
 
ABCs of docker
ABCs of dockerABCs of docker
ABCs of docker
 

Recently uploaded

UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSISrknatarajan
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations120cr0395
 
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingrakeshbaidya232001
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Christo Ananth
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Dr.Costas Sachpazis
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxfenichawla
 
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Christo Ananth
 
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur EscortsRussian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escortsranjana rawat
 
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordAsst.prof M.Gokilavani
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Dr.Costas Sachpazis
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINESIVASHANKAR N
 

Recently uploaded (20)

UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations
 
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writing
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
 
DJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINE
DJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINEDJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINE
DJARUM4D - SLOT GACOR ONLINE | SLOT DEMO ONLINE
 
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
 
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
 
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptxBSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
BSides Seattle 2024 - Stopping Ethan Hunt From Taking Your Data.pptx
 
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
 
Roadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and RoutesRoadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and Routes
 
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur EscortsRussian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
Russian Call Girls in Nagpur Grishma Call 7001035870 Meet With Nagpur Escorts
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
 
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
 
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete RecordCCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
CCS335 _ Neural Networks and Deep Learning Laboratory_Lab Complete Record
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
 

Fabricio - Docker deploy automation

  • 1. Docker deploy automation with Fabric 1MOSCOW, October 2016 $ fab
  • 5. 6 DOCKER, CAVEATS Open source Network overhead https://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf
  • 6. 7 DOCKER, BENEFITS Simple requirements CI/CD integration Doesn’t require Internet connection to update App The 12-factor App (12factor.net)
  • 7. 8 REDMADROBOT: TOTAL DOCKERIZATION Python (Django) Cron PostgreSQL RabbitMQ Nginx Elasticsearch Redis
  • 9. 10 DEPLOY TOOL REQUIREMENTS Arbitrary environment support Easy adaptation (copy/paste) Easy customization No special education or experience requirements Docker support DB migrations apply and rollback Support of private registry and complex networks
  • 11. 12 FABRICIO DEPLOY CONFIG EXAMPLE # fabfile.py from fabricio import docker, tasks class NginxContainer(docker.Container): image = docker.Image('nginx:1.9') ports = '80:80' nginx = tasks.DockerTasks( container=NginxContainer(name='web'), hosts=['user@example.com'], )
  • 12. 13 FABRICIO DEPLOY PROCESS $ fab --list Available commands: nginx backup -> pull -> migrate -> update nginx.deploy backup -> pull -> migrate -> update nginx.pull pull Docker image from registry nginx.rollback rollback Docker container to previous version nginx.update start new Docker container if necessary $ fab nginx [user@example.com] Executing task ‘pull’ [user@example.com] run: docker pull nginx:stable [user@example.com] out: 1.9: Pulling from library/nginx ... $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ec44b023adf0 nginx:1.9 "nginx -g" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp web
  • 13. 14 FABRICIO FEATURES Build Docker images Create containers from images with provided tags Unlimited infrastructures Parallel execution (Fabric feature) Rollback containers to previous version Work with public and private Docker registries DB migrations and rollback, backup and restore
  • 14. 15 FABRICIO COMMAND PARAMS # show detailed information about command $ fab --display nginx Displaying detailed information for task 'nginx': backup -> pull -> migrate -> update Arguments: self, tag=None, force=False, migrate=True, backup=False # deploy container using image with provided tag $ fab nginx:1.10 # force new container $ fab nginx:force=yes # combo! $ fab nginx:1.10,force=yes # rollback container to previous version $ fab nginx.rollback
  • 15. 16 FABRICIO DOCKER CONTAINER DEFINITION class Container(object): image = None # type: Image cmd = None stop_timeout = 10 user = None ports = None env = None volumes = None links = None hosts = None network = None restart_policy = None stop_signal = None def __init__(self, name, **options): self.name = name ...
  • 16. 18 FABRICIO AND PRIVATE DOCKER REGISTRY # start local Docker registry $ docker run -d -p 5000:5000 --name registry -v /data/registry:/var/lib/registry registry:2 nginx = tasks.PullDockerTasks( container=NginxContainer('web'), hosts=['user@example.com'], ) $ fab --list Available commands: nginx prepare -> push -> backup -> pull -> migrate -> update nginx.deploy prepare -> push -> backup -> pull -> migrate -> update nginx.prepare prepare Docker image nginx.pull pull Docker image from registry nginx.push push Docker image to registry nginx.rollback rollback Docker container to previous version nginx.update start new Docker container if necessary
  • 17. 19 BUILD DOCKER IMAGES WITH FABRICIO class MyContainer(docker.Container): image = docker.Image('my_image') app = tasks.BuildDockerTasks( container=MyContainer('my_service'), hosts=['user@example.com'], build_path='.', ) $ fab --list Available commands: app prepare -> push -> backup -> pull -> migrate -> update app.deploy prepare -> push -> backup -> pull -> migrate -> update app.prepare prepare Docker image app.pull pull Docker image from registry app.push push Docker image to registry app.rollback rollback Docker container to previous version app.update start new Docker container if necessary
  • 18. 20 FABRICIO ROLES AND INFRASTRUCTURES from fabric import api as fab @tasks.infrastructure def production(): fab.env.update(roledefs={'front': ['user@example.com']}) nginx = tasks.DockerTasks( container=NginxContainer(name='web'), roles=['front'], ) $ fab --list Available commands: production select production infrastructure to run task(s) on production.confirm automatically confirm production infrastructure selection ... $ fab production nginx Are you sure you want to select production infrastructure to run task(s) on? [y/N]
  • 19. 21 FABRICIO: DEPLOYING DJANGO PROJECTS from fabric import api as fab from fabricio import docker, tasks from fabricio.apps.python.django import DjangoContainer class BaseDjangoContainer(DjangoContainer): image = docker.Image('my_django') @property def env(self): return 'DJANGO_SETTINGS_MODULE=settings.{}'.format( fab.env.infrastructure, ) django = tasks.BuildDockerTasks( container=BaseDjangoContainer('api'), hosts=['user@example.com'], migrate_commands=True, )
  • 20. 22 FABRICIO: DEPLOYING DJANGO PROJECTS $ fab --list Available commands: django prepare -> push -> backup -> pull -> migrate -> update django.deploy prepare -> push -> backup -> pull -> migrate -> update django.migrate apply migrations django.migrate_back remove previously applied migrations if any django.prepare prepare Docker image django.pull pull Docker image from registry django.push push Docker image to registry django.rollback rollback Docker container to previous version django.update start new Docker container if necessary
  • 21. 23 FABRICIO: DATA BACKUP AND RESTORE from fabricio.apps.db.postgres import PostgresqlBackupMixin class BackupDjangoContainer(BaseDjangoContainer, PostgresqlBackupMixin): volumes = '/data/backup/postgres:/backup' db_backup_dir = '/backup' django = tasks.BuildDockerTasks( container=BackupDjangoContainer('api'), hosts=['user@example.com'], backup_commands=True, ) $ fab --list Available commands: django.backup backup data django.restore restore data ...
  • 22. 24 FABRICIO REQUIREMENTS AND INSTALL Python 2.6 or 2.7 Docker CLI (Linux/Mac/Windows) Docker 1.9 or greater recommended (remote side) # virtualenv install $ pip install --upgrade fabricio # macOS system-wide install $ sudo pip install --upgrade fabricio six==1.4.1
  • 23. 25 FABRICIO ROADMAP Master-Slave configurations for PostgreSQL Docker Swarm support docker-py integration MySQL? Non-Django frameworks?
  • 24. 26
  • 25. 27 USEFUL LINKS & QUESTIONS Fabricio: https://github.com/renskiy/fabricio Author of Fabricio: https://www.facebook.com/rinat.khabibiev Хабра-блог Redmadrobot: https://habrahabr.ru/company/redmadrobot Redmadrobot on Facebook: https://www.facebook.com/redmadrobot The 12-factor App (SaaS dev patterns): https://12factor.net Docker image with cron: https://hub.docker.com/r/renskiy/cron Questions

Editor's Notes

  1. Всем привет, спасибо что пришли на мой доклад. Сегодня мы погорим об автоматическом деплое Docker контейнеров.
  2. Итак, меня зовут Ринат Хабибиев. Я являюсь руководителем отдела веб-разработки в компании Remadrobot.
  3. Мы разрабатываем комплексные решения для российских и зарубежных заказчиков. Такие решения состоят из мобильного и веб приложений, а также бэкенда.
  4. Начнем с небольшой статистики. Обратим внимание на количество звед github, и этого всего за 3 года - по моему впечатляющее достижение!
  5. Немного о грустном. Многие наши заказчики недоверчиво относятся к Docker, не только потому что это технология молодая, но также Open Source. Еще одна досада - это слегка увеличенные сетевые задержки.
  6. И все же преимуществ больше. Среди них: Упрощенные требования к инфраструктуре (нужен только Docker). Более логичная система интеграции с CI/CD (образ работает одинаково на всех хостах, где установлен Docker). Не нужен доступ в интернет, чтобы обновить зависимости. Еще 12 факторов, перечисленных на 12factor.net.
  7. 1.5 года назад мы решили полностью перейти на Docker. Но такой переход был сопряжен с рядом трудностей. Например, не все образы сразу можно найти на Docker Hub. А если бы переход был неполный, то это не только не упростило бы нам работу, но добавило бы дополнительную по поддержке зоопарка технологий. Однако, мы удачно справились со всеми трудностями, и на текущий момент три проекта нашей разработки работают в Docker контейнерах.
  8. До перехода на Docker использовали Vagrant для запуска сервисов и разворачивания тестового сервера. Потом приспособили Fabric. Fabric занимает один модуль. После того, как появилась время заняться оптимизацией: Ansible - YAML, требует специально обучения. Capistrano - нет преимуществ над Fabric. Docker Compose и Kubernetes - также YAML, плюс делают упор на оркестрации. Остальное (Chef, Puppet, Salt и пр.) не стали рассматривать из-за чрезмерной сложности. Мы так и не смогли подобрать удобного для себя инструмента.
  9. Зато поиск решения привел к созданию списка требований и пожеланий к такой системе. поддержка любых типов инфраструктуры: от dev и test до production адаптация конфигов под новый проект (копи-паст рулит) кастомизация под нужды проекта должна быть фичей, а не костылем отсутствие необходимости переучиваться поддержка Docker миграция и их откат работа с Docker Hub и приватными Registry для защищенных сетей Правильно сформулированные требования - это половина успешного продукта.
  10. А потому я принял решение о разработке совершенного нового инструмента для деплоя, непохожего на все то, что мы рассматривали. Знакомтесь, Fabricio - средство для автоматизации деплоя на базе Fabric. Большое внимание при его разработке уделяется стабильности и отсутствию ошибок, что достигается за счет высокого покрытия автоматическими тестами.
  11. Как это принято при знакомстве с новым инструментом, сразу простой пример - разворачивание контейнера с Nginx на 80-м порту. Свойства контейнера задаются при помощи специального класса, который описывает контейнер. Внизу на уровне модуля создается сущность с описанием доступных команд Fabric. Интеграция с Fabric означает работу всех его возможностей.
  12. Например, для вывода списка доступных задач набираем fab -l. Выполнить команду просто - достаточно указать ее название. Внизу результат выполнения команды «fab nginx».
  13. Кратко перечислю основные возможности Fabricio сборка образов Docker из исходников поддержка тегов поддержка произвольного количества и типа инфраструктур параллельная выкладка контейнера на несколько хостов откат контейнера к предыдущей версии работа с публичными и приватными репозиториями образов Docker применение и откат миграций, а также бэкап и восстановление Актуальный список всегда можно найти на странице проекта в Github
  14. Почти все команды Fabricio содержат опциональные параметры. Список параметров и значений по-умолчанию смотрим при помощи опции --display. Можно использовать позиционный способ указания параметра и через keyword - все как в Python. Перечисление параметров через запятую. Обращение к нижестоящей по иерархии команде через точку.
  15. Стандартный набор свойств контейнера можно увидеть в описании базового класса. Большинство свойств можно передать в конструктор при создании экземпляра контейнера, либо переопределить их в потомках.
  16. Когда я говорил о поддержке сложных сетевых конфигураций, я имел в виду тот факт, что целевая инфраструктура может быть настолько сильно защищена от внешнего воздействия, что порой на ней нет даже доступа в Интернет, либо он ограничен буквально несколькими доверенными сайтами, на которых хранятся критически важные обновления системы. А потому закачать, скажем, свежий образ приложения на боевой сервер становится довольно проблематично, не говоря уже о том, что сборка образа на самом сервере в таких условиях вообще невозможна. В таких случаях нас выручает возможность установить SSH туннель между боевым сервером и компьютером администратора, у которого как правило нет ограничений на выход в Интернет. Нам повезло, что Fabric из коробки умеет устанавливать такой туннель, обеспечивая необходимый доступ к ресурсам с боевой инфраструктуры. Но есть одна проблема: даже при установке SSH туннеля демон Докера не может скачать образ из основного репозитория (hub.docker.com). Это связано с особенностью работы сетевых балансировщиков и маршрутизаторов, которые ожидают, что в заголовке Host клиент укажет доменное имя того хоста, к которому он хочет обратиться. Через туннель этот заголовок выставляется неверно, соответственно, запрос на скачивание образа Docker не доходит до нужного сервера. Проблему в принципе можно решить переопределяя доменные имена в /etc/hosts, заворачивая их в localhost. Есть даже специальные расширения для Linux, которые позволяют установить, доменные алиасы для отдельного пользователя системы. Но я думаю многие со мной согласятся, что это не очень удобный способ.
  17. Одной из самых интересных возможностей Fabricio является поддержка защищенных сетей (у которых нет прямого доступа к Docker Hub). Она реализована при помощи промежуточного Registry. По-умолчанию, используется Registry запущенный локально, как в этом примере. Применяется другой класс задач, который расширяет список двумя дополнительными командами: prepare и push. prepare готовит образ, то есть скачивать его из основного репозитория, а push скачивает образ в промежуточный, доступ к которому с защищенной инфраструктуры обеспечивается через SSH туннель.
  18. Для сборки образов используется еще один класс задач, в который можно передать путь до папки с Dockerfile. В остальном отличий от предыдущего кейса нет.
  19. Мощным инструментом Fabricio являются роли и поддержка различных инфраструктур. И если роли наследуются от Fabric, то поддержка инфраструктур реализуются при помощи декоратора, которым можно обернуть специальную функцию, подготавливающую текущее окружение для работы с соответствующей инфраструктурой. Применение этого декоратора создает дополнительные команды, предназначенные для выбора инфраструктуры. Для этого, одну из этих команд надо выполнить перед всеми остальными.
  20. Каждый ORM фреймворк имеет свои собственные механизмы применения и отката миграций. Единственный фреймворк, который пока поддерживается Fabricio - это Django. Вся логика прозрачно инкапсулирована в специальном типе контейнера и автоматически задействуется при деплое и откате.
  21. Применение и откат миграций осуществляется автоматически, но есть возможность вызвать команды вручную при помощи migrate и migrate_back.
  22. В Fabricio также реализован простейший механизм бэкапа и восстановления для PostgreSQL на основе pg_dump и pg_restore. Весь функционал реализован в отдельном классе и может быть при необходимости использован как примесь.
  23. Если я смог вас заинтересовать, то вам наверняка будет интересно что требуется для работы Fabricio. Использование Python 2 здесь обусловлено возможностями самого Fabric, который пока не осуществил переход на 3-ю версию. Также для работы требуется установленный консольный клиент для Docker. На хосте должна быть установлена соответствующая версия Docker, от версии зависит работоспособность некоторых опций.
  24. Поддержка деплоя Master-Slave конфигураций PostgreSQL Поддержка Docker Swarm Интеграция с docker-py Возможно MySQL И другие отличные от Django фреймворки
  25. О стоимости и ограничениях. Спешу обрадовать, что Fabricio абсолютно бесплатен и не обладает какими-либо ограничениями на использование.
  26. Полезные ссылки Вопросы?
  27. Одной из самых насущных проблем стала автоматизация деплоя. Часто этим словом определяют совокупность трех операций: провизионинга, оркестрации и собственно сам деплоя. Провизионинг - это подготовка сервера к работе (например, установка на нем Docker). Оркестрация - описание конфигов взаимодействия контейнеров между собой и окружающей инфраструктурой. А деплой - это процесс запуска нового контейнера из свежего образа.