63
Brought to you by Henryk Konsek Containerize! Between Docker and Jube

Containerize! Between Docker and Jube

Embed Size (px)

Citation preview

Page 1: Containerize! Between Docker and Jube

Brought to you by Henryk Konsek

Containerize!Between Docker and Jube

Page 2: Containerize! Between Docker and Jube

@hekonsek

Page 3: Containerize! Between Docker and Jube

● Docker● Kubernetes● OpenShift● Fabric8● Jube

This talk

Page 4: Containerize! Between Docker and Jube

Server for running and managing Linux containers.

What is...

Page 5: Containerize! Between Docker and Jube

Operating-system-level virtualization.

What are Linux containers?

Page 6: Containerize! Between Docker and Jube

chroot on steroids + some kernel magic

What are Linux containers?

Page 7: Containerize! Between Docker and Jube

● slooooooow● gigantic images ● aggressive resource allocation ● bad API

Why not regular virtualization?

Page 8: Containerize! Between Docker and Jube

Container is the running image.

Key concepts

● image (immutable, no state)● container (mutable, has state)

Page 9: Containerize! Between Docker and Jube

Container is the running image.

Key concepts

Page 10: Containerize! Between Docker and Jube

Archived filesystem + metadata.

Docker image

Page 11: Containerize! Between Docker and Jube

Commands.

Docker awesomeness #1

Page 12: Containerize! Between Docker and Jube

Layers.

Docker awesomeness #2

WAR

Tomcat

JRE

Ubuntu base

Page 13: Containerize! Between Docker and Jube

Registries.

Docker awesomeness #3

Page 14: Containerize! Between Docker and Jube

Build once. Deploy everywhere!

Docker awesomeness #4

Page 15: Containerize! Between Docker and Jube

Immutable deployment. Use ENV variable to the container.

Docker awesomeness #4

Page 16: Containerize! Between Docker and Jube

“Recipes” for the new images.

Dockerfiles

FROM ubuntuEXPOSE 8080RUN apt-get install javaRUN mkdir /jarsADD target/app.jar /jars/CMD ["java", "-jar", "/jars/app.jar"]]

Page 17: Containerize! Between Docker and Jube

Create the new image

$ docker build -t com.me/app:1.0 .$ docker run -t com.me/app:1.0]

Page 18: Containerize! Between Docker and Jube

Let’s create the production-grade container!

Demo!

FROM ubuntuRUN apt-get update -qqyRUN apt-get install -qqy cowsayENTRYPOINT ["/usr/games/cowsay"]CMD ["Hello Docker!"]

Page 19: Containerize! Between Docker and Jube

Docker Maven plugin by Roland ‘Jolokia’ Huß

How can I put a fresh jar into an image?

Page 20: Containerize! Between Docker and Jube

How can I put a fresh jar into an image?

<image> <name>${project.artifactId}:${project.version}</name> <build> <from>hekonsek/fatjar:0.0.10-SNAPSHOT</from> <assemblyDescriptorRef>artifact</assemblyDescriptorRef> <exportDir>/jars</exportDir> </build> </image>

mvn docker:buid docker:push

Page 21: Containerize! Between Docker and Jube

Provided by the database community/vendor.

How can I get database image?

docker run -d -p 27017:27017 --name mongo mongo]

Page 22: Containerize! Between Docker and Jube

Yes. That’s all I can say ;) .

Any Red Hat customers using Docker in production?

Page 23: Containerize! Between Docker and Jube

The platform to scale Docker horizontally.

Kubernetes

by...

Page 24: Containerize! Between Docker and Jube

You can start many containers with your server Docker.

Why scale Docker?

Page 25: Containerize! Between Docker and Jube

But at some point you have to add more physical machines.

Why scale Docker?

Page 26: Containerize! Between Docker and Jube

Now networking between these containers becomes a challenge :( .

Why scale Docker?

Page 27: Containerize! Between Docker and Jube

High availability - single Docker server is SPOF.

Why scale Docker?

Page 28: Containerize! Between Docker and Jube

Helps you to keep your scaled Docker stuff together.

Kubernetes

Page 29: Containerize! Between Docker and Jube

Install and admin it yourself. Or...

Where can I find Kubernetes?

Page 30: Containerize! Between Docker and Jube

Where can I find Kubernetes?

- Red Hat Atomic- Red Hat Linux 7.1- CoreOS Linux- OpenShift 3- GKE (Google Container Engine)- Microsoft Azure- All the major cloud providers (soon)

Page 31: Containerize! Between Docker and Jube

- REST API- etcd key/value store- controller manager server

Kubernetes architecture - master node

Page 32: Containerize! Between Docker and Jube

- Docker server- kubelet- network proxy

Kubernetes architecture - minion node

Page 33: Containerize! Between Docker and Jube

Groups of containers running at the same physical machine.

Pod - unit of deployment

Page 34: Containerize! Between Docker and Jube

Kubernetes guarantees all or nothing deployment and execution of pods.

Pod - atomic unit of deployment

Page 35: Containerize! Between Docker and Jube

All containers within the pod can access the same volumes.

Pod nodes == shared disk

Page 36: Containerize! Between Docker and Jube

Pods uses direct connections for the intra-pod communication.

Pod - internal communication

Page 37: Containerize! Between Docker and Jube

Pods use network proxy for the inter-pod communication.

Pod - external communication

Page 38: Containerize! Between Docker and Jube

The network proxy

Page 39: Containerize! Between Docker and Jube

Guarantees N-instances of pods running at the same time.

Replication controller

Page 40: Containerize! Between Docker and Jube

Starts missing instances of the pods.

Replication controller

Page 41: Containerize! Between Docker and Jube

Performs health checks. Can kill and restart failing nodes.

Replication controller

Page 42: Containerize! Between Docker and Jube

In the Kubernetes world, starting the server is not human responsibility anymore! How cool is that?

Replication controller

Page 43: Containerize! Between Docker and Jube

The typical micoservices developer.

Services

Page 44: Containerize! Between Docker and Jube

Can we do better than Eureka?

How to discover the service?

Page 45: Containerize! Between Docker and Jube

Try to imagine something simpler.

Services coordinates == environment variables

String host = System.getenv("MONGO_SERVICE_DB_HOST");String port = System.getenv("MONGO_SERVICE_DB_PORT");Mongo mongo = new Mongo(host, Integer.parseInt(port));

Page 46: Containerize! Between Docker and Jube

Kubernetes + something extra.

OpenShift 3 == Cool PaaS

Page 47: Containerize! Between Docker and Jube

- Enterprise (private cloud)- On-Line (public cloud)- Origin (community project)

OpenShift 3 types

Page 48: Containerize! Between Docker and Jube

You can install OS Origin on your local machine as a Docker container.

OpenShift 3

Page 49: Containerize! Between Docker and Jube

- access external services using single URL- HAproxy instance bound to the services- TLS/SSL scope rules

OpenShift 3 - routing

Page 50: Containerize! Between Docker and Jube

Local (docker-based) cloud + Docker images + Kubernetes =smooth transition from dev to the production

OpenShift 3

Page 51: Containerize! Between Docker and Jube

OpenShift provides user groups based on the Kubernetes namespaces.

Multi-tenancy

Page 52: Containerize! Between Docker and Jube

OpenShift comes with the CI server that can build and deploy the containers for you.

Build & deploy pipeline

Page 53: Containerize! Between Docker and Jube

Off-the-shelf microservices!

OpenShift marketplace

Page 54: Containerize! Between Docker and Jube

Dev (and Ops) extras on the top of the Kubernetes.

Fabric8

Page 55: Containerize! Between Docker and Jube

Base examples you can use as templates for docker containers.

Value added by Fabric8 - quickstarts

Page 56: Containerize! Between Docker and Jube

Maven plugins making it easier to deploy Docker images into Kubernetes.

Value added by Fabric8 - developer tooling

Page 57: Containerize! Between Docker and Jube

Value added by Fabric8 - centralized logging

Page 58: Containerize! Between Docker and Jube

- CDI extension for Kubernetes- Kubernetes API client for Java- Spring Boot Kubernetes integration- Kubernetes JUnit goodies

Value added by Fabric8 - extra libraries

Page 59: Containerize! Between Docker and Jube

Value added by Fabric8 - fancy web UI

Page 60: Containerize! Between Docker and Jube

Pure-Java implementation of the Kubernetes API (no Docker here!)

Jube

Page 61: Containerize! Between Docker and Jube

Why Jube?

- your VPS doesn’t support Docker- your operating system doesn’t support Docker/Kubernetes- you’re not operational ready to go into the production with

Docker

Page 62: Containerize! Between Docker and Jube

Jube architecture

Page 63: Containerize! Between Docker and Jube

Demo!

CowSay and MongoDB in Kubernetes. How cool is that?