Slide 1

Slide 1 text

Дмитрий Столяров v2 Собираем Docker-образы быстро и удобно

Slide 2

Slide 2 text

# whoami dmitry.stolyarov # hostname -d flant.ru # cat /etc/motd Собираем Docker-образы быстро и удобно Привет!

Slide 3

Slide 3 text

24×7×365 L1/L2/L3/+ DevOps SLA

Slide 4

Slide 4 text

Опыт

Slide 5

Slide 5 text

OpenSolaris Zones Опыт

Slide 6

Slide 6 text

Gentoo и Linux-VServer 2006 OpenSolaris Zones Опыт

Slide 7

Slide 7 text

Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 Опыт

Slide 8

Slide 8 text

Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 LXC Опыт

Slide 9

Slide 9 text

Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 jailer by flant 2009 LXC Опыт

Slide 10

Slide 10 text

Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 jailer by flant 2009 LXC Docker 2013, осень Опыт

Slide 11

Slide 11 text

Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 jailer by flant 2009 LXC Docker 2013, осень Docker 2014, 6 июня Опыт

Slide 12

Slide 12 text

Процесс сборки Docker-образов для CI/CD

Slide 13

Slide 13 text

git проекта

Slide 14

Slide 14 text

git проекта V2

Slide 15

Slide 15 text

git проекта V2 PHP 7

Slide 16

Slide 16 text

git проекта V2 PHP 7 git модуля для php

Slide 17

Slide 17 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx

Slide 18

Slide 18 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx разработчики

Slide 19

Slide 19 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx разработчики devops

Slide 20

Slide 20 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx разработчики devops

Slide 21

Slide 21 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx разработчики devops

Slide 22

Slide 22 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx разработчики devops docker образ backend

Slide 23

Slide 23 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx разработчики devops docker образ backend

Slide 24

Slide 24 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx разработчики devops docker образ backend docker образ frontend

Slide 25

Slide 25 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx разработчики devops docker образ backend docker образ frontend < 200 МБ < 200 МБ

Slide 26

Slide 26 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx разработчики devops docker образ backend docker образ frontend < 200 МБ < 200 МБ 10 КБ

Slide 27

Slide 27 text

git проекта V2 PHP 7 git модуля для php nginx 1.3 git модуля для nginx разработчики devops docker образ backend docker образ frontend < 200 МБ < 200 МБ 10 КБ +10 КБ

Slide 28

Slide 28 text

разработчики devops docker образ backend docker образ frontend 10 сек. < 200 МБ < 200 МБ V2 PHP 7 nginx 1.3 git проекта git модуля для nginx git модуля для php 10 сек. 10 КБ +10 КБ

Slide 29

Slide 29 text

разработчики devops docker образ backend docker образ frontend } 10 сек. < 200 МБ < 200 МБ V2 PHP 7 nginx 1.3 git проекта git модуля для nginx git модуля для php 10 сек. 10 КБ +10 КБ

Slide 30

Slide 30 text

разработчики devops docker образ backend docker образ frontend }тестовая площадка 10 сек. < 200 МБ < 200 МБ V2 PHP 7 nginx 1.3 git проекта git модуля для nginx git модуля для php 10 сек. 10 КБ +10 КБ

Slide 31

Slide 31 text

разработчики devops docker образ backend docker образ frontend }тестовая площадка production 10 сек. < 200 МБ < 200 МБ V2 PHP 7 nginx 1.3 git проекта git модуля для nginx git модуля для php 10 сек. 10 КБ +10 КБ

Slide 32

Slide 32 text

разработчики devops docker образ backend docker образ frontend }тестовая площадка production программисты 10 сек. < 200 МБ < 200 МБ V2 PHP 7 nginx 1.3 git проекта git модуля для nginx git модуля для php 10 сек. 10 КБ +10 КБ

Slide 33

Slide 33 text

разработчики devops docker образ backend docker образ frontend }тестовая площадка production программисты другие площадки 10 сек. < 200 МБ < 200 МБ V2 PHP 7 nginx 1.3 git проекта git модуля для nginx git модуля для php 10 сек. 10 КБ +10 КБ

Slide 34

Slide 34 text

разработчики devops docker образ backend docker образ frontend }тестовая площадка production программисты другие площадки 10 сек. < 200 МБ < 200 МБ V2 PHP 7 nginx 1.3 git проекта git модуля для nginx git модуля для php 10 сек. 10 КБ +10 КБ архив

Slide 35

Slide 35 text

Что должно быть в стандартной библиотеке?

Slide 36

Slide 36 text

Что должно быть в стандартной библиотеке? Все функции, которые могут понадобиться пользователям?

Slide 37

Slide 37 text

Что должно быть в стандартной библиотеке? Все функции, которые могут понадобиться пользователям? Функции, которые могут понадобиться всем пользователям? или

Slide 38

Slide 38 text

Почему не Dockerfile?

Slide 39

Slide 39 text

Почему не Dockerfile? #1: Everyone's problem is slightly different. Focus on the part that is the same for everyone, and solve that.

Slide 40

Slide 40 text

Почему не Dockerfile? #2: Containers must be portable to the greatest possible number of machines. Be suspicious of any change which makes machines less interchangeable. #1: Everyone's problem is slightly different. Focus on the part that is the same for everyone, and solve that.

Slide 41

Slide 41 text

Почему не Dockerfile? #3: No is temporary, Yes is forever. If you're not sure about a new feature, say no. You can change your mind later. #2: Containers must be portable to the greatest possible number of machines. Be suspicious of any change which makes machines less interchangeable. #1: Everyone's problem is slightly different. Focus on the part that is the same for everyone, and solve that.

Slide 42

Slide 42 text

dapp github.com/flant/dapp Специализированная Workflow утилита для построения CI/CD

Slide 43

Slide 43 text

dapp github.com/flant/dapp Специализированная Workflow утилита для построения CI/CD $ ruby -v ruby >= 2.1

Slide 44

Slide 44 text

dapp github.com/flant/dapp Специализированная Workflow утилита для построения CI/CD $ ruby -v ruby >= 2.1 $ gem install dapp

Slide 45

Slide 45 text

dapp github.com/flant/dapp Специализированная Workflow утилита для построения CI/CD $ gem install dapp

Slide 46

Slide 46 text

dapp github.com/flant/dapp Специализированная Workflow утилита для построения CI/CD Сейчас умеет только “собирать” (и складывать в Docker registry) $ gem install dapp

Slide 47

Slide 47 text

dapp github.com/flant/dapp Специализированная Workflow утилита для построения CI/CD Сейчас умеет только “собирать” (и складывать в Docker registry) Будет поддержка полного цикла CI/CD $ gem install dapp

Slide 48

Slide 48 text

dapp github.com/flant/dapp Специализированная Workflow утилита для построения CI/CD Сейчас умеет только “собирать” (и складывать в Docker registry) Будет поддержка полного цикла CI/CD gitlab + gitlab ci → kubernetes $ gem install dapp

Slide 49

Slide 49 text

dapp github.com/flant/dapp Специализированная Workflow утилита для построения CI/CD Сейчас умеет только “собирать” (и складывать в Docker registry) Будет поддержка полного цикла CI/CD gitlab + gitlab ci → kubernetes github + travis → kubernetes $ gem install dapp

Slide 50

Slide 50 text

dapp

Slide 51

Slide 51 text

dapp Конфигурация описывается в Dappfile

Slide 52

Slide 52 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile

Slide 53

Slide 53 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий

Slide 54

Slide 54 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект

Slide 55

Slide 55 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект → Один Dappfile

Slide 56

Slide 56 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект → Один Dappfile Принципы проектирования

Slide 57

Slide 57 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект → Один Dappfile portability Принципы проектирования

Slide 58

Slide 58 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект → Один Dappfile portability — НЕТ! Принципы проектирования

Slide 59

Slide 59 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект → Один Dappfile portability Принципы проектирования

Slide 60

Slide 60 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект → Один Dappfile portability security Принципы проектирования

Slide 61

Slide 61 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект → Один Dappfile portability security — НЕ ОЧЕНЬ! Принципы проектирования

Slide 62

Slide 62 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект → Один Dappfile portability security Принципы проектирования

Slide 63

Slide 63 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект → Один Dappfile portability security простота использования Принципы проектирования

Slide 64

Slide 64 text

Ruby DSL (наверное перейдем на Yaml) dapp Конфигурация описывается в Dappfile Один репозиторий → Один проект → Один Dappfile portability security простота использования быстро и эффективно Принципы проектирования

Slide 65

Slide 65 text

Пример #1: TCP echo-сервер

Slide 66

Slide 66 text

docker { }

Slide 67

Slide 67 text

docker { from "ubuntu:16.04" }

Slide 68

Slide 68 text

docker { from "ubuntu:16.04" } shell { }

Slide 69

Slide 69 text

docker { from "ubuntu:16.04" } shell { install { } }

Slide 70

Slide 70 text

docker { from "ubuntu:16.04" } shell { install { run "apt-get update" } }

Slide 71

Slide 71 text

docker { from "ubuntu:16.04" } shell { install { run "apt-get update" run "apt-get install -y netcat" } }

Slide 72

Slide 72 text

docker { from "ubuntu:16.04" cmd "ncat -l 2000 -k -c 'xargs -n1 echo'" } shell { install { run "apt-get update" run "apt-get install -y netcat" } }

Slide 73

Slide 73 text

docker { from "ubuntu:16.04" cmd "ncat -l 2000 -k -c 'xargs -n1 echo'" } shell { install { run "apt-get update" run "apt-get install -y netcat" } }

Slide 74

Slide 74 text

docker { from "ubuntu:16.04" cmd "ncat -l 2000 -k -c 'xargs -n1 echo'" } shell { install { run "apt-get update" run "apt-get install -y netcat" } } FROM ubuntu:16.04

Slide 75

Slide 75 text

docker { from "ubuntu:16.04" cmd "ncat -l 2000 -k -c 'xargs -n1 echo'" } shell { install { run "apt-get update" run "apt-get install -y netcat" } } FROM ubuntu:16.04 CMD ncat -l 2000 -k -c 'xargs -n1 echo'

Slide 76

Slide 76 text

docker { from "ubuntu:16.04" cmd "ncat -l 2000 -k -c 'xargs -n1 echo'" } shell { install { run "apt-get update" run "apt-get install -y netcat" } } FROM ubuntu:16.04 CMD ncat -l 2000 -k -c 'xargs -n1 echo' RUN apt-get update RUN apt-get install -y netcat

Slide 77

Slide 77 text

docker { from "ubuntu:16.04" cmd "ncat -l 2000 -k -c 'xargs -n1 echo'" } shell { install { run "apt-get update" run "apt-get install -y netcat" } } FROM ubuntu:16.04 CMD ncat -l 2000 -k -c 'xargs -n1 echo' RUN apt-get update RUN apt-get install -y netcat Зачем?

Slide 78

Slide 78 text

#1 Стадии и кэш dapp

Slide 79

Slide 79 text

ubuntu:16.04 127 МB FROM ubuntu:16.04

Slide 80

Slide 80 text

df19de45d436 1 МB ubuntu:16.04 127 МB RUN foo FROM ubuntu:16.04

Slide 81

Slide 81 text

df19de45d436 1 МB 3f416119a68b 500 KB ubuntu:16.04 127 МB RUN bar RUN foo FROM ubuntu:16.04

Slide 82

Slide 82 text

df19de45d436 1 МB 3f416119a68b 500 KB ubuntu:16.04 127 МB 67d10abe01cd 750 KB RUN baz RUN bar RUN foo FROM ubuntu:16.04

Slide 83

Slide 83 text

df19de45d436 1 МB 3f416119a68b 500 KB ubuntu:16.04 127 МB 67d10abe01cd 750 KB RUN baz RUN bar RUN foo FROM ubuntu:16.04 af01be524a25 290 KB RUN qux

Slide 84

Slide 84 text

df19de45d436 1 МB 3f416119a68b 500 KB ubuntu:16.04 127 МB 67d10abe01cd 750 KB RUN baz RUN bar bar RUN foo FROM ubuntu:16.04 af01be524a25 290 KB RUN qux

Slide 85

Slide 85 text

df19de45d436 1 МB d6d296481de2 978 KB ubuntu:16.04 127 МB 67d10abe01cd 750 KB RUN baz RUN bar bar RUN foo FROM ubuntu:16.04 af01be524a25 290 KB RUN qux

Slide 86

Slide 86 text

df19de45d436 1 МB d6d296481de2 978 KB ubuntu:16.04 127 МB 67d10abe01cd 750 KB RUN baz RUN bar bar RUN foo FROM ubuntu:16.04 af01be524a25 290 KB RUN qux

Slide 87

Slide 87 text

А что вообще обычно нужно делать при сборке?

Slide 88

Slide 88 text

Добавить код

Slide 89

Slide 89 text

Добавить код Установить системное ПО

Slide 90

Slide 90 text

Добавить код Установить системное ПО Установить системные зависимости

Slide 91

Slide 91 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости

Slide 92

Slide 92 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО

Slide 93

Slide 93 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 94

Slide 94 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 95

Slide 95 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 96

Slide 96 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 97

Slide 97 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 98

Slide 98 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 99

Slide 99 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 100

Slide 100 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 101

Slide 101 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 102

Slide 102 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 103

Slide 103 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 104

Slide 104 text

Добавить код Установить системное ПО Установить системные зависимости Установить прикладные зависимости Настроить системное ПО Настроить наше ПО

Slide 105

Slide 105 text

В какой последовательности собирать?

Slide 106

Slide 106 text

В какой последовательности собирать? 1. Чтобы собиралось быстро

Slide 107

Slide 107 text

2. Чтобы пересборка не занимала лишнего места В какой последовательности собирать? 1. Чтобы собиралось быстро

Slide 108

Slide 108 text

2. Чтобы пересборка не занимала лишнего места В какой последовательности собирать? 1. Чтобы собиралось быстро 3. Чтобы конечный образ был минимального размера?

Slide 109

Slide 109 text

2. Чтобы пересборка не занимала лишнего места В какой последовательности собирать? 1. Чтобы собиралось быстро 3. Чтобы конечный образ был минимального размера? паттерн!

Slide 110

Slide 110 text

install setup #1 Стадии и кэш dapp

Slide 111

Slide 111 text

before_install install before_setup setup #2 Стадии и кэш dapp

Slide 112

Slide 112 text

before_install install before_setup setup #2 Стадии и кэш dapp Тяжелое и редко изменяющееся <1% комитов

Slide 113

Slide 113 text

before_install install before_setup setup #2 Стадии и кэш dapp “Прикладные зависимости” ~5% комитов Тяжелое и редко изменяющееся <1% комитов

Slide 114

Slide 114 text

before_install install before_setup setup #2 Стадии и кэш dapp “Конфиги” ~2% комитов “Прикладные зависимости” ~5% комитов Тяжелое и редко изменяющееся <1% комитов

Slide 115

Slide 115 text

before_install install before_setup setup #2 Стадии и кэш dapp “Конфиги” ~2% комитов “Прикладные зависимости” ~5% комитов Тяжелое и редко изменяющееся <1% комитов

Slide 116

Slide 116 text

docker { from "ubuntu:16.04" cmd "ncat -l 2000 -k -c 'xargs -n1 echo'" } shell { install { run "apt-get update" run "apt-get install -y netcat" } }

Slide 117

Slide 117 text

docker { from "ubuntu:16.04" cmd "ncat -l 2000 -k -c 'xargs -n1 echo'" } shell { install { run "apt-get update" run "apt-get install -y netcat" } }

Slide 118

Slide 118 text

shell { install { run "apt-get update" run "apt-get install -y netcat" } }

Slide 119

Slide 119 text

shell { install { run "apt-get update" run "apt-get install -y netcat" } }

Slide 120

Slide 120 text

shell { before_install { } install { run "apt-get update" run "apt-get install -y netcat" } }

Slide 121

Slide 121 text

shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat" } }

Slide 122

Slide 122 text

shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat" } }

Slide 123

Slide 123 text

shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" } }

Slide 124

Slide 124 text

shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" } }

Slide 125

Slide 125 text

shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } }

Slide 126

Slide 126 text

shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } но...

Slide 127

Slide 127 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } ubuntu:16.04 127 МB

Slide 128

Slide 128 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } e4a86ad4bb95 40 МB ubuntu:16.04 127 МB

Slide 129

Slide 129 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } e4a86ad4bb95 40 МB ubuntu:16.04 127 МB dac2ab8ac393 700 KB

Slide 130

Slide 130 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } e4a86ad4bb95 40 МB ubuntu:16.04 127 МB dac2ab8ac393 700 KB А как в Dockerfile?

Slide 131

Slide 131 text

FROM ubuntu:16.04 CMD ncat -l 2000 -k \ -c 'xargs -n1 echo' RUN apt-get update RUN apt-get install \ -y netcat

Slide 132

Slide 132 text

FROM ubuntu:16.04 CMD ncat -l 2000 -k \ -c 'xargs -n1 echo' RUN apt-get update RUN apt-get install \ -y netcat ubuntu:16.04 127 МB

Slide 133

Slide 133 text

FROM ubuntu:16.04 CMD ncat -l 2000 -k \ -c 'xargs -n1 echo' RUN apt-get update RUN apt-get install \ -y netcat 2641b49c5f76 1 KB ubuntu:16.04 127 МB

Slide 134

Slide 134 text

FROM ubuntu:16.04 CMD ncat -l 2000 -k \ -c 'xargs -n1 echo' RUN apt-get update RUN apt-get install \ -y netcat 2641b49c5f76 1 KB ab01fb5697de 40 МB ubuntu:16.04 127 МB

Slide 135

Slide 135 text

FROM ubuntu:16.04 CMD ncat -l 2000 -k \ -c 'xargs -n1 echo' RUN apt-get update RUN apt-get install \ -y netcat 2641b49c5f76 1 KB ab01fb5697de 40 МB 44fceb7383a8 200 KB ubuntu:16.04 127 МB

Slide 136

Slide 136 text

FROM ubuntu:16.04 CMD ncat -l 2000 -k \ -c 'xargs -n1 echo' RUN apt-get update 2641b49c5f76 1 KB ubuntu:16.04 127 МB

Slide 137

Slide 137 text

FROM ubuntu:16.04 CMD ncat -l 2000 -k \ -c 'xargs -n1 echo' RUN apt-get update && \ apt-get install \ -y netcat 2641b49c5f76 1 KB ubuntu:16.04 127 МB

Slide 138

Slide 138 text

FROM ubuntu:16.04 CMD ncat -l 2000 -k \ -c 'xargs -n1 echo' RUN apt-get update && \ apt-get install \ -y netcat && \ rm -rf /var/lib/apt 2641b49c5f76 1 KB ubuntu:16.04 127 МB

Slide 139

Slide 139 text

FROM ubuntu:16.04 CMD ncat -l 2000 -k \ -c 'xargs -n1 echo' RUN apt-get update && \ apt-get install \ -y netcat && \ rm -rf /var/lib/apt 21111bef7939 200 KB 2641b49c5f76 1 KB ubuntu:16.04 127 МB

Slide 140

Slide 140 text

Конфликт

Slide 141

Slide 141 text

Конфликт Мы хотим иметь информацию (для следующих шагов или для следующих сборок)

Slide 142

Slide 142 text

Конфликт Мы хотим иметь информацию (для следующих шагов или для следующих сборок) Мы НЕ хотим иметь её в конечном образе и НЕ хотим вручную очищать и думать об этом

Slide 143

Slide 143 text

dapp #2 Внешний контекст

Slide 144

Slide 144 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } }

Slide 145

Slide 145 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } mount "/var/lib/apt" { }

Slide 146

Slide 146 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } mount "/var/lib/apt" { from :build_dir }

Slide 147

Slide 147 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } mount "/var/lib/apt" { from :build_dir } ubuntu:16.04 127 МB

Slide 148

Slide 148 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } mount "/var/lib/apt" { from :build_dir } ubuntu:16.04 127 МB eee17ba66912 1 KB

Slide 149

Slide 149 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } mount "/var/lib/apt" { from :build_dir } ubuntu:16.04 127 МB eee17ba66912 1 KB

Slide 150

Slide 150 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } mount "/var/lib/apt" { from :build_dir } ubuntu:16.04 127 МB eee17ba66912 1 KB

Slide 151

Slide 151 text

docker.from "ubuntu:16:04" shell { before_install { run "apt-get update" } install { run "apt-get install -y netcat=1.10*" run "apt-get install -y tree" } } mount "/var/lib/apt" { from :build_dir } ubuntu:16.04 127 МB eee17ba66912 1 KB eee17ba66912 200 KB

Slide 152

Slide 152 text

git dapp #2 Внешний контекст

Slide 153

Slide 153 text

git dapp #2 Внешний контекст Dappfile

Slide 154

Slide 154 text

git dapp # dapp build #2 Внешний контекст Dappfile

Slide 155

Slide 155 text

git dapp # dapp build #2 Внешний контекст Dappfile контейнер

Slide 156

Slide 156 text

git dapp # dapp build #2 Внешний контекст Dappfile :build_dir контейнер

Slide 157

Slide 157 text

git docker образ dapp # dapp build #2 Внешний контекст Dappfile :build_dir контейнер

Slide 158

Slide 158 text

git docker образ dapp # dapp build #2 Внешний контекст Dappfile :build_dir :tmp_dir контейнер

Slide 159

Slide 159 text

git docker образ dapp # dapp build #2 Внешний контекст Dappfile :build_dir :tmp_dir контейнер

Slide 160

Slide 160 text

git docker образ dapp # dapp build #2 Внешний контекст Dappfile :build_dir :tmp_dir контейнер * Требуются для сборки

Slide 161

Slide 161 text

dapp #2 Внешний контекст

Slide 162

Slide 162 text

dapp #2 Внешний контекст apt, yum

Slide 163

Slide 163 text

dapp #2 Внешний контекст bundler, pip, composer, npm, bower apt, yum

Slide 164

Slide 164 text

dapp #2 Внешний контекст bundler, pip, composer, npm, bower apt, yum ccache, кэш “сборщика ассетов”

Slide 165

Slide 165 text

круто?

Slide 166

Slide 166 text

before_install install before_setup setup dapp #1 Стадии и кэш dapp <1% ~5% ~2%

Slide 167

Slide 167 text

before_install install before_setup setup dapp >90% комитов?

Slide 168

Slide 168 text

Добавление “исходников” в образ — это то, что делается в каждом проекте и это должно быть удобно... ...очень удобно! И очень эффективно!

Slide 169

Slide 169 text

#3 git dapp

Slide 170

Slide 170 text

#3 git dapp 1. Добавлять все исходники каждый раз целиком?

Slide 171

Slide 171 text

#3 git dapp 2. При изменении каких файлов какие стадии пересобирать? 1. Добавлять все исходники каждый раз целиком?

Slide 172

Slide 172 text

#3 git dapp 2. При изменении каких файлов какие стадии пересобирать? 1. Добавлять все исходники каждый раз целиком? 3. Как проставлять owner’а и права?

Slide 173

Slide 173 text

#3 git dapp 2. При изменении каких файлов какие стадии пересобирать? 1. Добавлять все исходники каждый раз целиком? 3. Как проставлять owner’а и права? 4. Как “вырезать” кусочки из git’а?

Slide 174

Slide 174 text

before_install before_setup setup #3 git dapp install

Slide 175

Slide 175 text

before_install before_setup setup #3 git dapp install

Slide 176

Slide 176 text

before_install before_setup setup #3 git dapp git archive install

Slide 177

Slide 177 text

before_install before_setup setup #3 git dapp git archive install

Slide 178

Slide 178 text

before_install before_setup setup #3 git dapp git archive install git

Slide 179

Slide 179 text

before_install before_setup setup #3 git dapp git archive install git git patch apply

Slide 180

Slide 180 text

before_install before_setup setup #3 git dapp git archive install git git patch apply apt-get update php-fpm php-mysql composer

Slide 181

Slide 181 text

before_install before_setup setup #3 git dapp install git apt-get update php-fpm php-mysql composer composer install git archive git patch apply

Slide 182

Slide 182 text

before_install before_setup setup #3 git dapp install git apt-get update php-fpm php-mysql composer composer install git archive git patch apply

Slide 183

Slide 183 text

before_install install before_setup setup #3 git dapp apt-get update php-fpm php-mysql composer composer install composer.lock git git archive git patch apply

Slide 184

Slide 184 text

before_install install before_setup setup #3 git dapp apt-get update php-fpm php-mysql composer composer install composer.lock git git archive git patch apply

Slide 185

Slide 185 text

before_install before_setup setup apt-get update php-fpm php-mysql composer git patch apply #3 git dapp git composer.lock install composer install git archive git patch apply

Slide 186

Slide 186 text

before_install before_setup setup apt-get update php-fpm php-mysql composer git patch apply #3 git dapp git composer.lock install composer install git archive git patch apply

Slide 187

Slide 187 text

before_install before_setup setup apt-get update php-fpm php-mysql composer git patch apply #3 git dapp git composer.lock install composer install git archive git patch apply

Slide 188

Slide 188 text

Пример #2: PHP-приложение

Slide 189

Slide 189 text

git { }

Slide 190

Slide 190 text

git { add { } }

Slide 191

Slide 191 text

git { add "/php_configs" { } }

Slide 192

Slide 192 text

git { add "/php_configs" { to "/etc/php" } }

Slide 193

Slide 193 text

git { add "/php_configs" { to "/etc/php" } add "/" { } }

Slide 194

Slide 194 text

git { add "/php_configs" { to "/etc/php" } add "/" { to "/app" } }

Slide 195

Slide 195 text

git { add "/php_configs" { to "/etc/php" } add "/" { exclude "php_configs" to "/app" } }

Slide 196

Slide 196 text

git { add "/php_configs" { to "/etc/php" } add "/" { owner "apache" exclude "php_configs" to "/app" } }

Slide 197

Slide 197 text

git { add "/php_configs" { to "/etc/php" } add "/" { owner "apache" group "apache" exclude "php_configs" to "/app" } }

Slide 198

Slide 198 text

git { add "/php_configs" { to "/etc/php" } add "/" { owner "apache" group "apache" exclude "php_configs" to "/app" } } install_depends_on "composer.lock"

Slide 199

Slide 199 text

теперь круто?

Slide 200

Slide 200 text

FROM ubuntu:16.04

Slide 201

Slide 201 text

FROM ubuntu:16.04 ADD . /src

Slide 202

Slide 202 text

FROM ubuntu:16.04 ADD . /src RUN apt-get build-essentials libmysql-dev

Slide 203

Slide 203 text

FROM ubuntu:16.04 ADD . /src RUN apt-get build-essentials libmysql-dev RUN make -C src

Slide 204

Slide 204 text

FROM ubuntu:16.04 ADD . /src RUN apt-get build-essentials libmysql-dev RUN make -C src RUN cp /src/build/myapp /usr/bin/myapp

Slide 205

Slide 205 text

FROM ubuntu:16.04 ADD . /src RUN apt-get build-essentials libmysql-dev RUN make -C src RUN cp /src/build/myapp /usr/bin/myapp RUN apt-get purge build-essentials libmysql-dev

Slide 206

Slide 206 text

FROM ubuntu:16.04 ADD . /src RUN apt-get build-essentials libmysql-dev RUN make -C src RUN cp /src/build/myapp /usr/bin/myapp RUN apt-get purge build-essentials libmysql-dev RUN apt-get install libmysql

Slide 207

Slide 207 text

#4 Артефакты dapp

Slide 208

Slide 208 text

#4 Артефакты dapp При сборке проекта вам нужны какие-то инструменты, но они не нужны вам для работы

Slide 209

Slide 209 text

#4 Артефакты dapp Вес инструментов может быть большим (гигабайты!!!) При сборке проекта вам нужны какие-то инструменты, но они не нужны вам для работы

Slide 210

Slide 210 text

#4 Артефакты dapp Вес инструментов может быть большим (гигабайты!!!) Меняются инструменты редко, ставятся долго, переустанавливать неудобно При сборке проекта вам нужны какие-то инструменты, но они не нужны вам для работы

Slide 211

Slide 211 text

#4 Артефакты dapp Вес инструментов может быть большим (гигабайты!!!) Меняются инструменты редко, ставятся долго, переустанавливать неудобно При сборке проекта вам нужны какие-то инструменты, но они не нужны вам для работы *касается всего, что “компилируется”

Slide 212

Slide 212 text

#4 Артефакты dapp git Dappfile

Slide 213

Slide 213 text

#4 Артефакты dapp git # dapp build Dappfile

Slide 214

Slide 214 text

docker образ артефакта #4 Артефакты dapp git # dapp build Dappfile

Slide 215

Slide 215 text

конечный docker образ docker образ артефакта #4 Артефакты dapp git # dapp build Dappfile

Slide 216

Slide 216 text

конечный docker образ docker образ артефакта #4 Артефакты dapp git # dapp build Dappfile Артефакт

Slide 217

Slide 217 text

конечный docker образ docker образ артефакта #4 Артефакты dapp git # dapp build Dappfile Артефакт <200 МБ >1 ГБ

Slide 218

Slide 218 text

#4 Артефакты dapp before_install artifact_build git archive git patch apply

Slide 219

Slide 219 text

#4 Артефакты dapp before_install artifact_build git archive git patch apply apt-get install build-essentials libmysql-dev

Slide 220

Slide 220 text

#4 Артефакты dapp before_install artifact_build git archive git patch apply apt-get install build-essentials libmysql-dev git

Slide 221

Slide 221 text

#4 Артефакты dapp before_install artifact_build git archive git patch apply apt-get install build-essentials libmysql-dev git

Slide 222

Slide 222 text

#4 Артефакты dapp before_install artifact_build git archive git patch apply apt-get install build-essentials libmysql-dev git make -C /src

Slide 223

Slide 223 text

#4 Артефакты dapp before_install artifact_build git archive git patch apply apt-get install build-essentials libmysql-dev git make -C /src install artifact

Slide 224

Slide 224 text

#4 Артефакты dapp before_install artifact_build git archive git patch apply apt-get install build-essentials libmysql-dev git make -C /src install artifact apt-get install libmysql

Slide 225

Slide 225 text

git #4 Артефакты dapp before_install artifact_build git archive git patch apply make -C /src apt-get install build-essentials libmysql-dev install artifact apt-get install libmysql

Slide 226

Slide 226 text

git #4 Артефакты dapp before_install artifact_build git archive git patch apply make -C /src apt-get install build-essentials libmysql-dev install artifact конечный docker образ apt-get install libmysql

Slide 227

Slide 227 text

git #4 Артефакты dapp before_install artifact_build git archive git patch apply make -C /src apt-get install build-essentials libmysql-dev install artifact конечный docker образ apt-get install libmysql

Slide 228

Slide 228 text

git #4 Артефакты dapp before_install artifact_build git archive git patch apply make -C /src apt-get install build-essentials libmysql-dev install artifact конечный docker образ apt-get install libmysql

Slide 229

Slide 229 text

git #4 Артефакты dapp before_install artifact_build git archive git patch apply make -C /src apt-get install build-essentials libmysql-dev install artifact конечный docker образ apt-get install libmysql

Slide 230

Slide 230 text

git #4 Артефакты dapp before_install artifact_build git archive git patch apply make -C /src apt-get install build-essentials libmysql-dev install artifact конечный docker образ apt-get install libmysql

Slide 231

Slide 231 text

git #4 Артефакты dapp before_install artifact_build git archive git patch apply apt-get install build-essentials libmysql-dev install artifact конечный docker образ apt-get install libmysql make -C /src

Slide 232

Slide 232 text

git #4 Артефакты dapp before_install artifact_build git archive git patch apply make -C /src apt-get install build-essentials libmysql-dev install artifact конечный docker образ apt-get install libmysql

Slide 233

Slide 233 text

git #4 Артефакты dapp before_install artifact_build git archive git patch apply make -C /src install artifact конечный docker образ apt-get install libmysql apt-get install build-essentials libmysql-dev

Slide 234

Slide 234 text

git #4 Артефакты dapp before_install artifact_build git archive git patch apply make -C /src apt-get install build-essentials libmysql-dev install artifact конечный docker образ apt-get install libmysql

Slide 235

Slide 235 text

Пример #3: Приложение на Си

Slide 236

Slide 236 text

docker.from "ubuntu:14.04"

Slide 237

Slide 237 text

docker.from "ubuntu:14.04" artifact { }

Slide 238

Slide 238 text

docker.from "ubuntu:14.04" artifact { git { } }

Slide 239

Slide 239 text

docker.from "ubuntu:14.04" artifact { git { add "/" { } } }

Slide 240

Slide 240 text

docker.from "ubuntu:14.04" artifact { git { add "/" { to "/src" } } }

Slide 241

Slide 241 text

docker.from "ubuntu:14.04" artifact { git.add "/" { to "/src" } }

Slide 242

Slide 242 text

docker.from "ubuntu:14.04" artifact { git.add "/" { to "/src" } shell { } }

Slide 243

Slide 243 text

docker.from "ubuntu:14.04" artifact { git.add "/" { to "/src" } shell { before_install.run "apt-get install build-essentials libmysql-dev" } }

Slide 244

Slide 244 text

docker.from "ubuntu:14.04" artifact { git.add "/" { to "/src" } shell { before_install.run "apt-get install build-essentials libmysql-dev" artifact_build.run "make -C /src" } }

Slide 245

Slide 245 text

docker.from "ubuntu:14.04" artifact { git.add "/" { to "/src" } shell { before_install.run "apt-get install build-essentials libmysql-dev" artifact_build.run "make -C /src" } artifact_depends_on "/" }

Slide 246

Slide 246 text

docker.from "ubuntu:14.04" artifact { git.add "/" { to "/src" } shell { before_install.run "apt-get install build-essentials libmysql-dev" artifact_build.run "make -C /src" } artifact_depends_on "/" export "/src/build/myapp" { } }

Slide 247

Slide 247 text

docker.from "ubuntu:14.04" artifact { git.add "/" { to "/src" } shell { before_install.run "apt-get install build-essentials libmysql-dev" artifact_build.run "make -C /src" } artifact_depends_on "/" export "/src/build/myapp" { to "/usr/bin/myapp" } }

Slide 248

Slide 248 text

docker.from "ubuntu:14.04" artifact { git.add "/" { to "/src" } shell { before_install.run "apt-get install build-essentials libmysql-dev" artifact_build.run "make -C /src" } artifact_depends_on "/" export "/src/build/myapp" { to "/usr/bin/myapp" after :install } }

Slide 249

Slide 249 text

docker.from "ubuntu:14.04" artifact { git.add "/" { to "/src" } shell { before_install.run "apt-get install build-essentials libmysql-dev" artifact_build.run "make -C /src" } artifact_depends_on "/" export "/src/build/myapp" { to "/usr/bin/myapp" after :install } } shell.install.run "apt-get install libmysql"

Slide 250

Slide 250 text

docker.from "ubuntu:14.04" artifact { git.add "/" { to "/src" } shell { before_install.run "apt-get install build-essentials libmysql-dev" artifact_build.run "make -C /src" } artifact_depends_on "/" export "/src/build/myapp" { to "/usr/bin/myapp" after :install } } shell.install.run "apt-get install libmysql" docker.cmd "/usr/bin/myapp"

Slide 251

Slide 251 text

можно брать?

Slide 252

Slide 252 text

#5 dapp

Slide 253

Slide 253 text

#5 dapp Модульность на shell?

Slide 254

Slide 254 text

#5 dapp Командная работа на shell? Модульность на shell?

Slide 255

Slide 255 text

#5 dapp Командная работа на shell? Модульность на shell? :(((((

Slide 256

Slide 256 text

DRY don't repeat yourself

Slide 257

Slide 257 text

Модульность git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2

Slide 258

Slide 258 text

Модульность git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management

Slide 259

Slide 259 text

bundler, composer, pip, npm, ... Модульность git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management

Slide 260

Slide 260 text

bundler, composer, pip, npm, ... Модульность git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management

Slide 261

Slide 261 text

Shell Модульность git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ...

Slide 262

Slide 262 text

Shell + git submodules Модульность git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ...

Slide 263

Slide 263 text

Shell + git submodules Модульность git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef

Slide 264

Slide 264 text

Shell + git submodules Модульность Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2

Slide 265

Slide 265 text

Shell + git submodules Модульность Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf Puppet git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2

Slide 266

Slide 266 text

Shell + git submodules Модульность git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf Puppet + Librarian

Slide 267

Slide 267 text

Shell + git submodules Модульность git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf Puppet + Librarian

Slide 268

Slide 268 text

#5 Chef dapp git Dappfile

Slide 269

Slide 269 text

#5 Chef dapp git # dapp build Dappfile

Slide 270

Slide 270 text

#5 Chef dapp git # dapp build Dappfile

Slide 271

Slide 271 text

#5 Chef dapp git # dapp build Dappfile .dapp_chef

Slide 272

Slide 272 text

#5 Chef dapp git # dapp build Dappfile .dapp_chef :build_dir

Slide 273

Slide 273 text

#5 Chef dapp git # dapp build Dappfile /.dapp/chef/build/cookbooks .dapp_chef :build_dir

Slide 274

Slide 274 text

#5 Chef dapp git # dapp build Dappfile /.dapp/chef/build/cookbooks .dapp_chef :build_dir /.dapp/deps/chefdk dappdeps/chefdk:0.17.3

Slide 275

Slide 275 text

#5 Chef dapp git # dapp build Dappfile .dapp_chef /.dapp/deps/chefdk dappdeps/chefdk:0.17.3 /.dapp/deps/chefdk/bin/chef-solo /.dapp/chef/build/cookbooks :build_dir

Slide 276

Slide 276 text

#5 Chef dapp git # dapp build Dappfile .dapp_chef /.dapp/deps/chefdk dappdeps/chefdk:0.17.3 /.dapp/deps/chefdk/bin/chef-solo /.dapp/chef/build/cookbooks :build_dir

Slide 277

Slide 277 text

#5 Chef dapp git # dapp build Dappfile .dapp_chef /.dapp/deps/chefdk dappdeps/chefdk:0.17.3 /.dapp/deps/chefdk/bin/chef-solo /.dapp/chef/build/cookbooks конечный docker образ :build_dir

Slide 278

Slide 278 text

git #5 Chef dapp .dapp_chef/

Slide 279

Slide 279 text

git #5 Chef dapp .dapp_chef/ recipes/ templates/ files/

Slide 280

Slide 280 text

git #5 Chef dapp .dapp_chef/ recipes/ before_install/ install/ before_setup/ setup/ templates/ files/

Slide 281

Slide 281 text

.dapp_chef/ recipes/ before_install/ install/ ... templates/ before_install/ install/ ... files/ before_install/ install/ ... git #5 Chef dapp

Slide 282

Slide 282 text

before_install install before_setup setup .dapp_chef/ recipes/ before_install/ install/ ... templates/ before_install/ install/ ... files/ before_install/ install/ ... git #5 Chef dapp

Slide 283

Slide 283 text

before_install install before_setup setup .dapp_chef/ recipes/ before_install/ install/ ... templates/ before_install/ install/ ... files/ before_install/ install/ ... /.dapp/chef/... recipes/ templates/ default/ files/ default/ git #5 Chef dapp

Slide 284

Slide 284 text

before_install install before_setup setup .dapp_chef/ recipes/ before_install/ install/ ... templates/ before_install/ install/ ... files/ before_install/ install/ ... /.dapp/chef/... recipes/ templates/ default/ files/ default/ git #5 Chef dapp

Slide 285

Slide 285 text

before_install install before_setup setup .dapp_chef/ recipes/ before_install/ install/ ... templates/ before_install/ install/ ... files/ before_install/ install/ ... /.dapp/chef/... recipes/ templates/ default/ files/ default/ git #5 Chef dapp

Slide 286

Slide 286 text

before_install install before_setup setup .dapp_chef/ recipes/ before_install/ install/ ... templates/ before_install/ install/ ... files/ before_install/ install/ ... /.dapp/chef/... recipes/ templates/ default/ files/ default/ git #5 Chef dapp

Slide 287

Slide 287 text

before_install install before_setup setup .dapp_chef/ recipes/ before_install/ install/ ... templates/ before_install/ install/ ... files/ before_install/ install/ ... /.dapp/chef/... recipes/ templates/ default/ files/ default/ git #5 Chef dapp /.dapp/chef/... recipes/ templates/ default/ files/ default/

Slide 288

Slide 288 text

before_install install before_setup setup .dapp_chef/ recipes/ before_install/ install/ ... templates/ before_install/ install/ ... files/ before_install/ install/ ... /.dapp/chef/... recipes/ templates/ default/ files/ default/ git #5 Chef dapp /.dapp/chef/... recipes/ templates/ default/ files/ default/ /.dapp/chef/... recipes/ templates/ default/ files/ default/

Slide 289

Slide 289 text

before_install install before_setup setup .dapp_chef/ recipes/ before_install/ install/ ... templates/ before_install/ install/ ... files/ before_install/ install/ ... /.dapp/chef/... recipes/ templates/ default/ files/ default/ git #5 Chef dapp /.dapp/chef/... recipes/ templates/ default/ files/ default/ /.dapp/chef/... recipes/ templates/ default/ files/ default/ /.dapp/chef/... recipes/ templates/ default/ files/ default/

Slide 290

Slide 290 text

Пример #4: Rails-приложение

Slide 291

Slide 291 text

dimg_group { }

Slide 292

Slide 292 text

dimg_group { dimg "backend" { } }

Slide 293

Slide 293 text

dimg_group { dimg "backend" { } dimg "worker" { } }

Slide 294

Slide 294 text

dimg_group { dimg "backend" { } dimg "worker" { } } dimg "frontend" { }

Slide 295

Slide 295 text

dimg_group { git.add "/" { to "/app" } dimg "backend" { } dimg "worker" { } } dimg "frontend" { }

Slide 296

Slide 296 text

chef.recipe "common" dimg_group { git.add "/" { to "/app" } dimg "backend" { } dimg "worker" { } } dimg "frontend" { }

Slide 297

Slide 297 text

chef.recipe "common" dimg_group { git.add "/" { to "/app" } chef.module "rails", "~> 1.0" dimg "backend" { } dimg "worker" { } } dimg "frontend" { }

Slide 298

Slide 298 text

chef.recipe "common" dimg_group { git.add "/" { to "/app" } chef.module "rails", "~> 1.0" dimg "backend" { chef { module "rails_backend", "~> 1.0"; recipe "backend" } } dimg "worker" { } } dimg "frontend" { }

Slide 299

Slide 299 text

chef.recipe "common" dimg_group { git.add "/" { to "/app" } chef.module "rails", "~> 1.0" dimg "backend" { chef { module "rails_backend", "~> 1.0"; recipe "backend" } } dimg "worker" { chef { module "rails_sidekiq", "~> 1.0"; recipe "worker" } } } dimg "frontend" { }

Slide 300

Slide 300 text

chef.recipe "common" dimg_group { git.add "/" { to "/app" } chef.module "rails", "~> 1.0" dimg "backend" { chef { module "rails_backend", "~> 1.0"; recipe "backend" } } dimg "worker" { chef { module "rails_sidekiq", "~> 1.0"; recipe "worker" } } } dimg "frontend" { chef { module "nginx", "~> 1.0"; recipe "frontend" } }

Slide 301

Slide 301 text

chef.recipe "common" dimg_group { git.add "/" { to "/app" } chef.module "rails", "~> 1.0" dimg "backend" { artifact { } chef { module "rails_backend", "~> 1.0"; recipe "backend" } } dimg "worker" { chef { module "rails_sidekiq", "~> 1.0"; recipe "worker" } } } dimg "frontend" { chef { module "nginx", "~> 1.0"; recipe "frontend" } }

Slide 302

Slide 302 text

chef.recipe "common" dimg_group { git.add "/" { to "/app" } chef.module "rails", "~> 1.0" dimg "backend" { artifact { chef.module "rails_assets", "~> 1.0" } chef { module "rails_backend", "~> 1.0"; recipe "backend" } } dimg "worker" { chef { module "rails_sidekiq", "~> 1.0"; recipe "worker" } } } dimg "frontend" { chef { module "nginx", "~> 1.0"; recipe "frontend" } }

Slide 303

Slide 303 text

chef.recipe "common" dimg_group { git.add "/" { to "/app" } chef.module "rails", "~> 1.0" dimg "backend" { artifact { chef.module "rails_assets", "~> 1.0" export "/app/public/assets" { after :setup } } chef { module "rails_backend", "~> 1.0"; recipe "backend" } } dimg "worker" { chef { module "rails_sidekiq", "~> 1.0"; recipe "worker" } } } dimg "frontend" { chef { module "nginx", "~> 1.0"; recipe "frontend" } }

Slide 304

Slide 304 text

chef.recipe "common" dimg_group { git.add "/" { to "/app" } chef.module "rails", "~> 1.0" dimg "backend" { artifact { chef.module "rails_assets", "~> 1.0" artifact_depends_on "/app/assets", "Gemfile*" export "/app/public/assets" { after :setup } } chef { module "rails_backend", "~> 1.0"; recipe "backend" } } dimg "worker" { chef { module "rails_sidekiq", "~> 1.0"; recipe "worker" } } } dimg "frontend" { chef { module "nginx", "~> 1.0"; recipe "frontend" } }

Slide 305

Slide 305 text

docker.from "ubuntu:14.04" chef.recipe "common" dimg_group { git.add "/" { to "/app" } chef.module "rails", "~> 1.0" dimg "backend" { artifact { chef.module "rails_assets", "~> 1.0" artifact_depends_on "/app/assets", "Gemfile*" export "/app/public/assets" { after :setup } } chef { module "rails_backend", "~> 1.0"; recipe "backend" } } dimg "worker" { chef { module "rails_sidekiq", "~> 1.0"; recipe "worker" } } } dimg "frontend" { chef { module "nginx", "~> 1.0"; recipe "frontend" } }

Slide 306

Slide 306 text

#1 Стадии и кэш dapp

Slide 307

Slide 307 text

#1 Стадии и кэш #2 Внешний контекст dapp

Slide 308

Slide 308 text

#1 Стадии и кэш #2 Внешний контекст #3 git dapp

Slide 309

Slide 309 text

#1 Стадии и кэш #2 Внешний контекст #3 git #4 Артефакты dapp

Slide 310

Slide 310 text

#1 Стадии и кэш #2 Внешний контекст #3 git #4 Артефакты #5 Chef dapp

Slide 311

Slide 311 text

#1 Стадии и кэш #2 Внешний контекст #3 git #4 Артефакты #5 Chef #6 Несколько образов dapp

Slide 312

Slide 312 text

Мы хотим сделать dapp действительно крутым и полезным OpenSource решением Нам нужен ВАШ опыт использования Будем рады любой помощи Поставьте звёздочку ;) Обещаем очень быстро отвечать на все issue и очень быстро фиксить все баги. Для нас dapp это приоритетный проект. Если есть желание помочь с переводом документации на английский, или с её доработкой, да или вообще помочь — будем очень рады и ждем пулреквесты. Мы старались.

Slide 313

Slide 313 text

dapp 0.7

Slide 314

Slide 314 text

Наши docker-проекты github.com/flant/dapp github.com/flant/docker_penetration_experiment github.com/flant/pam_docker github.com/flant/php_fpm_docker github.com/flant/superhosting github.com/flant/buildizer Дмитрий Столяров [email protected] linkedin.com/in/distol github.com/distol Всем спасибо! Тимофей Кириллов github.com/distorhead Алексей Игрычев github.com/alexey-igrychev