Keeping consistent environments across your development, test, and production systems can be a complex task. Docker containers offer a way to develop and test your application in the same environment in which it runs in production. You can use tools such as Docker Compose for local testing of applications; Jenkins and AWS CodePipeline for building and workflow orchestration; and Amazon EC2 Container Service to manage and scale containers. In this session, you will learn how to build containers into your continuous deployment workflow and orchestrate container deployments using Amazon ECS. Join us to: - Learn to integrate containers into CI/CD flows - Orchestrate continuous delivery workflows using AWS CodePipeline - Schedule containers on production clusters using Amazon ECS Who should attend: Developers, DevOps, Admins who wants to understand how to integrate containers in a CI/CD workflow. Working knowledge of containers and Docker is required. Knowledge of AWS Services is preferred, but not required.
2. What is continuous delivery?
• Software development practice where code changes are
automatically built, tested, and prepared for a release to production.
• Extends continuous integration by deploying all code changes to a
testing environment and/or a production environment after the build
stage.
• Developers approve the update to production when they are ready.
• Different from continuous deployment, where the push to production
happens automatically without explicit approval.
• Continuous delivery lets developers automate testing beyond just
unit tests to verify application updates across multiple dimensions
before deploying.
8. Docker and Docker Toolbox
• Docker (Linux > 3.10)
• Docker Toolbox or Docker Beta (OS X, Windows)
• Define app environment with Dockerfile
9. 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
10. 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
20. Running test inside a container
Usual Docker commands available within your test
environment
Run the container with the commands necessary to
execute your tests, e.g.:
docker run web bundle exec rake test
21. Running test against a container
Start a container running in detached mode with an
exposed port serving your app
Run browser tests or other black box tests against the
container, e.g. headless browser tests
24. Amazon EC2 Container Service
• Highly scalable container management service
• Easily manage clusters for any scale
• Flexible container placement
• Integrated with other AWS services
• Extensible
• Amazon ECS concepts
• Cluster and container instances
• Task definition and task
25. Recent Enhancements to ECS
• Task Roles
• Dynamic Port Mapping and path based routing
• Auto-scaling policies for services
• Network modes for Docker
26. 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)
27. 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
28. Configuring the ECS CLI
# Configure the CLI using environment variables
> export AWS_ACCESS_KEY_ID=<my_access_key>
> export AWS_SECRET_ACCESS_KEY=<my_secret_key>
> ecs-cli configure --region us-east-1 --access-key
$AWS_ACCESS_KEY_ID --secret-key $AWS_SECRET_ACCESS_KEY --cluster
ecs-cli-demo
# Configure the CLI using an existing AWS CLI profile
> ecs-cli configure --region us-west-2 --profile ecs-profile --
cluster ecs-cli-demo
29. Deploy and scale Compose app with ECS CLI
# Deploy a Compose app as a Task or as a Service
> ecs-cli compose up
> ecs-cli compose ps
> ecs-cli compose service create
> ecs-cli compose service start
# Scale a Compose app deployed as a Task or as a Service
> ecs-cli compose scale n
> ecs-cli compose service scale n
31. Continuous delivery to ECS with Jenkins
4. Push image to
Docker registry
2. Build image from
sources 3. Run test on image
1. Code push
triggers build
5. Update Service
6. Pull image
32. Continuous delivery to ECS with Jenkins
Easy Deployment
Developers – Merge into master, done!
Jenkins Build Steps
Trigger via Webhooks, Monitoring, Lambda
Build Docker image via Build and Publish plugin
Push Docker image into Registry
Register Updated Job with ECS API
33. Continuous delivery to ECS with CodePipeline
1. Code push
triggers pipeline
2. Lambda function
creates EC2 instance
3. Image is built and
pushed to ECR
4. Lambda function
terminates EC2 instance
5. Lambda function
deploy new task
revision to ECS
34. Continuous delivery to ECS with CodePipeline
• Lambda custom actions
• Create and terminate EC2 instance
• Update ECS service
• EC2 instance uses user data to build an image and push
it to Amazon ECR