Slide 1

Slide 1 text

Getting Started with Docker Workshop

Slide 2

Slide 2 text

Antonis Kalipetis CTO @ SourceLair Docker Captain and big fan Python enthusiast Coffee lover @akalipetis

Slide 3

Slide 3 text

Agenda ● Docker basics ○ Running containers ○ Building images ○ Linking and exposing containers ● Docker stacks ○ Networks ■ Understanding Docker networks and DNS ○ Volumes ○ Docker compose ■ Creating services ■ Running complex stacks ● QnA

Slide 4

Slide 4 text

git clone https://github.com/akalipetis/docker- workshop

Slide 5

Slide 5 text

Access your Docker engine SSH ● ssh [email protected] ● Use the provided password ● Run docker ps to check you have access Remote Docker CLI ● Download www.akalipeits.com/. zip ● Extract (use the provided password) ● Configure the environment: ○ export DOCKER_TLS_VERIFY="1" ○ export DOCKER_HOST="tcp://. akalipetis.com:2376" ○ export DOCKER_CERT_PATH=""

Slide 6

Slide 6 text

Docker basics

Slide 7

Slide 7 text

Running your first container docker run -it ubuntu bash # apt-get update &&\ apt-get install -y net-tools

Slide 8

Slide 8 text

What did just happen ● Docker created a new process ● Isolated the process using namespaced (net, mnt, pid, etc) ● Mounted the given filesystem - in our case Ubuntu ● Attached to this process

Slide 9

Slide 9 text

Let’s build our first image $ cd containers/net-tools $ docker build -t net-tools . $ docker run net-tools ip a

Slide 10

Slide 10 text

While images seem large, they’re actually pretty small as they use CoW filesystems.

Slide 11

Slide 11 text

Listing and inspecting $ docker ps $ docker ps -a $ docker inspect a047e3d0ae2b $ docker ps -a -f exited=0

Slide 12

Slide 12 text

Linking containers $ docker run -d redis $ docker run -it --link=redis:redis redis bash $ docker run -ti --link=redis:some- redis redis redis-cli -h some-redis Docker bridges all created veths to docker0, so it can do smart forwarding

Slide 13

Slide 13 text

Exposing containers With the bridge, it can forward packets received to ports in the host to the correct veth $ docker run -d -p 80 nginx $ cd containers/static $ make build $ docker run -d -p 80:80 static

Slide 14

Slide 14 text

Docker handles networking from, to and within containers, using docker0 and a veth pair per container

Slide 15

Slide 15 text

Getting logs $ docker logs a047e3d0ae2b $ docker attach a047e3d0ae2b

Slide 16

Slide 16 text

Docker stacks

Slide 17

Slide 17 text

Networks Create private networks across hosts and connect containers to them $ docker network create demo $ docker run -d --net=demo --net- alias=redis redis $ docker network connect -- alias=redis demo redis

Slide 18

Slide 18 text

Volumes Create data volumes, which persist even after a container gets deleted $ docker volume create myvol $ docker run -v=myvol:/mnt/data ubuntu echo hello > /mnt/data/hey.txt $ docker run -v=myvol:/mnt/data ubuntu cat /mnt/data/hey.txt $ docker run --volumes-from=some- container -it ubuntu bash

Slide 19

Slide 19 text

Docker sports a plugin system which allows third parties to provide network or volume drivers for other systems

Slide 20

Slide 20 text

$ cd compose/elk $ docker-compose up Compose Compose stacks, without needing to start all containers all the times

Slide 21

Slide 21 text

$ cd compose/django-postgres $ docker-compose up $ docker-compose exec django . /manage.py migrate Compose Interfere with containers created by Docker compose

Slide 22

Slide 22 text

Docker compose is a tool for defining and running multi-container Docker applications

Slide 23

Slide 23 text

QnA Let’s discuss about Docker in General

Slide 24

Slide 24 text

Thanks! Antonis Kalipetis @akalipetis https://www.sourcelair.com