codefresh + cloud 66 webinar: testing strategies for docker driven development

26
Testing Strategies for Docker Driven Development [email protected]

Upload: codefresh

Post on 13-Apr-2017

21 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Testing Strategies for Docker Driven Development

[email protected]

Page 2: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Testing Strategies for Docker Containers

Alexei Ledenev [email protected]

Page 3: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

About me…•@codefresh.io

•github.com/alexei-led/pumba

•#docker, #golang, #aws

•medium.com/@alexeiled

•@alexeiled

Page 4: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Why Docker

Portability

Speed

Configuration

Docker Hub (“App Store”)

Page 5: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Docker Architecture

Page 6: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Demo App & TestDemo App

Rest API server#golang

TestNewmanPostman scenario file#nodejs

Page 7: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

The “Naive” Approach

Page 8: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

# build demo app

$ go build -o .dist/demo -v

# run app and tests

$ .dist/demo &>/dev/null &

$ newman run -e test/local.env.json \

test/demo-rest-api-tests.postman.json

# build Docker demo image

$ docker build -t demo -f docker/Dockerfile.dist .

https://asciinema.org/a/100204

Page 9: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Benefits and Drawbacks

Familiar CI flow

Application portability

Smaller Docker image

• Non portable DEV environment

• Non portable TEST environment

Page 10: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

App & Test Container

Page 11: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development
Page 12: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

# build demo app & test container

$ docker build -t demo:apptest -f docker/Dockerfile.build.apptest .

# run tests

$ docker run -it --rm demo:apptest script/test.sh

# run app

$ docker run -d -p 10000:10000 demo:apptest demo

https://asciinema.org/a/100216

Page 13: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Benefits and Drawbacks

Simple CI flow

Application portability

Portable DEV environment

Portable TEST environment

• Bigger Docker image size

• Need to rebuild the whole image on code or test change

• Polluted Docker image

• Need to manage test results

Page 14: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Test Aware Container

Page 15: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development
Page 16: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

# build test aware Docker image$ docker build -t demo:testaware -f docker/Dockerfile.build.testaware .

# run tests$ docker run -it --rm demo:testaware

# get app layers from image $ APP_LAYER=$(docker history demo:testaware | \ grep -e ‘LABEL SPLIT=T’ | \ awk ‘{print $1}’)

# tag APP_LAYER and push it$ docker tag $APP_LAYER demo:app

# run demo app$ docker run -it --rm -p 10000:10000 --name demo demo:app

https://asciinema.org/a/100260

Page 17: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Benefits and Drawbacks

Application portability

Portable TEST and DEV environments

2 separate images

One Dockerfile

• Need to rebuild the whole image on code or test change

• Need some shell “magic” to create a clean APP image (non-Docker way)

Page 18: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

– Me :-)

“After trying multiple approaches, the following is the one that I can

recommend.”

Page 19: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Docker Automation FlowDocker automation CI/CD flow consists from multiple steps, like: build, scan, test, run,

deploy and others.Each step requires different tools, runtime, packages, data and configuration filesUse dedicated Docker container for every stepFor example:

Builder Container - use it to build your app. Docker container with compilers, linters, package managers and other dev tool.

Test Container(s) - user it to test your app. Docker container with testing tools, test scripts, runtimes and helper files and required packages.

App Container - the one you push/deploy. Docker container with application binary, runtime and required packages only.

Page 20: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development
Page 21: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

CI with Test Containers

Page 22: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

# build Build Container image$ docker build -t demo:builder -f docker/Dockerfile.builder .

# use Builder container to build the app$ docker run -it --rm \ -v $(pwd)/.dist:/go/src/app/.dist \ -e CGO_ENABLED=0 demo/builder go build -v -o .dist/demo

# build App Container image $ docker build -t demo:dist -f docker/Dockerfile.dist .

# build Test Container image$ docker build -t demo:test -f docker/Dockerfile.test .

# create common network for app and test$ docker network create mynet

# run demo app$ docker run -d --name demo --network mynet demo:dist

# run tests$ docker run -it --rm --name tests --network mynet demo:test \ newman run -e test/demo.env.json \ test/demo-rest-api-tests.postman.json

Page 23: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Benefits and Drawbacks

• Application portability• Portable DEV

environment• Build ANYWHERE• Portable TEST

environment• Test ANYWHERE• Small APP image• Fast builds

• Need an approach/tool to automate and orchestrate Docker build flow

• Bash, Ansible, …

• dobi, habitus, …

• Docker CI/CD service, like codefresh.io

Page 24: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Q&A

@alexeiled

Page 25: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

● Create your Codefresh account at www.codefresh.io

● Additional info on Containers & Docker Driven Development - www.codefresh.io/blog & www.codefresh.io/container-academy/

● Twitter - @codefresh

● Questions for sales - [email protected]

● Create your Cloud 66 account at www.cloud66.com/

● Twitter - @cloud66

Next Steps

Page 26: Codefresh + Cloud 66 webinar: Testing Strategies for Docker Driven Development

Thank You!