Pods consist of one or more containers
Containers in a pod share the network namespace
Pods are the smallest unit of deployment in Kubernetes
Containers in a pod behave like the same host
They can talk to each other using localhost
Docker does not handle pods natively
–
Create a pod:
docker run --name pod \
--detach \
alpine \
sh -c 'while true; do sleep 10; done'
Add a registry:
docker run --name registry \
--detach \
--pid container:pod \
--network container:pod \
registry:2
–
Add Docker-in-Docker:
docker run --name dockerd \
--detach \
--pid container:pod \
--network container:pod \
--privileged \
docker:stable-dind \
dockerd \
--host=tcp://0.0.0.0:2375
Using the pod:
docker run --interactive --tty \
--pid container:pod \
--network container:pod \
docker:stable
–
Share network namespace across services:
version: "3.3"
services:
pod:
image: alpine
command: [ "sh", "-c", "while true; do sleep 5; done" ]
dind:
image: docker:stable-dind
command: [ "dockerd", "--host", "tcp://127.0.0.1:2375" ]
privileged: true
network_mode: service:pod
registry:
image: registry:2
network_mode: service:pod
Do not scale!
–
Even easier with YAML anchors:
version: "3.4"
x-pod-template: &pod
depends_on: [ "pod" ]
network_mode: service:pod
services:
pod:
image: alpine
command: [ "sh", "-c", "while true; do sleep 5; done" ]
registry:
<<: *pod
image: registry:2
dind:
<<: *pod
image: docker:stable-dind
command: [ "dockerd", "--host", "tcp://127.0.0.1:2375" ]
privileged: true