Codeship Continuous Integration and Continuous Delivery With Docker

download Codeship Continuous Integration and Continuous Delivery With Docker

of 14

Transcript of Codeship Continuous Integration and Continuous Delivery With Docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    1/14

    JAR O SL AV HO L UB

    Continuous Integration

    and Continuous Deliverywith Docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    2/14

    - 2 -

    S ha re  t h is 

    Codes h i p Gu ide

    About the Author.

    Jaroslav Holub is Senior Enineer at Container Solutions

    in Amsterdam. He mainly works on research and

    development of prorammable infrastructure projects.

    He contributes to open source projects and writes about

    containers, continuous delivery and devops.

    Container Solutions is a premium software consultancy

    that focuses on prorammable infrastructure to help

    their customers innovate at speed and scale.

    They provide support and consultin to technical and

    manaement teams who are carryin out complex

    technical projects and transitions as well as trainin for arane of technoloies, includin Docker and Mesos.

    Learn more about Container Solutions here.

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttp://container-solutions.com/?utm_source=Codeship&utm_medium=ebookhttp://container-solutions.com/?utm_source=Codeship&utm_medium=ebookhttps://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    3/14

    - 3 -

    S ha re  t h is 

    Codes h i p Gu ide

    Continuous Integrationand Continuous Deliverywith Docker.

    Continuous delivery is all about reducin risk and

    deliverin value faster by producin reliable software in

    short iterations. As Martin Fowler says, you actually do

    continuous delivery if:

    Your software is deployable throuhout its lifecycle.

    Your team prioritizes keepin the software deployable over

    workin on new features.

    Anybody can et fast, automated feedback on the productionreadiness of their systems any time somebody makes a

    chane to them.

    You can perform push-button deployments of any version of

    the software to any environment on demand.

        A    B    O

        U    T 

        D    O

        C    K    E    R

    Docker started as a side project by CTO Solomon Hykes who

    worked on a Platform as a Service solution called dotCloud. With

    rowth of his PaaS slowin down, Hykes and today‘s Docker

    CEO Ben Golub started to build a product around the underlyin

    technoloy that made dotCloud so fast.

    This product was Docker.

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttp://martinfowler.com/bliki/ContinuousDelivery.htmlhttp://martinfowler.com/bliki/ContinuousDelivery.htmlhttps://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    4/14

    - 4 -

    S ha re  t h is 

    Codes h i p Gu ide

    Containerization of software allows us to further improve onthis process. The biest improvements are in speed and

    in the level of abstraction used as a cornerstone for further

    innovations in this field.

    In this post, I’ll show you how to set up a continuous delivery

    pipeline usin Docker. We’ll see how usin this tool for Linux

    containers as part of the continuous delivery pipeline lets us

    nicely encapsulate the build process of a service. It also lets us

    deploy any revision with a few simple steps.

    We‘ll mainly use the term continuous delivery here, because it

    stands for the full circle of steps leadin to our ultimate oal.

    However, continuous interation is the most substantial part of

    continuous delivery.

    Continuous Integration with Docker

    Let’s take a Hello World web server written in Go as an

    example service. You can find all the code used in this

    GitHub repository.

    Downloaded the file? Good. Let‘s look what a continuous

    interation setup consists of on the next pae.

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://golang.org/https://github.com/codeship/cd-with-docker-tutorialhttps://github.com/codeship/cd-with-docker-tutorialhttps://github.com/codeship/cd-with-docker-tutorialhttps://github.com/codeship/cd-with-docker-tutorialhttps://golang.org/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    5/14

    - 5 -

    S ha re  t h is 

    Codes h i p Gu ide

    The continuous interation setup consists of:

    runnin unit tests

    buildin the Docker imae we use to build our service

    runnin the build container and compilin our service

    buildin the Docker imae that we run and deploy

    pushin the final imae to a Docker reistry

    Automated testing

    Runnin tests in this example is as trivial as it should be:

    Building Docker image

    The core of a sinle service interation is makin the end

    artifact — Docker imae in our case.

        T    E    S    T .    S    H

    #!/bin/sh

    go test

    https://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    6/14

    - 6 -

    S ha re  t h is 

    Codes h i p Gu ide

    Because we’ve deliberately chosen the compiledlanuae Go in this example, we need to build an

    executable file as part of our interation process. We’ll

    eventually place the executable file inside this Docker

    imae.

    Now one miht think that we would build our web server

    executable file usin build tools installed on the host

    dedicated to continuous interation and then somehow

    copy the binary to the Docker imae. But this is a no-no

    in the containerized world. Let’s do it all in containers.

    That way, we won’t rely on any build tools installed on

    hosts, and it’ll make the whole setup easily reproducible

    and encapsulated.

    Buildin an executable file can be part of a sinle Dockerimae build process toether with runtime environment

    setup. Or we can separate the two. Havin everythin

    in a sinle build process, we would end up with extra

    content (build process leftovers) in our Docker imae

    filesystem, even if we clean it afterwards in separate RUN

    commands within the Dockerfile.

    Some people use tricks to create, manipulate, and

    remove unwanted stuff in a sinle RUN command.

    Althouh it’s sometimes handy, I can’t enerally

    recommend it; in my opinion this adds to Dockerfile

    complexity. Of course, there are situations where you

    miht want to retain your sources and all in the end

    artifact.

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttp://docs.docker.com/introduction/understanding-docker/#how-does-a-docker-image-workhttp://docs.docker.com/introduction/understanding-docker/#how-does-a-docker-image-workhttps://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    7/14

    - 7 -

    S ha re  t h is 

    Codes h i p Gu ide

    The approach I recommend, however, is to createseparate “build” and “distribution” Dockerfiles.

    Use Dockerle.build to do the heavy liftin durin

    buildin the software, and use Dockerle.dist to create

    the distributable Docker imae, as liht and clean as

    possible.

    The followin is Dockerle.build . As you can see, once

    we run the build file, we create the container from a

    olan imae, compile our example service, and output

    the binary.

    In Dockerle.dist , we only use this binary and run it on

    runtime:

        D    O

        C    K    E    R    F    I    L

        E .    B    U    I    L    D

    FROM golang:1.4

    RUN mkdir -p /tmp/buildADD hello-world.go /tmp/build/ 

    WORKDIR /tmp/build

    RUN go build hello-world.go

    CMD tar -czf - hello-world

        D    O

        C    K    E    R    F    I    L    E .    D    I    S    T

    FROM debian:jessie

    RUN mkdir /app

    ADD build.tar.gz /app/ 

    ENTRYPOINT /app/hello-world

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    8/14

    - 8 -

    S ha re  t h is 

    Codes h i p Gu ide

    Our build.sh script — the essential part of ourcontinuous interation pipeline — then looks like this:

    As you can see, these three simple Docker commands

    et us a clean, small Hello-World Docker imae that’s

    ready to be deployed and run on demand. Once both

    imaes used in the FROM clauses are pulled and cached

    locally, our build process will be a matter of milliseconds

    or at most a few seconds, with a very small resources

    footprint.

    Storing Docker image

    Once our build process artifact is created, we want to

    push it to Docker Reistry, where it will be available for

    deployments.

    Please note that tain imaes properly is very

    important. Docker ecosystems suffer from the usae of

    “latest” ta. If you use a unique ta for every new imae,

        B    U    I    L    D .    S    H

    # !/bin/sh

    docker build -t hello-world-build -f Dockerle.build . 

    docker run hello-world-build > build.tar.gz

    docker build -t hello-world -f Dockerle.dist ^

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttp://container-solutions.com/2015/01/docker-latest-confusion/http://container-solutions.com/2015/01/docker-latest-confusion/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    9/14

    - 9 -

    S ha re  t h is 

    Codes h i p Gu ide

    then all your imae versions will be easily accessible fordeployment in the future.

    We can choose whether we want to use our own Docker

    Reistry or rely on Docker Hub. On Docker Hub, you can

    store public or private repositories of imaes. It’s also the

    first place people would look for your imaes (if you want

    anyone to look for them).

    Your own Docker Reistry on the other hand ives you

    full control over your imaes storae, performance, and

    security. More advanced setups miht combine both

    approaches.

    This way you can ta the new imae with an appropriate

    ta and push it to a public hub. Replace your_username

    and your_tag with actual values:

        P    U    S    H

     .    S    H

    # !/bin/sh

    docker tag hello-world:latest your_username/hello-world:your_tag

    docker push your_username/hello-world:your_tag

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttp://blog.codeship.com/running-secured-docker-registry-2-0/http://blog.codeship.com/running-secured-docker-registry-2-0/https://hub.docker.com/https://hub.docker.com/http://blog.codeship.com/running-secured-docker-registry-2-0/http://blog.codeship.com/running-secured-docker-registry-2-0/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    10/14

    - 10 -

    S ha re  t h is 

    Codes h i p Gu ide

    Continuously Delivered Containers

    Once we have our Docker imaes buildin pipeline

    workin and imaes nicely stashed in a repository, we

    definitely want to et our service deployed.

    How you deploy your applications depends on your

    infrastructure or cloud provider. A few cloud providers

    support Docker imaes in their APIs these days (e..,

    Amazon EC2 Container Service, Diital Ocean, or

    Giant Swarm). You can further leverae the power of

    containerized applications with resource abstraction tools

    like Apache Mesos (read more about runnin containers

    on Mesos) or Goole Kubernetes that let you deploy and

    manae containers in their own ways.

    In case of our Hello World example, deployin

    remotely means runnin the followin command

    remotely on a taret machine with Docker installed on it:

        D    E    P    L    O    Y .    S

        H

    # !/bin/sh

    docker stop hello-production

    docker run --rm -p 8000:80 --name hello-production hello-world

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttp://aws.amazon.com/documentation/ecs/https://www.digitalocean.com/features/one-click-apps/docker/http://docs.giantswarm.io/http://mesos.apache.org/http://container-solutions.com/2015/04/how-to-set-up-mesos-on-google-cloud-with-terraform/http://container-solutions.com/2015/04/how-to-set-up-mesos-on-google-cloud-with-terraform/http://kubernetes.io/http://kubernetes.io/http://container-solutions.com/2015/04/how-to-set-up-mesos-on-google-cloud-with-terraform/http://container-solutions.com/2015/04/how-to-set-up-mesos-on-google-cloud-with-terraform/http://mesos.apache.org/http://docs.giantswarm.io/https://www.digitalocean.com/features/one-click-apps/docker/http://aws.amazon.com/documentation/ecs/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    11/14

    - 11 -

    S ha re  t h is 

    Codes h i p Gu ide

    Beyond Continuous Delivery withDocker

    Usin containerized software does not inherently mean

    one is implementin microservices. However, containers

    enable this architectural pattern because they encourae

    developers to split their monoliths based on separation

    of concerns.

    Microservices also promote communication between

    containerized components over a plain network usin

    standardized and easily replaceable tubes. To learn

    more about microservices and why they miht be a

    ood architectural pattern for your software project, I

    recommend “Buildin Microservices“ by Sam Newman.

    A continuous delivery pipeline with containerized

    software also allows you to set up a new kind of testin

    environment; subsets of (micro)services are deployed

    in small clusters that represent the system under

    test runnin with some parts intentionally disabled or

    disconnected.

    Creation of such a matrix of deployments and

    prorammin aainst it has little to no additional costs

    in terms of a continuous interation time. It does have

    a dramatic impact on the stability and resilience of

    software in production. Such a testin system allows

    teams to et ready to deal with any kind of Chaos

    Monkey.

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttp://shop.oreilly.com/product/0636920033158.dohttps://github.com/Netflix/SimianArmy/wiki/Chaos-Monkeyhttps://github.com/Netflix/SimianArmy/wiki/Chaos-Monkeyhttps://github.com/Netflix/SimianArmy/wiki/Chaos-Monkeyhttps://github.com/Netflix/SimianArmy/wiki/Chaos-Monkeyhttp://shop.oreilly.com/product/0636920033158.dohttps://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    12/14

    - 12 -

    S ha re  t h is 

    Codes h i p Gu ide

        C    O

        N    T    I    N    U    O

        U    S

        D    E    L    I    V

        E    R    Y

      Automate Your Development Workflow with Docker

      Runnin a MEAN web application in Docker containers on AWS

      Runnin a Rails Development Environment in Docker

      Testin your Rails Application with Docker

        D    O

        C    K    E    R

      The Future is Containerized

      Container Operatin Systems Comparison

      Buildin a Minimal Docker Container for Ruby Apps

    Further Reading

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttp://blog.codeship.com/automate-your-dev-workflow-with-docker/http://blog.codeship.com/automate-your-dev-workflow-with-docker/http://blog.codeship.com/automate-your-dev-workflow-with-docker/http://blog.codeship.com/running-mean-web-application-docker-containers-aws/http://blog.codeship.com/running-mean-web-application-docker-containers-aws/http://blog.codeship.com/running-mean-web-application-docker-containers-aws/http://blog.codeship.com/running-rails-development-environment-docker/http://blog.codeship.com/running-rails-development-environment-docker/http://blog.codeship.com/running-rails-development-environment-docker/http://blog.codeship.com/testing-rails-application-docker/http://blog.codeship.com/testing-rails-application-docker/http://blog.codeship.com/testing-rails-application-docker/http://blog.codeship.com/the-future-is-containerized/http://blog.codeship.com/container-os-comparison/http://blog.codeship.com/container-os-comparison/http://blog.codeship.com/container-os-comparison/http://blog.codeship.com/build-minimal-docker-container-ruby-apps/http://blog.codeship.com/build-minimal-docker-container-ruby-apps/http://blog.codeship.com/build-minimal-docker-container-ruby-apps/http://blog.codeship.com/build-minimal-docker-container-ruby-apps/http://blog.codeship.com/container-os-comparison/http://blog.codeship.com/the-future-is-containerized/http://blog.codeship.com/testing-rails-application-docker/http://blog.codeship.com/running-rails-development-environment-docker/http://blog.codeship.com/running-rails-development-environment-docker/http://blog.codeship.com/running-mean-web-application-docker-containers-aws/http://blog.codeship.com/automate-your-dev-workflow-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    13/14

    - 13 -

    S ha re  t h is 

    Codes h i p Gu ide

        E    B    O

        O

        K

    Efciency in Development

    Workows. 

    Learn about Software Development for distributed

    teams and how to make them code efficiently.

    Download this eBook

    More Codeship Resources.

        E    B    O

        O

        K

    Automate your Development

    Workow with Docker. 

    Learn how to use Docker to nullify the issue ofinconsistent environment setups.

    Download this eBook

        E    B    O

        O

        K

    Orchestrate Containers withDocker Compose. 

    Learn how to use Docker Compose. We focus on

    how to orchestrate containers in development.

    Download this eBook

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/orchestrate-containers-with-docker-compose/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/automate-development-workflow-with-docker/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttp://resources.codeship.com/ebooks/efficiency-in-development-workflows/?utm_source=CodeshipeBook&utm_medium=referral&utm_campaign=cicddockerhttps://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker

  • 8/19/2019 Codeship Continuous Integration and Continuous Delivery With Docker

    14/14

    - 14 -

    S ha re  t h is 

    Codes h i p Gu ide

    About Codeship.

    Codeship is a hosted Continuous Interation and

    Delivery Platform that focuses on speed, security and

    customizability.

    Connect your GitHub and Bitbucket projects and

    Codeship will test and deploy your apps at every push.

    Create oranizations, teams and handle permissions to

    ensure smooth collaboration and speed up your testin

    10x with Codeship‘s ParallelCI pipelines.

    You can learn more about Codeship here.

     h t t ps://codes h i p.co m

    https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://codeship.com/?utm_source=CodeshipeBook&utm_medium=tweet&utm_campaign=cicddockerhttps://plus.google.com/share?url=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-dockerhttps://twitter.com/home?status=I%20just%20downloaded%20%40Codeship%27s%20eBook%20about%20Continuous%20Delivery%20with%20%23Docker:%20http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker/https://www.facebook.com/sharer/sharer.php/?u=http://resources.codeship.com/ebooks/continuous-integration-continuous-delivery-with-docker