Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Let's talk about Docker

Slide 3

Slide 3 text

Docker History • 1979: Unix V7

Slide 4

Slide 4 text

Docker History • 1974: Matijs born • 1979: Unix V7 • 2001: Linux VServer • 2008: Linux Containers (LXC) • 2013: Docker ⚠ learn more: dcmnt.me/2hjIl5V

Slide 5

Slide 5 text

• lightweight virtual environment • faster startup than virtual machines • focus is on "do one thing, well"

Slide 6

Slide 6 text

What Docker is not • not good at running multiple processes • not suitable for all kinds of applications • not (very) good at distributed stateful applications

Slide 7

Slide 7 text

What is Docker used for?

Slide 8

Slide 8 text

What is Docker used for? ⚠ learn more: dcmnt.me/2hjIl5V

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Docker Basics OS Download URL dcmnt.me/2hmxGYm dcmnt.me/2hmtbgp

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Docker Basics • Docker Runtime • Docker Images

Slide 13

Slide 13 text

Docker Runtime

Slide 14

Slide 14 text

Docker Runtime

Slide 15

Slide 15 text

Docker Images • Tarball of OS and application • built from a Dockerfile • can use Docker Compose, Packer, Ansible etc.

Slide 16

Slide 16 text

Dockerfiles • plain-text files with little magic

Slide 17

Slide 17 text

Dockerfiles • plain-text files with little magic • contain instructions on how a Docker Image should be built

Slide 18

Slide 18 text

FROM alpine CMD ["echo", "Hello ✈ "] ⚠ learn more: dcmnt.me/2hkSoHQ

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

FROM alpine CMD ["echo", "Hello ✈ "]

Slide 21

Slide 21 text

FROM alpine CMD ["echo", "Hello ✈ "]

Slide 22

Slide 22 text

FROM withmethod/alpine-base:3.6 RUN apk add --no-cache nodejs=6.10.3-r1 nodejs-npm=6.10.3-r1

Slide 23

Slide 23 text

FROM withmethod/alpine-base:3.6 RUN \ apk \ add \ --no-cache \ nodejs=6.10.3-r1 \ nodejs-npm=6.10.3-r1

Slide 24

Slide 24 text

FROM withmethod/alpine-base:3.6 ENV IMAGE_VERSION=6.10.3-r1 RUN \ apk \ add \ --no-cache \ nodejs=${IMAGE_VERSION} \ nodejs-npm=${IMAGE_VERSION}

Slide 25

Slide 25 text

FROM withmethod/alpine-nodejs:6.10.3-r1 ENV IMAGE_NAME=loop-and-crash ENV IMAGE_VERSION=1.4.3 ENV WORKDIR=/tmp WORKDIR "${WORKDIR}" ADD "https://github.com/withmethod/${IMAGE_NAME}/archive/${IMAGE_VERSION}.tar.gz" "${WORKDIR}" RUN \ tar xzf "${IMAGE_VERSION}.tar.gz" \ && \ rm -rf "${WORKDIR}/${IMAGE_VERSION}.tar.gz" WORKDIR "${WORKDIR}/${IMAGE_NAME}-${IMAGE_VERSION}" RUN npm install --production USER "alpine" EXPOSE 2774 CMD ["npm", "start"]

Slide 26

Slide 26 text

FROM withmethod/alpine-nodejs:6.10.3-r1 ENV IMAGE_NAME=loop-and-crash ENV IMAGE_VERSION=1.4.3 ENV WORKDIR=/tmp WORKDIR "${WORKDIR}" ADD "https://github.com/withmethod/${IMAGE_NAME}/archive/${IMAGE_VERSION}.tar.gz" "${WORKDIR}" RUN \ tar xzf "${IMAGE_VERSION}.tar.gz" \ && \ rm -rf "${WORKDIR}/${IMAGE_VERSION}.tar.gz" WORKDIR "${WORKDIR}/${IMAGE_NAME}-${IMAGE_VERSION}" RUN npm install --production USER "alpine" EXPOSE 2774 CMD ["npm", "start"]

Slide 27

Slide 27 text

FROM withmethod/alpine-nodejs:6.10.3-r1 ENV IMAGE_NAME=loop-and-crash ENV IMAGE_VERSION=1.4.3 ENV WORKDIR=/tmp WORKDIR "${WORKDIR}" ADD "https://github.com/withmethod/${IMAGE_NAME}/archive/${IMAGE_VERSION}.tar.gz" "${WORKDIR}" RUN \ tar xzf "${IMAGE_VERSION}.tar.gz" \ && \ rm -rf "${WORKDIR}/${IMAGE_VERSION}.tar.gz" WORKDIR "${WORKDIR}/${IMAGE_NAME}-${IMAGE_VERSION}" RUN npm install --production USER "alpine" EXPOSE 2774 CMD ["npm", "start"]

Slide 28

Slide 28 text

FROM withmethod/alpine-nodejs:6.10.3-r1 ENV IMAGE_NAME=loop-and-crash ENV IMAGE_VERSION=1.4.3 ENV WORKDIR=/tmp WORKDIR "${WORKDIR}" ADD "https://github.com/withmethod/${IMAGE_NAME}/archive/${IMAGE_VERSION}.tar.gz" "${WORKDIR}" RUN \ tar xzf "${IMAGE_VERSION}.tar.gz" \ && \ rm -rf "${WORKDIR}/${IMAGE_VERSION}.tar.gz" WORKDIR "${WORKDIR}/${IMAGE_NAME}-${IMAGE_VERSION}" RUN npm install --production USER "alpine" EXPOSE 2774 CMD ["npm", "start"]

Slide 29

Slide 29 text

FROM withmethod/alpine-nodejs:6.10.3-r1 ENV IMAGE_NAME=loop-and-crash ENV IMAGE_VERSION=1.4.3 ENV WORKDIR=/tmp WORKDIR "${WORKDIR}" ADD "https://github.com/withmethod/${IMAGE_NAME}/archive/${IMAGE_VERSION}.tar.gz" "${WORKDIR}" RUN \ tar xzf "${IMAGE_VERSION}.tar.gz" \ && \ rm -rf "${WORKDIR}/${IMAGE_VERSION}.tar.gz" WORKDIR "${WORKDIR}/${IMAGE_NAME}-${IMAGE_VERSION}" RUN npm install --production USER "alpine" EXPOSE 2774 CMD ["npm", "start"]

Slide 30

Slide 30 text

FROM withmethod/alpine-nodejs:6.10.3-r1 ENV IMAGE_NAME=loop-and-crash ENV IMAGE_VERSION=1.4.3 ENV WORKDIR=/tmp WORKDIR "${WORKDIR}" ADD "https://github.com/withmethod/${IMAGE_NAME}/archive/${IMAGE_VERSION}.tar.gz" "${WORKDIR}" RUN \ tar xzf "${IMAGE_VERSION}.tar.gz" \ && \ rm -rf "${WORKDIR}/${IMAGE_VERSION}.tar.gz" WORKDIR "${WORKDIR}/${IMAGE_NAME}-${IMAGE_VERSION}" RUN npm install --production USER "alpine" EXPOSE 2774 CMD ["npm", "start"]

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

Building Images • docker build . • docker build --file single-line.Dockerfile . ⚠ learn more: dcmnt.me/2zOHtNn

Slide 33

Slide 33 text

Pulling Images • docker pull alpine ⚠ learn more: dcmnt.me/2hkr1xO

Slide 34

Slide 34 text

Running Images • docker run $containerName $command • docker run alpine /bin/echo "Hello " ⚠ learn more: dcmnt.me/2zOdR2Q

Slide 35

Slide 35 text

Running Images • docker run $containerId • docker run a125 ⚠ learn more: dcmnt.me/2zOdR2Q

Slide 36

Slide 36 text

Running Images • docker run $containerName • docker run busybox echo "Hello " ⚠ learn more: dcmnt.me/2zOdR2Q

Slide 37

Slide 37 text

Listing Images • docker images

Slide 38

Slide 38 text

Listing Images docker \ run \ --name portainer \ --privileged \ --detach \ -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ~/Sites/docker-data/portainer/:/data \ portainer/portainer \ --no-auth \ -H unix:///var/run/docker.sock ⚠ learn more: dcmnt.me/2zOdrtm

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

Takeaways • Containers are not new but require different thinking • Docker Images work best when they are minimal • Do not overcomplicate your image's build instructions • Security is hard, so ask around for best-practices

Slide 41

Slide 41 text

Handout dcmnt.me/2zOkcva

Slide 42

Slide 42 text

No content