Docker, Containers, and the Futureof Application Delivery
Ivan Gaas
Ivan GaasDevOps Engineer
Problems:
• How to configure destination server the same way of my one?
• How to do it repeatable and automatically?• How to delivery my project to this server?• How to be sure my project will work always
with right environment?
Ivan GaasDevOps Engineer
Chefbase = %w{ apt build-essential git curl vim }apache= %w{ apache2 apache2::mod_rewrite apache2::mod_php5 apache2::mod_expires }php = %w{ php php::module_mysql php::module_memcache php::module_gd php::module_curl}mysql = %w{ mysql::server}drupal= %w{ drush memcached }[base, apache, php, mysql, drupal].each do |group| group.each {|recipe| include_recipe recipe}endpkgs = value_for_platform( [ 'centos', 'redhat', 'fedora' ] => 'default' => %w{ pcre-devel php-mcrypt } }, [ 'debian', 'ubuntu' ] => { 'default' => %w{ libpcre3-dev php5-mcrypt } }, 'default' => %w{ libpcre3-dev php5-mcrypt})pkgs.each {|pkg| package ( pkg ) { action :install } }php_pear ('uploadprogress') { action :install }template "#{node['php']['ext_conf_dir']}/deploy-drupal.ini" do source "deploy-drupal.ini.erb" mode 0644 owner "root" group "root" notifies :reload, "service[apache2]"end
class drupal_sandbox ( $virtual_document_root = '/srv/www/vhost/%0', $use_varnish = false, $php_memory_limit = $drupal_sandbox::params::php_memory_limit, $apache_addr = $drupal_sandbox::params::apache_addr, $apache_port = $drupal_sandbox::params::apache_port, $memcache_mem = $drupal_sandbox::params::memcache_mem, $apache_mpm_wk_max_clients = $drupal_sandbox::params::apache_mpm_wk_max_clients, $fpm_max_children = $drupal_sandbox::params::fpm_max_children, $fpm_start_servers = $drupal_sandbox::params::fpm_start_servers, $fpm_min_spare_servers = $drupal_sandbox::params::fpm_min_spare_servers, $fpm_max_spare_servers = $drupal_sandbox::params::fpm_max_spare_servers, $innodb_buffer_pool_size = $drupal_sandbox::params::innodb_buffer_pool_size, $innodb_log_file_size = $drupal_sandbox::params::innodb_log_file_size) inherits drupal_sandbox::params
Puppet- group_by: key={{ ansible_os_family }}- name: make sure the ssh user is part of users user: name={{ ansible_ssh_user }} groups=users,{{ www_user }} append=yes when: ansible_ssh_user != 'root'- name: make sure the vhosts directory exists (ignore chgrp errors on vagrant) file: path=/var/www/vhosts/{{ item.key }} state=directory mode=2775 owner={{ ansible_ssh_user }} group=users with_dict: sites ignore_errors: true- name: Clone the code from repository git: repo={{ item.value.git }} dest=/var/www/vhosts/{{ item.key }}/drupal version={{ item.value.version }} accept_hostkey=yes with_dict: sites sudo: no- name: Create files folder (ignore chgrp errors on vagrant) file: path=/var/www/vhosts/{{ item.key }}/drupal/sites/default/files state=directory mode=2775 owner={{ ansible_ssh_user }} group={{ www_user }} recurse=yes with_dict: sites ignore_errors: true- name: Create cache folder (boost) (ignore chgrp errors on vagrant)
Ansible
Skipped over 100500 lines…
Ivan GaasDevOps Engineer
WTF???
Chef Puppet
Ansib
leSaltStack
Ivan GaasDevOps Engineer
Why and what is Docker?
Ivan GaasDevOps Engineer
Environment compatibility nightmare
Ivan GaasDevOps Engineer
Cargo transport pre 1960
Ivan GaasDevOps Engineer
Delivery matrix
Ivan GaasDevOps Engineer
Solution: shipping containers
Ivan GaasDevOps Engineer
Containers are standard
Ivan GaasDevOps Engineer
Docker containers
Ivan GaasDevOps Engineer
Delivery matrix
Ivan GaasDevOps Engineer
Docker is not only containers but packaging layers
Me: Anyone:
Base layer
Base layer
My layer Anyone’s layer
Common layerCommon layer
Ivan GaasDevOps Engineer
Docker layers
Ivan GaasDevOps Engineer
Fast and easy startJust learn:
• docker pull• docker run• docker exec• docker commit• docker push
As easy as basic GIT!
Ivan GaasDevOps Engineer
Enjoy!
Ivan GaasDevOps Engineer
Ivan GaasDevOps Engineer
https://www.linkedin.com/in/ivangaas
Золотой спонсор:
Thank you!
При поддержке: Серебряный спонсор:
Top Related