SlideShare a Scribd company logo
1 of 52
Download to read offline
The Difference between VM &
Docker-based Pipelines
GUY SALTON
Guy Salton
Solution Architect
guy.salton@codefresh.io
Agenda
1. Docker usage in Continuous Integration
2. Pre-install vs Dockerizing build tools as
pipeline steps
3. Upgrading build tools to new versions
4. Mixing multiple versions of the same tool in
the same pipeline
5. Creating new pipeline steps on the fly
● Demos for everything using Codefresh and
Jenkins
https://github.com/containers101/
docker-based-pipelines-webinar/
guy.salton@codefresh.io
Theory: Docker-based Pipelines
guy.salton@codefresh.io
“Docker-based” means 2 different things:
Using Docker as a
deployment package
(this is what most people think)
Using Docker for build Tooling
(this is not what most people think)
90% of cases: “We have migrated
to Docker in production”
guy.salton@codefresh.io
Before Docker – The Dark Ages
guy.salton@codefresh.io
Docker-based Deployments - Better
guy.salton@codefresh.io
Adding Docker-based Build Pipelines
guy.salton@codefresh.io
Today’s Talk
CI/CD Runtime
guy.salton@codefresh.io
VM versus Docker
Before:
● Tools are static
● Used for all pipelines
After:
● Tools are dynamic
● Isolated to each pipeline
Pipeline
Java6
Docker Go
Docker
Pipeline
Node9
Docker
Python2
Docker
Pipeline
Python3
Docker
Node11
Docker
guy.salton@codefresh.io
Resources for Docker as Deployment artifact
guy.salton@codefresh.io
Docker CI/CD - Benefits
guy.salton@codefresh.io
VM-Based Pipelines
● Multiple tools on each node
● Very hard to manage
●Often nodes had different versions of the same
tool
●Developers had to choose the correct machine
for their build
guy.salton@codefresh.io
Build farm after Docker
● Only Docker is installed
● Very easy to manage
●All nodes are exactly the same
●These nodes are often a Kubernetes cluster
guy.salton@codefresh.io
Using Docker in Continuous Integration
● EVERY build tool is placed in a Docker
container
● The build node has only Docker installed
and nothing else
● A pipeline is a series of commands that run
inside a Docker context
● After each build the node reverts back to its
original state
● Developers don’t care about nodes
guy.salton@codefresh.io
Docker images are everywhere
● They are reusable and shareable
● No need to reinvent the wheel (e.g. Terraform in Docker)
● Private docker images can be created with your team in mind
guy.salton@codefresh.io
Container per build step
● Codefresh requires ALL tools to be dockerized
● You can use any public or private Docker image
as tooling
● Each build step has a Docker image as context
● Pipelines are described in declarative YAML
guy.salton@codefresh.io
About Codefresh
● Docker based CI/CD solution
● Each build step is a Docker image
● Native support for Docker, Helm,
Kubernetes deployments
● Includes built-in Docker registry and
Helm repository
● 30,000+ users
guy.salton@codefresh.io
Demo 1:
Python/Node application
https://github.com/containers101/docker-based-pipelines-webinar/tree/master/01_simple_pipeline
guy.salton@codefresh.io
Traditional VM based problems
guy.salton@codefresh.io
VM based Platform Questions:
● Do you support my favorite version of
Node/Java/Go/Ruby/Python?
● Do you support maven, yarn, gulp, sbt, gradle, rake?
● Can I run Ansible? Terraform? GCloud? AWS CLI?
● Can I run Kubectl? Helm? Draft?
guy.salton@codefresh.io
VM based CI/CD Platforms
guy.salton@codefresh.io
Demo 2:
Adding Go and AWS CLI
https://github.com/containers101/docker-based-pipelines-webinar/tree/master/02_aws_cli
guy.salton@codefresh.io
Does Codefresh Support…
● Node 10?
● Perl 6?
● Python2?
● Gradle?
● Vault?
● AWS cli?
● Sonar?
● Findbugs?
● Selenium?
● Snyk?
● Clair?
guy.salton@codefresh.io
Does Codefresh Support…
● Node 10?
● Perl 6?
● Python2?
● Gradle?
● Vault?
● AWS cli?
● Sonar?
● Findbugs?
● Selenium?
● Snyk?
● Clair?
YES!
Because there is a Docker
image for it
guy.salton@codefresh.io
Codefresh Pipelines are Future Proof
● You can use ANY existing Docker image from Dockerhub or
any other Registry
● Every time a new tool comes out, it can be used right away if
packaged in a Docker image
guy.salton@codefresh.io
Tool Upgrades and Version
Clashes
guy.salton@codefresh.io
Updating a Tool in a VM based Pipeline
guy.salton@codefresh.io
VM based CI Solutions
guy.salton@codefresh.io
Demo:
Updating Python to 3.7
https://github.com/containers101/docker-based-pipelines-webinar/tree/master/02_aws_cli
guy.salton@codefresh.io
Using Tools from Different Versions
● Version clashes are a huge pain for both developers and operators
● Legacy projects need to still use old version
● Using different versions in the same pipeline is almost impossible
● Developers want to use latest version of tool, traditional CI/CD
platforms may not be able to keep up
guy.salton@codefresh.io
Wasting Effort on “Version Managers”
guy.salton@codefresh.io
Wasting Effort on “Version Managers”
● They allow developers to switch between different versions
● Tied to a specific technology/programming language
● Require they own installation/ maintenance
● Must be upgraded for new versions
guy.salton@codefresh.io
The Problem with Python
● Different python versions are a
notorious problem
● Until recently you needed
dedicated support from your CI
platform
● What happens if I want to test
Python 2.5?
guy.salton@codefresh.io
Replacing “version managers”
with Docker
● Works for any language/framework
● Already installed on the build node
● Its own version is independent from
the tools
● Can use any public and private image
guy.salton@codefresh.io
Codefresh “Python Support”
● We support EVERY container
ever made
● We support EVERY container
that you can make in the future
guy.salton@codefresh.io
Demo 3:
Multiple Python/Node versions
https://github.com/containers101/docker-based-pipelines-webinar/tree/master/03_multiple_versions
guy.salton@codefresh.io
Data Sharing Between
Pipeline Steps
guy.salton@codefresh.io
Data Sharing
● Steps need to communicate
● Output of one step is input for the
next
● Artifacts (node modules, ruby gems,
maven caches) need to persist
● Test reports/Coverage statistics
guy.salton@codefresh.io
Caches and Artifacts (VM based solutions)
● “Cache” directive
● Need to be setup explicitly
● Different for each build tool
● “Artifact” directive
● Developers defines exact path of
what needs to be archived
● Used for the result of the whole build
or as shared data between steps
guy.salton@codefresh.io
All Steps Share a Volume in Codefresh
guy.salton@codefresh.io
Project is on the Volume
● Project is checked out in the volume
● Volume is also persisted between builds
● Any build tools that use the project folder for
artifacts will gain automatic caching
● For other tools you just need to point their
cache to /codefresh/volume
● There is no need for special “artifact settings”.
Just place files in /codefresh/volume
guy.salton@codefresh.io
Demo 4 – Node Modules
https://github.com/containers101/docker-based-pipelines-webinar/tree/master/04_volume
guy.salton@codefresh.io
Creating Docker Images On-demand
● Create a Docker image as a step
● Use image in a later step
● Maximum flexibility for build context
● Image contents are not known in
advance
● Codefresh is the only platform at the
moment that offers this capability
guy.salton@codefresh.io
Codefresh Plugins
guy.salton@codefresh.io
Plugins in Traditional CI/CD Platforms
● Specific to the platform (vendor lock-in)
● Tied to a specific language (e.g. Groovy)
● Developer needs to learn proprietary API
● Testing and installing them is difficult
guy.salton@codefresh.io
Codefresh Plugins = Docker Images
guy.salton@codefresh.io
Codefresh Plugins
● Not tied to any programming language
● Require only Docker knowledge
● Easy to test, easy to search, easy to store
● Several plugins for Codefresh already available
guy.salton@codefresh.io
Plugin Directory
http://steps.codefresh.io/
Learn how to build your own!
Workshop
github.com/
todaywasawesome/
containers-as-steps
guy.salton@codefresh.io
Summary
● Docker-based pipelines use Docker
images as build steps
● Upgrading tools is easy
● Using multiple versions of the same tool is
trivial
● Can dynamically create build steps
● Codefresh plugins are Docker images
guy.salton@codefresh.io
Signup for a FREE account with
UNLIMITED builds
& Schedule a 1:1 with
our experts at
codefresh.io
Build Fast,
Deploy Faster
Thank You!
guy.salton@codefresh.io

More Related Content

What's hot

Containerizing Hardware Accelerated Applications
Containerizing Hardware Accelerated ApplicationsContainerizing Hardware Accelerated Applications
Containerizing Hardware Accelerated Applications
Docker, Inc.
 

What's hot (20)

CI CD using Docker and Jenkins
CI CD  using Docker and JenkinsCI CD  using Docker and Jenkins
CI CD using Docker and Jenkins
 
Introduction to Kubernetes - Docker Global Mentor Week 2016
Introduction to Kubernetes - Docker Global Mentor Week 2016Introduction to Kubernetes - Docker Global Mentor Week 2016
Introduction to Kubernetes - Docker Global Mentor Week 2016
 
Building Your Docker Swarm Tech Stack
Building Your Docker Swarm Tech StackBuilding Your Docker Swarm Tech Stack
Building Your Docker Swarm Tech Stack
 
Docker to the Rescue of an Ops Team
Docker to the Rescue of an Ops TeamDocker to the Rescue of an Ops Team
Docker to the Rescue of an Ops Team
 
Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)Continuous Delivery with Jenkins and Wildfly (2014)
Continuous Delivery with Jenkins and Wildfly (2014)
 
Why kubernetes matters
Why kubernetes mattersWhy kubernetes matters
Why kubernetes matters
 
DockerCon 15 Keynote - Day 2
DockerCon 15 Keynote - Day 2DockerCon 15 Keynote - Day 2
DockerCon 15 Keynote - Day 2
 
Back to the Future: Containerize Legacy Applications
Back to the Future: Containerize Legacy ApplicationsBack to the Future: Containerize Legacy Applications
Back to the Future: Containerize Legacy Applications
 
Cloud Native Apps with GitOps
Cloud Native Apps with GitOps Cloud Native Apps with GitOps
Cloud Native Apps with GitOps
 
DockerCon SF 2015: Docker in the New York Times Newsroom
DockerCon SF 2015: Docker in the New York Times NewsroomDockerCon SF 2015: Docker in the New York Times Newsroom
DockerCon SF 2015: Docker in the New York Times Newsroom
 
Building Developer Pipelines with PKS, Harbor, Clair, and Concourse
Building Developer Pipelines with PKS, Harbor, Clair, and ConcourseBuilding Developer Pipelines with PKS, Harbor, Clair, and Concourse
Building Developer Pipelines with PKS, Harbor, Clair, and Concourse
 
DCSF 19 Building Your Development Pipeline
DCSF 19 Building Your Development Pipeline  DCSF 19 Building Your Development Pipeline
DCSF 19 Building Your Development Pipeline
 
GlueCon kubernetes & container engine
GlueCon kubernetes & container engineGlueCon kubernetes & container engine
GlueCon kubernetes & container engine
 
Tales of Training: Scaling CodeLabs with Swarm Mode and Docker-Compose
Tales of Training: Scaling CodeLabs with Swarm Mode and Docker-ComposeTales of Training: Scaling CodeLabs with Swarm Mode and Docker-Compose
Tales of Training: Scaling CodeLabs with Swarm Mode and Docker-Compose
 
Intro to Docker Containers and the Oracle Platform – Database, WebLogic &Clo...
 Intro to Docker Containers and the Oracle Platform – Database, WebLogic &Clo... Intro to Docker Containers and the Oracle Platform – Database, WebLogic &Clo...
Intro to Docker Containers and the Oracle Platform – Database, WebLogic &Clo...
 
Javaone 2014 - Git & Docker with Jenkins
Javaone 2014 - Git & Docker with JenkinsJavaone 2014 - Git & Docker with Jenkins
Javaone 2014 - Git & Docker with Jenkins
 
DCEU 18: How To Build Your Containerization Strategy
DCEU 18: How To Build Your Containerization StrategyDCEU 18: How To Build Your Containerization Strategy
DCEU 18: How To Build Your Containerization Strategy
 
Containerizing Hardware Accelerated Applications
Containerizing Hardware Accelerated ApplicationsContainerizing Hardware Accelerated Applications
Containerizing Hardware Accelerated Applications
 
Openbar 7 - Leuven - OpenShift - The Enterprise Container Platform - Piros
Openbar 7 - Leuven - OpenShift - The Enterprise Container Platform - PirosOpenbar 7 - Leuven - OpenShift - The Enterprise Container Platform - Piros
Openbar 7 - Leuven - OpenShift - The Enterprise Container Platform - Piros
 
Containers without docker
Containers without dockerContainers without docker
Containers without docker
 

Similar to VM vs Docker-Based Pipelines

Similar to VM vs Docker-Based Pipelines (20)

Docker based-pipelines
Docker based-pipelinesDocker based-pipelines
Docker based-pipelines
 
Docker based-Pipelines with Codefresh
Docker based-Pipelines with CodefreshDocker based-Pipelines with Codefresh
Docker based-Pipelines with Codefresh
 
Magento Docker Setup.pdf
Magento Docker Setup.pdfMagento Docker Setup.pdf
Magento Docker Setup.pdf
 
Tribal Nova Docker feedback
Tribal Nova Docker feedbackTribal Nova Docker feedback
Tribal Nova Docker feedback
 
Docker for developers
Docker for developersDocker for developers
Docker for developers
 
New Features Webinar-April
New Features Webinar-AprilNew Features Webinar-April
New Features Webinar-April
 
New Perl module Container::Buildah - SVPerl presentation
New Perl module Container::Buildah - SVPerl presentationNew Perl module Container::Buildah - SVPerl presentation
New Perl module Container::Buildah - SVPerl presentation
 
ExpoQA 2017 Using docker to build and test in your laptop and Jenkins
ExpoQA 2017 Using docker to build and test in your laptop and JenkinsExpoQA 2017 Using docker to build and test in your laptop and Jenkins
ExpoQA 2017 Using docker to build and test in your laptop and Jenkins
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
 
Containers without docker | DevNation Tech Talk
Containers without docker | DevNation Tech TalkContainers without docker | DevNation Tech Talk
Containers without docker | DevNation Tech Talk
 
Demystifying Docker101
Demystifying Docker101Demystifying Docker101
Demystifying Docker101
 
Demystifying Docker
Demystifying DockerDemystifying Docker
Demystifying Docker
 
Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned  Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned
 
Lean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and DrushLean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and Drush
 
QA Club Kiev #20. Making life easier with Docker
QA Club Kiev #20. Making life easier with DockerQA Club Kiev #20. Making life easier with Docker
QA Club Kiev #20. Making life easier with Docker
 
January OpenNTF Webinar: 4D - Domino Docker Deep Dive
January OpenNTF Webinar: 4D - Domino Docker Deep DiveJanuary OpenNTF Webinar: 4D - Domino Docker Deep Dive
January OpenNTF Webinar: 4D - Domino Docker Deep Dive
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'a
 
Introduction to Docker - VIT Campus
Introduction to Docker - VIT CampusIntroduction to Docker - VIT Campus
Introduction to Docker - VIT Campus
 
Podman, Buildah, and Quarkus - The Latest in Linux Containers Technologies
Podman, Buildah, and Quarkus - The Latest in Linux Containers Technologies Podman, Buildah, and Quarkus - The Latest in Linux Containers Technologies
Podman, Buildah, and Quarkus - The Latest in Linux Containers Technologies
 
Introduction to Docker - Vellore Institute of Technology
Introduction to Docker - Vellore Institute of TechnologyIntroduction to Docker - Vellore Institute of Technology
Introduction to Docker - Vellore Institute of Technology
 

More from Codefresh

More from Codefresh (20)

Detect, debug, deploy with Codefresh and Lightstep
Detect, debug, deploy with Codefresh and LightstepDetect, debug, deploy with Codefresh and Lightstep
Detect, debug, deploy with Codefresh and Lightstep
 
CICD Pipelines for Microservices: Lessons from the Trenches
CICD Pipelines for Microservices: Lessons from the TrenchesCICD Pipelines for Microservices: Lessons from the Trenches
CICD Pipelines for Microservices: Lessons from the Trenches
 
Simplify Your Code with Helmfile
Simplify Your Code with HelmfileSimplify Your Code with Helmfile
Simplify Your Code with Helmfile
 
Making the Most of Helm 3 with Codefresh
Making the Most of Helm 3 with CodefreshMaking the Most of Helm 3 with Codefresh
Making the Most of Helm 3 with Codefresh
 
5 Simple Tips for Troubleshooting Your Kubernetes Pods
5 Simple Tips for Troubleshooting Your Kubernetes Pods5 Simple Tips for Troubleshooting Your Kubernetes Pods
5 Simple Tips for Troubleshooting Your Kubernetes Pods
 
Best Practices for Microservice CI/CD: Lessons from Expedia and Codefresh
Best Practices for Microservice CI/CD: Lessons from Expedia and CodefreshBest Practices for Microservice CI/CD: Lessons from Expedia and Codefresh
Best Practices for Microservice CI/CD: Lessons from Expedia and Codefresh
 
Hybrid CI/CD with Kubernetes & Codefresh
 Hybrid CI/CD with Kubernetes & Codefresh Hybrid CI/CD with Kubernetes & Codefresh
Hybrid CI/CD with Kubernetes & Codefresh
 
Why You Should be Using Multi-stage Docker Builds in 2019
Why You Should be Using Multi-stage Docker Builds in 2019Why You Should be Using Multi-stage Docker Builds in 2019
Why You Should be Using Multi-stage Docker Builds in 2019
 
Deploy Secure Cloud-Native Apps Fast
Deploy Secure Cloud-Native Apps Fast Deploy Secure Cloud-Native Apps Fast
Deploy Secure Cloud-Native Apps Fast
 
CICD Pipelines for Microservices Best Practices
CICD Pipelines for Microservices Best Practices CICD Pipelines for Microservices Best Practices
CICD Pipelines for Microservices Best Practices
 
Codefresh CICD New Features Launch! May 2019
Codefresh CICD New Features Launch! May 2019Codefresh CICD New Features Launch! May 2019
Codefresh CICD New Features Launch! May 2019
 
Terraform GitOps on Codefresh
Terraform GitOps on CodefreshTerraform GitOps on Codefresh
Terraform GitOps on Codefresh
 
Adding Container Image Scanning to Your Codefresh Pipelines with Anchore
Adding Container Image Scanning to Your Codefresh Pipelines with AnchoreAdding Container Image Scanning to Your Codefresh Pipelines with Anchore
Adding Container Image Scanning to Your Codefresh Pipelines with Anchore
 
Image scanning using Clair
Image scanning using Clair Image scanning using Clair
Image scanning using Clair
 
Updating Kubernetes With Helm Charts: Build, Test, Deploy with Codefresh and...
 Updating Kubernetes With Helm Charts: Build, Test, Deploy with Codefresh and... Updating Kubernetes With Helm Charts: Build, Test, Deploy with Codefresh and...
Updating Kubernetes With Helm Charts: Build, Test, Deploy with Codefresh and...
 
Automated Serverless Pipelines with #GitOps on Codefresh
Automated Serverless Pipelines with #GitOps on CodefreshAutomated Serverless Pipelines with #GitOps on Codefresh
Automated Serverless Pipelines with #GitOps on Codefresh
 
Discovering and Fixing Dependency Vulnerabilities for Kubernetes apps with Sn...
Discovering and Fixing Dependency Vulnerabilities for Kubernetes apps with Sn...Discovering and Fixing Dependency Vulnerabilities for Kubernetes apps with Sn...
Discovering and Fixing Dependency Vulnerabilities for Kubernetes apps with Sn...
 
Net Pipeline on Windows Kubernetes
Net Pipeline on Windows KubernetesNet Pipeline on Windows Kubernetes
Net Pipeline on Windows Kubernetes
 
Multi-cloud CI/CD with failover powered by K8s, Istio, Helm, and Codefresh
Multi-cloud CI/CD with failover powered by K8s, Istio, Helm, and Codefresh Multi-cloud CI/CD with failover powered by K8s, Istio, Helm, and Codefresh
Multi-cloud CI/CD with failover powered by K8s, Istio, Helm, and Codefresh
 
Skip Staging! Test Docker, Helm, and Kubernetes Apps like a Pro
Skip Staging! Test Docker, Helm, and Kubernetes Apps like a ProSkip Staging! Test Docker, Helm, and Kubernetes Apps like a Pro
Skip Staging! Test Docker, Helm, and Kubernetes Apps like a Pro
 

Recently uploaded

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 

VM vs Docker-Based Pipelines

  • 1. The Difference between VM & Docker-based Pipelines GUY SALTON
  • 3. Agenda 1. Docker usage in Continuous Integration 2. Pre-install vs Dockerizing build tools as pipeline steps 3. Upgrading build tools to new versions 4. Mixing multiple versions of the same tool in the same pipeline 5. Creating new pipeline steps on the fly ● Demos for everything using Codefresh and Jenkins https://github.com/containers101/ docker-based-pipelines-webinar/ guy.salton@codefresh.io
  • 5. “Docker-based” means 2 different things: Using Docker as a deployment package (this is what most people think) Using Docker for build Tooling (this is not what most people think) 90% of cases: “We have migrated to Docker in production” guy.salton@codefresh.io
  • 6. Before Docker – The Dark Ages guy.salton@codefresh.io
  • 7. Docker-based Deployments - Better guy.salton@codefresh.io
  • 8. Adding Docker-based Build Pipelines guy.salton@codefresh.io
  • 10. VM versus Docker Before: ● Tools are static ● Used for all pipelines After: ● Tools are dynamic ● Isolated to each pipeline Pipeline Java6 Docker Go Docker Pipeline Node9 Docker Python2 Docker Pipeline Python3 Docker Node11 Docker guy.salton@codefresh.io
  • 11. Resources for Docker as Deployment artifact guy.salton@codefresh.io
  • 12. Docker CI/CD - Benefits guy.salton@codefresh.io
  • 13. VM-Based Pipelines ● Multiple tools on each node ● Very hard to manage ●Often nodes had different versions of the same tool ●Developers had to choose the correct machine for their build guy.salton@codefresh.io
  • 14. Build farm after Docker ● Only Docker is installed ● Very easy to manage ●All nodes are exactly the same ●These nodes are often a Kubernetes cluster guy.salton@codefresh.io
  • 15. Using Docker in Continuous Integration ● EVERY build tool is placed in a Docker container ● The build node has only Docker installed and nothing else ● A pipeline is a series of commands that run inside a Docker context ● After each build the node reverts back to its original state ● Developers don’t care about nodes guy.salton@codefresh.io
  • 16. Docker images are everywhere ● They are reusable and shareable ● No need to reinvent the wheel (e.g. Terraform in Docker) ● Private docker images can be created with your team in mind guy.salton@codefresh.io
  • 17. Container per build step ● Codefresh requires ALL tools to be dockerized ● You can use any public or private Docker image as tooling ● Each build step has a Docker image as context ● Pipelines are described in declarative YAML guy.salton@codefresh.io
  • 18. About Codefresh ● Docker based CI/CD solution ● Each build step is a Docker image ● Native support for Docker, Helm, Kubernetes deployments ● Includes built-in Docker registry and Helm repository ● 30,000+ users guy.salton@codefresh.io
  • 20. Traditional VM based problems guy.salton@codefresh.io
  • 21. VM based Platform Questions: ● Do you support my favorite version of Node/Java/Go/Ruby/Python? ● Do you support maven, yarn, gulp, sbt, gradle, rake? ● Can I run Ansible? Terraform? GCloud? AWS CLI? ● Can I run Kubectl? Helm? Draft? guy.salton@codefresh.io
  • 22. VM based CI/CD Platforms guy.salton@codefresh.io
  • 23. Demo 2: Adding Go and AWS CLI https://github.com/containers101/docker-based-pipelines-webinar/tree/master/02_aws_cli guy.salton@codefresh.io
  • 24. Does Codefresh Support… ● Node 10? ● Perl 6? ● Python2? ● Gradle? ● Vault? ● AWS cli? ● Sonar? ● Findbugs? ● Selenium? ● Snyk? ● Clair? guy.salton@codefresh.io
  • 25. Does Codefresh Support… ● Node 10? ● Perl 6? ● Python2? ● Gradle? ● Vault? ● AWS cli? ● Sonar? ● Findbugs? ● Selenium? ● Snyk? ● Clair? YES! Because there is a Docker image for it guy.salton@codefresh.io
  • 26. Codefresh Pipelines are Future Proof ● You can use ANY existing Docker image from Dockerhub or any other Registry ● Every time a new tool comes out, it can be used right away if packaged in a Docker image guy.salton@codefresh.io
  • 27. Tool Upgrades and Version Clashes guy.salton@codefresh.io
  • 28. Updating a Tool in a VM based Pipeline guy.salton@codefresh.io
  • 29. VM based CI Solutions guy.salton@codefresh.io
  • 30. Demo: Updating Python to 3.7 https://github.com/containers101/docker-based-pipelines-webinar/tree/master/02_aws_cli guy.salton@codefresh.io
  • 31. Using Tools from Different Versions ● Version clashes are a huge pain for both developers and operators ● Legacy projects need to still use old version ● Using different versions in the same pipeline is almost impossible ● Developers want to use latest version of tool, traditional CI/CD platforms may not be able to keep up guy.salton@codefresh.io
  • 32. Wasting Effort on “Version Managers” guy.salton@codefresh.io
  • 33. Wasting Effort on “Version Managers” ● They allow developers to switch between different versions ● Tied to a specific technology/programming language ● Require they own installation/ maintenance ● Must be upgraded for new versions guy.salton@codefresh.io
  • 34. The Problem with Python ● Different python versions are a notorious problem ● Until recently you needed dedicated support from your CI platform ● What happens if I want to test Python 2.5? guy.salton@codefresh.io
  • 35. Replacing “version managers” with Docker ● Works for any language/framework ● Already installed on the build node ● Its own version is independent from the tools ● Can use any public and private image guy.salton@codefresh.io
  • 36. Codefresh “Python Support” ● We support EVERY container ever made ● We support EVERY container that you can make in the future guy.salton@codefresh.io
  • 37. Demo 3: Multiple Python/Node versions https://github.com/containers101/docker-based-pipelines-webinar/tree/master/03_multiple_versions guy.salton@codefresh.io
  • 38. Data Sharing Between Pipeline Steps guy.salton@codefresh.io
  • 39. Data Sharing ● Steps need to communicate ● Output of one step is input for the next ● Artifacts (node modules, ruby gems, maven caches) need to persist ● Test reports/Coverage statistics guy.salton@codefresh.io
  • 40. Caches and Artifacts (VM based solutions) ● “Cache” directive ● Need to be setup explicitly ● Different for each build tool ● “Artifact” directive ● Developers defines exact path of what needs to be archived ● Used for the result of the whole build or as shared data between steps guy.salton@codefresh.io
  • 41. All Steps Share a Volume in Codefresh guy.salton@codefresh.io
  • 42. Project is on the Volume ● Project is checked out in the volume ● Volume is also persisted between builds ● Any build tools that use the project folder for artifacts will gain automatic caching ● For other tools you just need to point their cache to /codefresh/volume ● There is no need for special “artifact settings”. Just place files in /codefresh/volume guy.salton@codefresh.io
  • 43. Demo 4 – Node Modules https://github.com/containers101/docker-based-pipelines-webinar/tree/master/04_volume guy.salton@codefresh.io
  • 44. Creating Docker Images On-demand ● Create a Docker image as a step ● Use image in a later step ● Maximum flexibility for build context ● Image contents are not known in advance ● Codefresh is the only platform at the moment that offers this capability guy.salton@codefresh.io
  • 46. Plugins in Traditional CI/CD Platforms ● Specific to the platform (vendor lock-in) ● Tied to a specific language (e.g. Groovy) ● Developer needs to learn proprietary API ● Testing and installing them is difficult guy.salton@codefresh.io
  • 47. Codefresh Plugins = Docker Images guy.salton@codefresh.io
  • 48. Codefresh Plugins ● Not tied to any programming language ● Require only Docker knowledge ● Easy to test, easy to search, easy to store ● Several plugins for Codefresh already available guy.salton@codefresh.io
  • 50. Learn how to build your own! Workshop github.com/ todaywasawesome/ containers-as-steps guy.salton@codefresh.io
  • 51. Summary ● Docker-based pipelines use Docker images as build steps ● Upgrading tools is easy ● Using multiple versions of the same tool is trivial ● Can dynamically create build steps ● Codefresh plugins are Docker images guy.salton@codefresh.io
  • 52. Signup for a FREE account with UNLIMITED builds & Schedule a 1:1 with our experts at codefresh.io Build Fast, Deploy Faster Thank You! guy.salton@codefresh.io