Everything is a Docker image

Everything is a Docker image

2 min read

Ultimately Codefresh is a DevOps platform designed for containers and Kubernetes. The backbone of all of that is the Codefresh pipelines which provide Docker in Docker as a service. This has a lot of implications for how you build pipelines, support multiple languages and handle tooling.

Updated information: If you want to build and run Docker images in our pipeline see our dedicated guides and examples

Each step runs in it’s own container

When defining a custom step in Codefresh, you start by specifying which image you want to run. For example, what if we wanted to curl Slack to post a message?

slack_notify:
  image: tutum/curl
  commands:
    - curl -X POST --data-urlencode 'payload={"text":"Test slack integration via yaml"}' ${{SLACK_WEB_URL}}

This will take the curl image, load it into a fresh container and execute the command. That means that basically any Docker image is a direct plugin for the Codefresh pipeline.

You can spin up an entire composition

Going beyond just running an image, you can actually use the DinD service to spin up an instance of several images at once. For example, in this example, we spin up a demo application with Taurus, the performance testing suite to run tests against Blazemeter.

RunningPerformanceTests:
    title: Running Performance Tests
    type: composition
    composition:
      version: '2'
      services:
        aut:
          ports:
            - 5000
          image: 'containers101/demochat:master'
        mongo:
          image: mongo
    composition_candidates:
      cfintegration:
        image: 'r.cfcr.io/razielt77_github/razielt/taurus:master'
        environment:
          - CF_VOLUME_PATH=${{CF_VOLUME_PATH}}
          - TOKEN=${{TOKEN}}
          - TR_SCRIPT=${{TR_SCRIPT}} 
        volumes:
         - '${{CF_VOLUME_NAME}}:/codefresh/volume'
    add_flow_volume_to_composition: true

Keeping a persistent Volume

Each step in the pipeline is using it’s own container but we’re maintaining a persistent volume. This allows you to pass information between steps, utilize caching, etc. In this example, we’ll add JIRA information from a Codefresh pipeline.

Conclusion

To get started, create a free account, or checkout our documentation.

Ready to Get Started?
  • safer deployments
  • More frequent deployments
  • resilient deployments