Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD...

60
Testen mit Containern Docker für Integrationstests Stefan Hildebrandt consulting.hildebrandt.tk

Transcript of Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD...

Page 1: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

Testen mit ContainernDocker für Integrationstests

Stefan Hildebrandtconsulting.hildebrandt.tk

Page 2: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

TESTEN MIT CONTAINERNDOCKER FÜR INTEGRATIONSTESTS

/ Stefan Hildebrandt @hildebrandttk

Page 3: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

VORTRAG MIT ALLEN BILDERN UNTERCONSULTING.HILDEBRANDT.TK/VORTRAEGE.HTM

0

Page 4: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

PERFECT DEVELOPMENTAND TEST

ENVIRONMENT?

Page 5: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

NOT SHARED!developerstestersci-jobs

Page 6: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

EASY SETUP

Page 7: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

FULLY DEFINED

Page 8: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

FAST STARTUP

Page 9: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

GOOD TURNAROUNDdeveloperstesters

Page 10: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

LOW MAINTENANCE

Page 11: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

FLEXIBLE SIZINGAs much as neededas little as possible

Page 12: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

IN SYNC WITH SOURCE CODE

Page 13: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

DO YOU KNOW DOCKER ?

Page 14: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

USEFUL DOCKERFEATURES

Page 15: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

CONTAINERno virtual machine -> no extra kernelno own init services (syslog, network...)process separation (linux process groups)own network (bridge device, iptables)very low overhead

Page 16: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

DOCKER HOSTlocalhostvirtual machineremote host (computing center / cloud service)

Page 17: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

IMAGESincremental layersreuse of layersnametag

Page 18: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

REGISTRYcentral repository for imagespublic

privatereference impl. /

: Distributed load/store

Docker Hub

V1 V2Docker Hub EnterpriseArtifactorydogestry

Page 19: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

IMAGES COMPRESSIONregistry: compressednetwork transfer: compresseddocker host: unpacked

Page 20: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

DOCKER NETWORKbriptablesNAT

Page 21: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

PORT MAPPINGimages defines possible portsbinding on container creationsyntax: docker -p <HOST-Port>:<CONTAINER-Port>

Page 22: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

INTER CONTAINER COMMUNICATIONlinks

extra entries within /etc/hostsdefinition on container creationsyntax: docker --link <other-container-name>:<alias-within-container>

Page 23: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

SHARED DIRECTORIESnative (bind) mounthigh performanceimage defines possible mount pointsbinding on container creationsyntax: docker -v <HOST-PATH>:<CONTAINER-PATH>

Page 24: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

DATA ONLY CONTAINERcontainer used by other(s) for data storagesyntax: docker --volumes-from <DATA-CONTAINER>

Page 25: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

ENVIRONMENT PARAMETERSimage defines possible environment variablesdefinition on container creationsyntax: docker -e "deep=purple"

Page 26: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

THAT'S A BIT MUCH!

Page 27: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

DOCKER-COMPOSEdefinition of

runtime parametersbuild parameters

live cycle commandsbuildstart, up, kill, stoprm

for full environments

Page 28: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

DEVELOPMENT WITHDOCKER

Page 29: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

APPLICATION UNDER DEVELOPMENT

Page 30: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

REMOTE DEPLOYMENT TO CONTAINER➚ fast setup➚ easy updates➘ remote deployment➘ remote debugging➘ less ide support

Page 31: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

DOCKER BUILD DEPLOYMENT➚ fast setup➚ easy updates➚ defined deployment➘ remote deployment➘ remote debugging➘ less ide support➘ bad turnaround

Page 32: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

DOUBLE CHECK REQUIRED TIMES AND BENEFIT FORSetupBuildDeploymentRoundtripDebugging

Page 33: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

APPLICATION UNDER TESTarquillian tests: prefer embedded containersif not suitable: use same checklist as before

Page 34: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

SUPPORT SYSTEMSrelational databasesnosql databasescentralized logging...

Page 35: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

INTEGRATION TEST ENVIRONMENTperipheral systemtest double systemsruntime for test toolspre defined test datahint: use only tagged images!hint: commit and push containers after failed test-run

Page 36: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

PERIPHERAL SYSTEMbest case: add existing image to docker-composecreate ci job to build tagged application imageexample: docker-petclinic

Page 37: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

TEST DOUBLE SYSTEMSsimple, self developed systems

Java EERailsGrailswhat ever

soap ui dummy ($)central $$$ systems

could be proxied with additional credentials, routes, ...don't forget the versions!!!

spring bootdropwizard

Page 38: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

PRE DEFINED TEST DATAextra layer on system base containerautomated creationrepeatable builddon't use dump filesput data to a location within container!

easy distributionfast startupfast rollback

Page 39: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

JAILERdefined database model

extraction from existing schemadefined-by-hand

extraction of full entitiescustom selects, obfuscating, ...

Page 40: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

COPY PRODUCTION (NEAR) DATABASEreal test dataobfuscatereduce to minimumautomate

Page 41: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

MYSQLstart mysqld within containercreate tables

mysqldump --no-data <SOURCE_DB>| mysql<TARGET_DB>

select and copy dataSET FOREIGN_KEY_CHECKS=0;mysql -e "<QUERY>" <SOURCE_DB> | mysql<TARGET_DB>SET FOREIGN_KEY_CHECKS=1;

stop mysqld within container

Page 42: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

ORACLEstart oracle-xe within containercreate db-linkcopy tablescopy datacopy constraints, views, triggers, ...drop db-linkstop oracle-xeexample

Page 43: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

DISTRIBUTE CONTAINERtag with repository-urldocker push <FULL-TAG>docker pull <FULL-TAG>example

Page 44: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

RUN CONTAINERexamples

pure dockerdocker-compose

Page 45: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

MAVENround about dozen plugins

BuildPublishrun/startfine grained configuration

rhuss/docker-maven-plugin

Page 46: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

GRADLEvariable-definitions within "Dockerfile"'slinked multi-container-buildsput maven-artifacts into the container

Page 47: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

GRADLE DOCKER PLUGIN BY MATTHIAS GRÜTERuses des docker-cli-client or fokus on building containerssimplebuggy, some open pull requests on github -> needs a newmasterExamples

docker-java

Page 48: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

GRADLE DOCKER PLUGIN BY BENJAMIN MUSCHKOsupports only many tasks for creating, tagging, deleting and pushing imagesfor deleting on repositories toomore complex syntax for those tasks

docker-java

Page 49: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

ARQUILLIAN-CUBEawaitreuse running containerExample arquillan.xml

Page 50: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

DATABASE MIGRATION

Page 51: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

TYPICAL TOOLSflywayliquibasedbdeploy

Page 52: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

EXECUTION TIMEbuild-time-provisionadditional startup-provision

Page 53: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

USECASESdatabase migrationtesting database migrationadd/modify testdata

Page 55: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

CONCLUSIONS

Page 56: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

PROvery fasteasy distributioneasy handling for users

Page 57: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

REQUIREMENTSlinuxdisc spacedisc speednetwork performance

Page 58: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

ISSUESProduction Ready Registrycleanupchmod 755 run.sh && ./run.sh --> permission denied withAUFSDownload from 127.0.0.1 without authentication

Page 59: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...
Page 60: Testen mit Containerndevelopers testers ci-jobs. EASY SETUP. FULLY DEFINED. FAST STARTUP. GOOD TURNAROUND developers testers. LOW MAINTENANCE. FLEXIBLE SIZING As much as needed ...

STEFAN HILDEBRANDT - CONSULTING.HILDEBRANDT.TKBeratung, Coaching und ProjektunterstützungJava EEBuildsysteme gradle und maven/ant-MigrationTestautomatisierungCoach in agilen ProjektenDevOps