さようなら Chef こんにちは Dockerfile / Web Tech Tokyo #1
by
Daisuke Fujita
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
͞Α͏ͳΒ$IFG ͜Μʹͪ%PDLFSpMF 2016-10-12 Web Tech Tokyo #1 Daisuke Fujita (@dtan4) https://flic.kr/p/rU5bCU
Slide 2
Slide 2 text
Daisuke Fujita / @dtan4 Engineer, Infrastructure Team @ Wantedly, Inc. AWS, Terraform / Terraforming, Developer Productivity
Slide 3
Slide 3 text
Infrastructure at Wantedly AWS + DNSimple શαʔϏε͕ Docker ίϯςφͰՔಇ EC2 Πϯελϯεͷ OS CoreOS Capistrano ΛͬͨಠࣗͷσϓϩΠγεςϜ + Heroku CLI ಉ༷ͷΠϯλʔϑΣΠεΛ࣋ͭ CLI https://speakerdeck.com/dtan4/number-abejameetup
Slide 4
Slide 4 text
Web (Rails) Docker image 2ஈߏ ࠩͷΈͷ fetch + bundle install Ͱ σϓϩΠΛߴԽ intermediate Chef + Packer ΠϝʔδαΠζ 3GB bundle install git clone wantedly/wantedly Ruby FROM Ubuntu 14.04 rake assets:precompile bundle install git checkout git fetch FROM intermediate web (Dockerfile) intermediate (Chef)
Slide 5
Slide 5 text
Web (Rails) Docker image 2ஈߏ ࠩͷΈͷ fetch + bundle install Ͱ σϓϩΠΛߴԽ intermediate Chef + Packer ΠϝʔδαΠζ 3GB bundle install git clone wantedly/wantedly Ruby FROM Ubuntu 14.04 rake assets:precompile bundle install git checkout git fetch FROM intermediate web (Dockerfile) intermediate (Chef)
Slide 6
Slide 6 text
Chef + Packer AWS Ҡߦॳ͔Β2Ҏ্Ҿ͖ܧ͕Ε͖ͯͨൿͷ Chef Ϩγϐ Packer Ͱ ubuntu:14.04 Πϝʔδ্ʹϓϩϏδϣχϯά => Private Registry ʹ push
Slide 7
Slide 7 text
Chef + Packer ??? ઐ༻ͷ EC2 Πϯελϯε1ͷΈͰՔಇ͍ͯͨ͠ ਓؒͷ Macbook ͰϓϩϏδϣχϯάͰ͖ͳ͘ͳ͍ͬͯͨ 1Πϝʔδ࡞Δͷʹ1࣌ؒҎ্ Ͱ͖͕͋ͬͨΠϝʔδ 3GB Ruby ͷόʔδϣϯΞοϓ apt ύοέʔδՃ͕໘ σϓϩΠ࣌ͷ docker build ֤Πϯελϯεͷ͕͍
Slide 8
Slide 8 text
Chef + Packer => ??? ΠϝʔδαΠζΛͬͱখ͍ͨ͘͞͠… ଞͷϝϯόʔ৮Γ͍͢ߏʹ͍ͨ͠… σϓϩΠ͍ͨ͘͠… Dockerfile Ͱॻ͖͍ͨ…ʂ
Slide 9
Slide 9 text
2016/10/11
Slide 10
Slide 10 text
2016/10/11 Wantedly, Inc. ͔Β Chef ΛҰ
Slide 11
Slide 11 text
2016/10/11 Chef + Packer -> Dockerfile + Docker Compose Ubuntu 14.04 -> Alpine Linux 3.4 Private Docker Registry -> Amazon ECR Wantedly, Inc. ͔Β Chef ΛҰ
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
Dockerfile αʔϏε͝ͱʹ1ຕͷ Dockerfile build args Ͱ - Ruby ͷόʔδϣϯ - RAILS_ENV FROM alpine:3.4 Dockerfile ϕετϓϥΫςΟε Λ࣮ફͯ͠μΠΤοτ
Slide 14
Slide 14 text
Dockerfile Ruby, Node.js ͷΠϯετʔϧ ಉ͡ Dockerfile ʹॻ͘ ެࣜͷ -alpine Dockerfile ͔Βഈआ Alpine ͷόʔδϣϯ ࣗͨͪͰ੍ޚ αʔϏεʹ߹Θͤͨݴޠόʔδϣϯ
Slide 15
Slide 15 text
Dockerfile λΠϜελϯϓΛૠೖͯ͠ ҎԼຖճڧ੍తʹϏϧυ ιʔείʔυΛ git clone Access Token Λͬͨೝূ bundle install assets:precompile ARG BUILD_DATE --build-args BUILD_DATE=$(date +%Y%m%d%H%M%S)
Slide 16
Slide 16 text
Docker Compose શΠϝʔδ Docker Compose ܦ༝Ͱ build & push build args ΛҰׅཧ Ruby ͷόʔδϣϯΞοϓ ͔͜͜Β awesome: extends: base build: context: awesome args: - RUBY_MAJOR=2.3 - RUBY_VERSION=2.3.0 - RUBYGEMS_VERSION=2.6.6 - BUNDLER_VERSION=1.13.1 - NODE_VERSION=5.11.1 - NPM_VERSION=3.3.12 awesome-production: extends: awesome build: args: - RAILS_ENV=production image: ${AWS_ECR_DOMAIN}/awesome:intermediate
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
intermediate-build-server intermediate image Λఆظతʹ build ͢Δαʔό CoreOS on EC2 + IAM Role ຖਂʹશ intermediate image Λ build -> push
Slide 19
Slide 19 text
intermediate-build-server #!/bin/bash set -eu metadata=$(curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/intermediate-build-server/) export AWS_ACCESS_KEY_ID=$(echo $metadata | jq -r .AccessKeyId) export AWS_SECRET_ACCESS_KEY=$(echo $metadata | jq -r .SecretAccessKey) export AWS_SECURITY_TOKEN=$(echo $metadata | jq -r .Token) document=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document) account_id=$(echo $document | jq -r .accountId) region=$(echo $document | jq -r .region) export AWS_ECR_DOMAIN=$account_id.dkr.ecr.$region.amazonaws.com export BUILD_DATE=$(date +%Y%m%d%H%M%S) cd intermediate-dockerfiles if [[ $# -eq 1 ]]; then /opt/bin/docker-compose build $1 else for app in $(cat docker-compose.yml | grep -E '^ [a-z-]+:' | grep -E -- '-(production|qa)' | sed -E 's/^ ([a-z-]*):/\1/'); do echo "[`date`] Building $app..." /opt/bin/docker-compose build $app done fi
Slide 20
Slide 20 text
intermediate-build-server ຊ CI as a Service ্ͰΓ͔ͨͬͨ image pull -> build -> push Docker 1.10 ͔Β Docker image ͷΈ͕มΘͬͯɺ pull ͖ͯͨ͠Πϝʔδͷʮ్த·ͰʯΩϟογϡͱͯ͠ ͏͜ͱ͕Ͱ͖ͳ͘ͳͬͨ https://docs.docker.com/engine/userguide/storagedriver/ imagesandcontainers/#/content-addressable-storage
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
intermediate-build-server
Slide 23
Slide 23 text
Ҡߦ݁Ռ
Slide 24
Slide 24 text
Ҡߦ݁Ռ ΠϝʔδαΠζ 3.307 GB -> 2.24 GB Ϗϧυ࣌ؒ 48 m -> 16 m 5 s
Slide 25
Slide 25 text
TODO Serverspec ॻ͍͚ͨͲ CI ͕ͳ͍ ECR ʹͬͨΰϛΠϝʔδͷআ shallow clone ͰΠϝʔδΛ͞ΒʹμΠΤοτ σϓϩΠύΠϓϥΠϯΛݟͯ͠σϓϩΠߴԽ ͱ͔ͱ͔…
Slide 26
Slide 26 text
To be continued... http://chibadan.connpass.com/event/41625/
Slide 27
Slide 27 text
To be continued... http://chibadan.connpass.com/event/41625/
Slide 28
Slide 28 text
Recap
Slide 29
Slide 29 text
No content