continuous delivery with docker and amazon ecs

Post on 06-Jan-2017

6.882 Views

Category:

Business

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Daniele Stroppa

AWS Solutions Architect

@moviolone

Continuous Delivery with Docker

and Amazon ECS

What to expect from the session

• Best practices for containers in continuous delivery

solutions

• Toolset to implement such solutions

• Demos

Why use containers?

• Process isolation

• Portable

• Fast

• Efficient

Why use containers for continuous delivery?

• Roll out features as quickly as possible

• Predictable and reproducible environment

• Fast feedback

Demo application architecture

Nginx ProxyRuby on Rails

web app

PostgreSQL

on RDS

Development and deployment workflow

Orchestration

layer

Code

repository

Build

environment

Test

environmentDeployment

environment

Source

Stage 1 - Source

Development environment

Code

repository

Source

AWS CodeCommit

• Private Git repository

• Fully managed

• Secure

• Highly available and scalable

• Alternatives:

• Github

• Bitbucket

Docker and Docker Toolbox

• Docker (Linux > 3.10) or Docker Toolbox (OS X,

Windows)

• Define app environment with Dockerfile

Dockerfile

FROM ruby:2.2.2

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev

RUN mkdir -p /opt/web

WORKDIR /tmp

ADD Gemfile /tmp/

ADD Gemfile.lock /tmp/

RUN bundle install

ADD . /opt/web

WORKDIR /opt/web

Docker Compose

Define and run multi-container applications:

1. Define app environment with Dockerfile

2. Define services that make up your app in docker-

compose.yml

3. Run docker-compose up to start and run entire app

docker-compose.yml

proxy:

build: ./proxy

ports:

- "80:80"

links:

- web

web:

build: ./web

command: bundle exec rails server -b 0.0.0.0

environment:

- SECRET_KEY_BASE=secretkey

expose:

- "3000"

Amazon ECS CLI

• Easily create Amazon ECS clusters & supporting

resources such as EC2 instances

• Run Docker Compose configuration files on Amazon

ECS

• Available today – http://amzn.to/1jBf45a

Amazon ECS CLI

> ecs-cli configure

> ecs-cli compose build

> ecs-cli compose up --local

It’s Dem-o-clock!

Stage 2 - Build

Build environment

Build

environment

Partners

Jenkins

• Extensible

• Flexible builds

• Ant or Maven based projects

• Docker images

• Optionally runs in Docker container

CloudBees Docker Build and Publish plugin

Stage 3 - Test

Test environment

Test

environment

rspec and capybara-webkit

require 'rails_helper.rb'

feature 'Signing in' do

scenario 'can sign in' do

visit '/users/sign_in'

within("#new_user") do

fill_in 'Email', :with => 'test@test.com'

fill_in 'Password', :with => 'password'

end

click_button 'Log in'

expect(page).to have_content('Signed in successfully.')

end

end

Jenkins

• Run tests directly via Docker run

• Run tests in a Docker slave on Amazon ECS

CloudBees Jenkins ECS plugin

Jenkins slave Dockerfile

FROM jenkinsci/jnlp-slave

USER root

RUN apt-get update -qq && \

apt-get install -y -qq git curl wget build-essential […]

RUN apt-get install -y qt5-default libqt5webkit5-dev

RUN apt-get install -y xvfb x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps

ENV RUBY_VERSION 2.2.2

RUN echo 'gem: --no-document' >> /usr/local/etc/gemrc &&\

mkdir /src && cd /src && git clone https://github.com/sstephenson/ruby-build.git &&\

cd /src/ruby-build && ./install.sh &&\

cd / && rm -rf /src/ruby-build && ruby-build $RUBY_VERSION /usr/local

Jenkins slave Dockerfile

RUN gem update --system && gem install bundler

# Install Gems

WORKDIR /tmp

ADD Gemfile /tmp/

ADD Gemfile.lock /tmp/

RUN bundle install

USER jenkins

Stage 4 - Deploy

Deployment environment

Deployment

environment

Amazon ECS CLI

> ecs-cli up

> ecs-cli compose up

> ecs-cli compose ps

AWS Elastic Beanstalk

• Deploy and manage applications without worrying about

the infrastructure

• AWS Elastic Beanstalk manages your database, Elastic

Load Balancing (ELB), Amazon ECS cluster, monitoring

and logging

• Docker support

• Single container (on Amazon EC2)

• Multi container (on Amazon ECS)

Putting it all together

Putting it all together

Orchestration

layer

AWS CodePipeline

Model and automate your software release processes

• Rapid delivery

• Configurable workflow

• Customizable

• Highly integrated

It’s Dem-o-clock!

Daniele Stroppa

AWS Solutions Architect

@moviolone

Thank you!

top related