patterns & antipatterns in docker image lifecycle
TRANSCRIPT
The Promotion Pyramid
Development builds
Dev Integration tests
Integr. tests
StagingPre-Prod
Prod
Frequency of builds
Build
/Dep
loy
time
Num
ber of binaries
Pipeline: Quality Gates and Visibility
Source: Agile ALM, Michael Hüttermann, Manning Publications Co.
What’s up with the gates?! - QA shouldn’t test dev images - non-QA’ed images shouldn't be staged - non-QA’ed, non-staged or dev images shouldn’t end up in production!
How can we support this?
https://host:8081/artifactory/docker-dev/busybox
https://host:8081/artifactory/docker-staging/busybox
https://host:8081/artifactory/docker-qa/busybox
https://host:8081/artifactory/docker-prod/busybox
“One registry per host isought to be enough for
anybody.”
https://www.reddit.com/r/theydidthemath/comments/1x37rx/request_how_much_alcohol_is_needed_to_get_a_whale
Virtual hosts/ports to the rescue
https://host:8081/artifactory/docker-dev/busybox
Context name
Virtual repository nameTag name
https://host:port/v2/busybox
server { listen 5001;
server_name 192.168.99.100; if ($http_x_forwarded_proto = '') { set $http_x_forwarded_proto $scheme; } rewrite ^/(v1|v2)/(.*) /artifactory/api/docker/docker-dev/$1/$2; … }}
WHAT DO WE WANT?
MINIMIZE THE NUMBER OF REPOS DOCKER INTERACT
WITH
HOW CAN WE DO IT?
VIRTUAL REPOSITORIES!
What We’ll DO? - Minimize number of repositories docker interacts with - deploy to virtual (backed by dev repository)
What We’ll DO? - Minimize number of repositories docker interacts with - deploy to virtual (backed by dev repository) - promote within artifactory
What We’ll DO? - Minimize number of repositories docker interacts with - deploy to virtual (backed by dev repository) - promote within artifactory- Resolve from virtual (production-ready images)
Virtual Repositories FTWdocker-dev-local
docker-prod-localdocker-virtual
Dev
docker-hub-remote
Docker Hub
resolve
resolve
resolve
resolve
resolve
Virtual Repositories FTWdocker-dev-local
docker-prod-localdocker-virtual
Dev
docker-hub-remote
Docker Hub
resolve
resolve
resolve
resolve
resolve
deploy
deploy
Virtual Repositories FTWdocker-dev-local
docker-prod-localdocker-virtual
Dev
docker-hub-remote
Docker Hub
resolve
resolve
resolve
resolve
resolve
deploy
deploy
promote
Virtual Repositories FTWdocker-dev-local
docker-prod-localdocker-virtual
Dev
docker-hub-remote
Docker Hub
resolve
resolve
resolve
resolve
resolve
deploy
deploy
promote
Prod
resolve
resolve
Minimal Framework build DockerfileFROM ubuntu:14.04MAINTAINER [email protected]
Application build Dockerfile
FROM yourorg-docker.jfrog.io/myorg/framework:latestMAINTAINER [email protected]
ADD https://yourorg.jfrog.io/java-release-local/…/app-[RELEASE].war /var/lib/tomcat7/webapps/app.war
?
Application build Dockerfile
FROM yourorg-docker.jfrog.io/myorg/framework:latestMAINTAINER [email protected]
ADD https://yourorg.jfrog.io/java-release-local/…/app-[RELEASE].war /var/lib/tomcat7/webapps/app.war
? ?
Application build Dockerfile
FROM yourorg-docker.jfrog.io/myorg/framework:latestMAINTAINER [email protected]
ADD https://yourorg.jfrog.io/java-release-local/…/app-[RELEASE].war /var/lib/tomcat7/webapps/app.war
? ?
???
End users have Docker installed
Don’t want to run/install docker-compose Or any other installer
Docker compose and docker client can introduce incompatibilities
The Solution- Create An “Installer” Image- Provide variables for:
- Where to pull from- Docker Daemon to use
- Have it run docker compose- Install onto Client’s Docker!
Installer’s run.sh Just run docker-compose with
the right command start, stop, up, down, restart…
Check calling script version compatibility!
app.sh (user script)
Set the repo to pull from
Set up script andapplication versions
Determine the docker daemon for docker-compose to use
Run the installer image
The installer patternDocker pulls and runs the
installer image
app.sh
Executesrun.sh
installer image
Runs docker-compose
run.sh
Pulls down and installs
micro-services
Docker daemon Docker registry
docker-compose
HIGH QUALITY(software and information) SPEED LOW COST
(automation)
Fast releases > Modular > Automation
Conclusions: Release Fast or Die!