continuous delivery with docker and amazon ecs
Post on 06-Jan-2017
6.882 Views
Preview:
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