austin - container days - docker 101

40
© 2015 Rancher Labs, Inc. © 2016 Rancher Labs, Inc . Container Days: Docker 101 October 13

Upload: bill-maxwell

Post on 15-Apr-2017

148 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Container Days: Docker 101October 13

Page 2: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.2 © 2016 Rancher Labs, Inc .

Bill MaxwellPrincipal Eng. @ Rancher Labs @[email protected]

#ranchermeetup

Page 3: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Agenda

Docker IntroContainer BasicsBuildingStorageNetworking

Page 4: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

STOPDocker Install Time

https://docs.docker.com/engine/installation/

Page 5: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

VM vs Containers

Page 6: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Note: Containers ≠ microservices

…but containers are a good way of packaging and delivering microservices

[PS: you can still use VMs]

Page 7: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.7 © 2016 Rancher Labs, Inc .

Our Goal: A Production Container Service

Develop Build Containerize Test Deploy/Upgrade Operate

Page 8: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Runtimes

runClxc/lxd

openVZ

rktdocker

Page 9: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Docker ContainersMantra: Build once, run anywhere

• A clean and portable runtime environment for your application (or service)• No worries about missing dependencies, packages, etc during subsequent

deployments• Automate testing, integration, and packaging…anything you can script• Reduce concerns around compatibility on different platforms (either your own,

or your customers• Instant replay and reset of image snapshots

Docker containers are helping organizations achieve agility and efficiency

Page 10: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .10

Docker is helping organizations achieve agility and efficiency

12

Improve the speed and reliability of software development organizations

Operate that software reliably at a reasonable cost

Page 11: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Isolation Mechanisms• Cgroups – Metering and Limiting

• Namespaces• Pid• User• Net• Mnt• Ipc• User

• Layered Copy On Write Filesystems

Page 12: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Docker flow

Docker file

Push

Build Registry

Pull

Host

Run

Page 13: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Building Images

FROM alpine

RUN apk add --update bash \ mysql-client \ openssl \ vim && \ rm -rf /var/cache/apk/*

CMD /bin/echo hello

Dockerfile

Base Image

Install Software

Default Command

Page 14: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Anatomy of an Image

Base Image

Layer 1

Layer 2

Layer 3

Page 15: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

What Happens?• Base image is pulled from

registry.• A container is created and the

next command is executed.• The result is committed to a

layer in the image.

Page 16: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Demo Images/Building

Page 17: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Building Images Cont.FROM alpine

RUN apk add --update bash \ mysql-client \ openssl \ vim && \ rm -rf /var/cache/apk/*

ADD ./script.sh /

CMD /bin/echo hello

Add a file from the local build context

Page 18: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

ExerciseBuild a Docker image from Alpine that executes:

script.sh:#!/bin/bashecho “hello world”

Page 19: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Exercise Solution

#!/bin/bashecho “hello world”

FROM alpine

RUN apk add --update bash &&\ rm -rf /var/cache/apk/*

ADD ./script.sh /

CMD /script.sh

script.sh

Dockerfile $ ls ./Dockerfile script.sh

Page 20: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Demo Docker Push

Page 21: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Notes on Tags• By default Docker

uses :latest tag.

• Docker checks for image locally, then checks registry.

• Always run a versioned tag in a production system

Page 22: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Docker Run

docker run –d nginx

docker run –it debian bash

docker logs <container id>

See the stdout/stderr from a container:

docker exec –it <container id> /bin/bashJump inside a container with a shell:

Page 23: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

ExerciseRun the container from previous exercise in both interactive andDetached mode.

Enter the detached container with docker exec

Page 24: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Docker Run From a Filesystem perspective

Base Image

Layer 1

Layer 2

Layer 3

Container 1Filesystem

Container 2Filesystem

Page 25: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

ExerciseRun 2 containers from the same image and see that changes on the local file system do not impact the other.

Page 26: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Docker volumes

Base Image

Layer 1

Layer 2

Layer 3

By Default layered file systems. Keep mappingtable in memory.

AUFS doesn’t do Hard Links… good luck running Tox

Page 27: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Docker volumes

Base Image

Layer 1

Layer 2

Layer 3

Use a VOLUME

Dockerfile:Volume /path

Runtime:-v /path

/var/lib/dockerFilesystem

Running Container

/path

Page 28: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Volume PluginsDocker plugin binaries that can mount storage and attach to containers.

Page 29: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Host Bind MountsDirectly mount any path on the host file system inside the container.

docker run –it –v /data:/data alpine sh

Page 30: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Volumes FromShare volumes between containers!

Data Container

Container 1 Container 2

Page 31: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Volume Exercises1. Docker volume ls2. docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql3. Docker volume ls

4. Docker volume create –name mysql-data5. docker run --name some-mysql-named-volume -e MYSQL_ROOT_PASSWORD=my-

secret-pw –d –v mysql-data:/var/lib/mysql mysql

6. mkdir ./data7. docker run --name some-mysql-host-volume -e MYSQL_ROOT_PASSWORD=my-secret-

pw –d –v $(pwd)/data:/var/lib/mysql mysql

8. Create a volume container

Page 32: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Docker networking• Containers run in their own

network namespace.• Port mapping to host interface

for outside accessiblity.

Host

Interface

Docker Bridge

Container

Page 33: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Demo Networking ModesNoneHost

Page 34: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

LinkingCreates Directional Link

Creates DNS / Host lookup

Creates ENV variables

Container 1 Container 2

Page 35: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Exposing PortsAllows traffic from outside of the Docker bridged network.

Host

Interface

Docker Bridge

Container

Outside world

Page 36: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Demo LinkingSetting hostnameSetting host:ip mapping

Page 37: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

ExerciseCreate Mysql Container and link a mysql client container to it.

Run nginx container and reach port

Page 38: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Pulling it all togetherLets run:

https://github.com/realpython/orchestrating-docker

Page 39: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Advanced TopicsNamespace sharing! Security ConsiderationsDaemon settings

Page 40: Austin - Container Days - Docker 101

© 2015 Rancher Labs, Inc.© 2016 Rancher Labs, Inc .

Thank you!

Questions?

Contact: [email protected]