SlideShare ist ein Scribd-Unternehmen logo
1 von 108
Downloaden Sie, um offline zu lesen
Package your

Java EE applications

using

Docker and Kubernetes

Arun Gupta, @arungupta
Red Hat
Arun Gupta
Director, Developer Advocacy
@arungupta
blog.arungupta.me
arungupta@redhat.com
What is Docker?
What is Docker?
• Open source project and company











What is Docker?
• Open source project and company











• Used to create containers for software applications
What is Docker?
• Open source project and company











• Used to create containers for software applications
• Package Once Deploy Anywhere (PODA)
Advantages
Advantages
• Faster deployments
Advantages
• Faster deployments
• Isolation
Advantages
• Faster deployments
• Isolation
• Portability - “it works
on my machine”
Advantages
• Faster deployments
• Isolation
• Portability - “it works
on my machine”
• Snapshotting
Advantages
• Faster deployments
• Isolation
• Portability - “it works
on my machine”
• Snapshotting
• Security sandbox
Advantages
• Faster deployments
• Isolation
• Portability - “it works
on my machine”
• Snapshotting
• Security sandbox
• Limit resource usage
Advantages
• Faster deployments
• Isolation
• Portability - “it works
on my machine”
• Snapshotting
• Security sandbox
• Limit resource usage
• Simplified dependency
Advantages
• Faster deployments
• Isolation
• Portability - “it works
on my machine”
• Snapshotting
• Security sandbox
• Limit resource usage
• Simplified dependency
• Sharing
Underlying Technology
Underlying Technology
• Written in Go

Underlying Technology
• Written in Go

• Uses several Linux features
Underlying Technology
• Written in Go

• Uses several Linux features
• Namespaces to provide isolation
Underlying Technology
• Written in Go

• Uses several Linux features
• Namespaces to provide isolation
• Control groups to share/limit hardware resources
Underlying Technology
• Written in Go

• Uses several Linux features
• Namespaces to provide isolation
• Control groups to share/limit hardware resources
• Union File System makes it light and fast
Underlying Technology
• Written in Go

• Uses several Linux features
• Namespaces to provide isolation
• Control groups to share/limit hardware resources
• Union File System makes it light and fast
• libcontainer defines container format
Is it only Linux?
Is it only Linux?
• Natively supported in Linux
Is it only Linux?
• Natively supported in Linux
• Can be installed on Mac or Windows using
boot2docker
Is it only Linux?
• Natively supported in Linux
• Can be installed on Mac or Windows using
boot2docker
• Tiny Core Linux VM
• Image defined in text-based Dockerfile
• Image defined in text-based Dockerfile
• List of commands to build the image







FROM fedora:latest



CMD echo “Hello world”
• Image defined in text-based Dockerfile
• List of commands to build the image







• docker build or pull
FROM fedora:latest



CMD echo “Hello world”
• Images shared using registry
• Images shared using registry
• Docker Hub is public SaaS













• Images shared using registry
• Docker Hub is public SaaS













• Private registries can be setup inside firewall
• Images shared using registry
• Docker Hub is public SaaS













• Private registries can be setup inside firewall
• docker push or pull <IMAGE_ID>
• Container built from the image













• Container built from the image













• Runtime representation of the image
• Container built from the image













• Runtime representation of the image
• Self contained execution environment
• Container built from the image













• Runtime representation of the image
• Self contained execution environment
• docker run <IMAGE_ID>
Docker commands
• docker ps: List running containers
• docker stop: Stop a running container
• docker rm: Remove a running container
• docker rmi: Remove an image
• …
https://docs.docker.com/reference/commandline/cli/
Docker

Hub

Docker

Host

DaemonDocker

Client
Docker Workflow
Docker

Hub

Docker

Host

DaemonDocker

Client
docker run <image>
docker …
Docker Workflow
Docker

Hub

Docker

Host

DaemonDocker

Client
docker run <image>
docker …
Docker Workflow
Docker

Hub

Image 1
Image 2
Image 3
Image M
Docker

Host

DaemonDocker

Client
docker run <image>
docker …
Docker Workflow
Docker

Hub

Image 1
Image 2
Image 3
Image M
Docker

Host

Image 1
Image 2
Image 3
Image N
DaemonDocker

Client
docker run <image>
docker …
Docker Workflow
Docker

Hub

Image 1
Image 2
Image 3
Image M
Docker

Host

Image 1
Image 2
Image 3
Image N
Daemon
Container 1
Container 2
Container O
Docker

Client
docker run <image>
docker …
Docker Workflow
Recipe #1.1
FROM jboss/wildfly
RUN curl -L https://github.com/javaee-samples/javaee7-hol/raw/master/solution/
movieplex7-1.0-SNAPSHOT.war -o /opt/jboss/wildfly/standalone/deployments/
movieplex7-1.0-SNAPSHOT.war
docker run -it -p 8080:8080 arungupta/javaee7-hol
Host

Application
Server
Database
Recipe #1.2
Host

Application
Server
Database
http://blog.arungupta.me/wildfly-javaee7-mysql-link-two-docker-container-techtip65/
data-source add --name=mysqlDS --driver-name=mysql --jndi-name=java:jboss/
datasources/ExampleMySQLDS --connection-url=jdbc:mysql://$DB_PORT_3306_TCP_ADDR:
$DB_PORT_3306_TCP_PORT/sample?useUnicode=true&amp;characterEncoding=UTF-8 --
user-name=mysql --password=mysql --use-ccm=false --max-pool-size=25 --blocking-
timeout-wait-millis=5000 --enabled=true
Recipe #1.3
Host

Application
Server
Database
http://blog.arungupta.me/docker-orchestration-fig-techtip67/
Recipe #1.4
Host

Application
Server
http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/
Host

Database
Recipe #1.4
Host

Application
Server
http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/
Host

Database
Recipe #1.4
Host

Application
Server
http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/
Host

Database
Recipe #1.4
Host

Application
Server
http://blog.arungupta.me/docker-container-linking-across-multiple-hosts-techtip69/
Host

Database
Arquillian Cube
• Controls the lifecycle of Docker images as part of
test cycle - automatically or manually
• Uses Docker REST API to talk to container
• Talk using WildFly remote adapter (in container)
• Try it out
http://blog.arungupta.me/run-javaee-tests-wildfly-docker-arquillian-cube/
Docker: Pros and Cons
Docker: Pros and Cons
• PROS
• Extreme application portability
• Very easy to create and work with derivative
• Fast boot on containers
Docker: Pros and Cons
• PROS
• Extreme application portability
• Very easy to create and work with derivative
• Fast boot on containers
• CONS
• Host-centric solution
• No higher-level provisioning
• No usage tracking/reporting
Application Operating
Environment
Kubernetes
Kubernetes
• Open source orchestration system for Docker
containers
Kubernetes
• Open source orchestration system for Docker
containers
• Provide declarative primitives for the “desired state”
• Self-healing
• Auto-restarting
• Schedule across hosts
• Replicating
Concepts
Concepts
• Pods: collocated group of
Docker containers that
share an IP and storage
volume
Docker
Pod 1 Pod 2
C1 C2 C3
Concepts
• Pods: collocated group of
Docker containers that
share an IP and storage
volume
• Service: Single, stable
name for a set of pods, also
acts as LB
Docker
Pod 1 Pod 2
C1 C2 C3
Pod 1
JBoss
Pod 2
JBoss
Service “web”
port 8080 port 8080
Concepts
• Pods: collocated group of
Docker containers that
share an IP and storage
volume
• Service: Single, stable
name for a set of pods, also
acts as LB
• Replication Controller:
manages the lifecycle of
pods and ensures specified
number are running
Docker
Pod 1 Pod 2
C1 C2 C3
Pod 1
JBoss
Pod 2
JBoss
Service “web”
port 8080 port 8080
Concepts
• Pods: collocated group of
Docker containers that
share an IP and storage
volume
• Service: Single, stable
name for a set of pods, also
acts as LB
• Replication Controller:
manages the lifecycle of
pods and ensures specified
number are running
• Label: used to organize
and select group of objects
Docker
Pod 1 Pod 2
C1 C2 C3
Pod 1
JBoss
Pod 2
JBoss
Service “web”
port 8080 port 8080
kubectl
kubectl
• Controls the Kubernetes cluster manager
kubectl
• Controls the Kubernetes cluster manager
• kubectl get pods or minions
kubectl
• Controls the Kubernetes cluster manager
• kubectl get pods or minions
• kubectl create -f <filename>
kubectl
• Controls the Kubernetes cluster manager
• kubectl get pods or minions
• kubectl create -f <filename>
• kubectl update or delete
kubectl
• Controls the Kubernetes cluster manager
• kubectl get pods or minions
• kubectl create -f <filename>
• kubectl update or delete
• kubectl resize —replicas=3
replicationcontrollers <name>
export KUBERNETES_PROVIDER=vagrant
./cluster/kube-up.sh
Mac OS X
Kubernetes (Vagrant)
Master Minion
Recipe #2.1
Mac OS X
Kubernetes (Vagrant)
Master
Minion
Pod
Docker

(WildFly)
http://blog.arungupta.me/javaee7-wildfly-kubernetes-mac-vagrant/
Services
• Abstract a set of pods as a single IP and port
• Simple TCP/UDP load balancing
• Creates environment variables in other pods
• Like “Docker links” but across hosts
• Stable endpoint for pods to reference
• Allows list of pods to change dynamically
Recipe #2.2
Minion
Pod
Docker

(WildFly)
Pod
Docker

(MySQL)
MySQL
Service
http://blog.arungupta.me/mysql-kubernetes-service-access-wildfly-pod-techtip72/
Minion 2
Recipe #2.3
Minion 1
Pod
Docker

(WildFly)
Pod
Docker

(MySQL)
MySQL
Service
Replication Controller
Replication Controller
• Ensures specified number of pod “replicas” are
running
Replication Controller
• Ensures specified number of pod “replicas” are
running
• Pod templates are cookie cutters
Replication Controller
• Ensures specified number of pod “replicas” are
running
• Pod templates are cookie cutters
• Rescheduling
Replication Controller
• Ensures specified number of pod “replicas” are
running
• Pod templates are cookie cutters
• Rescheduling
• Manual or auto-scale replicas
Replication Controller
• Ensures specified number of pod “replicas” are
running
• Pod templates are cookie cutters
• Rescheduling
• Manual or auto-scale replicas
• Rolling updates
Recipe #2.4
Recipe #2.4
Recipe #2.4
Minion 2
Minion 1
Pod
Docker

(WildFly)
Pod
Docker

(MySQL)
MySQL
Service
Pod
Docker

(WildFly)
WildFly
Service
Recipe #2.4
Minion 2
Minion 1
Pod
Docker

(WildFly)
Pod
Docker

(MySQL)
MySQL
Service
Pod
Docker

(WildFly)
WildFly
Service
Kubernetes: Pros and Cons
• PROS
• Manage related Docker containers as a unit
• Container communication across hosts
• Availability and scalability through automated deployment
and monitoring of pods and their replicas, across hosts
Kubernetes: Pros and Cons
• CONS
• Lifecycle of applications - build, deploy, manage, promote
• Port existing source code to run in Kubernetes
• DevOps: Dev -> Test -> Production
• No multi-tenancy
• On-premise (available on GCE)
• Assumes inter-pod networking as part of infrastructure
• Requires explicit load balancer
Pod 7
ActiveMQ
Pod 8
ActiveMQ
“mq”
port 8161 port 8161
Pod 1
Apache
Pod 2
Apache
“web”
port 80 port 80
Pod 5
MySQL
Pod 6
MySQL
“db”
port 3306 port 3306
Pod 3
JBoss
Pod 4
JBoss
“javaee”
port 8080 port 8080
Pod 7
ActiveMQ
Pod 8
ActiveMQ
“mq”
port 8161 port 8161
Pod 1
Apache
Pod 2
Apache
“web”
port 80 port 80
Pod 5
MySQL
Pod 6
MySQL
“db”
port 3306 port 3306
Pod 3
JBoss
Pod 4
JBoss
“javaee”
port 8080 port 8080
Container Host
Container
Cluster Management
User Experience
OpenShift 3 Features
OpenShift 3 Features
• Push to production - full DevOps
OpenShift 3 Features
• Push to production - full DevOps
• Client tools for building web applications
OpenShift 3 Features
• Push to production - full DevOps
• Client tools for building web applications
• Centralized administration and management of
application component libraries
OpenShift 3 Features
• Push to production - full DevOps
• Client tools for building web applications
• Centralized administration and management of
application component libraries
• Team and user isolation of containers, builds, and
network communication in an easy multi-tenancy
system
Recipe #3.1
• Start OpenShift as Docker container





• Or run natively
• Use osc (OpenShift Client) instead of kubectl
with Kubernetes configuration file
Recipe #3.2
• (Alpha) tools generate project JSON configuration
file that provide build/deployment
40
Recipe #3.3
• Integration with JBoss Developer Studio (cooking)
Summary
• Container runtime and image distribution
• Roll your own solutions for everything
• Runtime and operational management of containers

• Lifecycle of applications - build, deploy, manage, promote
• Manage tens of thousands of applications with teams
References
• blog.arungupta.me/topics/containers/
• github.com/openshift/origin

Weitere ähnliche Inhalte

Mehr von IndicThreads

Scrap Your MapReduce - Apache Spark
 Scrap Your MapReduce - Apache Spark Scrap Your MapReduce - Apache Spark
Scrap Your MapReduce - Apache Spark
IndicThreads
 
Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
 Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
IndicThreads
 
Unraveling OpenStack Clouds
 Unraveling OpenStack Clouds Unraveling OpenStack Clouds
Unraveling OpenStack Clouds
IndicThreads
 

Mehr von IndicThreads (20)

Iot secure connected devices indicthreads
Iot secure connected devices indicthreadsIot secure connected devices indicthreads
Iot secure connected devices indicthreads
 
Real world IoT for enterprises
Real world IoT for enterprisesReal world IoT for enterprises
Real world IoT for enterprises
 
IoT testing and quality assurance indicthreads
IoT testing and quality assurance indicthreadsIoT testing and quality assurance indicthreads
IoT testing and quality assurance indicthreads
 
Functional Programming Past Present Future
Functional Programming Past Present FutureFunctional Programming Past Present Future
Functional Programming Past Present Future
 
Harnessing the Power of Java 8 Streams
Harnessing the Power of Java 8 Streams Harnessing the Power of Java 8 Streams
Harnessing the Power of Java 8 Streams
 
Building & scaling a live streaming mobile platform - Gr8 road to fame
Building & scaling a live streaming mobile platform - Gr8 road to fameBuilding & scaling a live streaming mobile platform - Gr8 road to fame
Building & scaling a live streaming mobile platform - Gr8 road to fame
 
Internet of things architecture perspective - IndicThreads Conference
Internet of things architecture perspective - IndicThreads ConferenceInternet of things architecture perspective - IndicThreads Conference
Internet of things architecture perspective - IndicThreads Conference
 
Cars and Computers: Building a Java Carputer
 Cars and Computers: Building a Java Carputer Cars and Computers: Building a Java Carputer
Cars and Computers: Building a Java Carputer
 
Scrap Your MapReduce - Apache Spark
 Scrap Your MapReduce - Apache Spark Scrap Your MapReduce - Apache Spark
Scrap Your MapReduce - Apache Spark
 
Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
 Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
 
Speed up your build pipeline for faster feedback
Speed up your build pipeline for faster feedbackSpeed up your build pipeline for faster feedback
Speed up your build pipeline for faster feedback
 
Unraveling OpenStack Clouds
 Unraveling OpenStack Clouds Unraveling OpenStack Clouds
Unraveling OpenStack Clouds
 
Digital Transformation of the Enterprise. What IT leaders need to know!
Digital Transformation of the Enterprise. What IT  leaders need to know!Digital Transformation of the Enterprise. What IT  leaders need to know!
Digital Transformation of the Enterprise. What IT leaders need to know!
 
Architectural Considerations For Complex Mobile And Web Applications
 Architectural Considerations For Complex Mobile And Web Applications Architectural Considerations For Complex Mobile And Web Applications
Architectural Considerations For Complex Mobile And Web Applications
 
Functional Programming With Lambdas and Streams in JDK8
 Functional Programming With Lambdas and Streams in JDK8 Functional Programming With Lambdas and Streams in JDK8
Functional Programming With Lambdas and Streams in JDK8
 
Changing application demands: What developers need to know
Changing application demands: What developers need to knowChanging application demands: What developers need to know
Changing application demands: What developers need to know
 
Data Privacy using IoTs in Smart Cities Project
 Data Privacy using IoTs in Smart Cities Project Data Privacy using IoTs in Smart Cities Project
Data Privacy using IoTs in Smart Cities Project
 
Big Data Analytics using Amazon Elastic MapReduce and Amazon Redshift
 Big Data Analytics using Amazon Elastic MapReduce and Amazon Redshift Big Data Analytics using Amazon Elastic MapReduce and Amazon Redshift
Big Data Analytics using Amazon Elastic MapReduce and Amazon Redshift
 
Indic threads pune12-grammar of graphicsa new approach to visualization-karan
Indic threads pune12-grammar of graphicsa new approach to visualization-karanIndic threads pune12-grammar of graphicsa new approach to visualization-karan
Indic threads pune12-grammar of graphicsa new approach to visualization-karan
 
Indic threads pune12-java ee 7 platformsimplification html5
Indic threads pune12-java ee 7 platformsimplification html5Indic threads pune12-java ee 7 platformsimplification html5
Indic threads pune12-java ee 7 platformsimplification html5
 

Kürzlich hochgeladen

CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
anilsa9823
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Kürzlich hochgeladen (20)

Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 

Package Java EE applications using Docker