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

Upload: others

Post on 24-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

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