Top Banner
Docker king-d00m Oskars Gavriševs 2015@4f
122
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Docker king-d00m

Docker king-d00m

Oskars Gavriševs

2015@4f

Page 2: Docker king-d00m

Agenda:

● Virtualization.

● Docker installation.

● Why Docker.

● Show me the magic.

● Anti-patterns.

● What's left behind.

Page 3: Docker king-d00m
Page 4: Docker king-d00m

Virtualization

Page 5: Docker king-d00m

Virtualization

Makes all hardware simulation. Requires

hardware level support (AMD-V and Intel VT-x).

Also can be splitted in three types based on

hypervisor :

● Bare metal hypervisors

● Hosted hypervisors

● Mix type hypervisors

Page 6: Docker king-d00m

Seriously what is hypervisor ?

Page 7: Docker king-d00m

Bare metal hypervisors

Page 8: Docker king-d00m

Bare metal hypervisors (2)

● Citrx Xen Server

● VMware ESX/ESXi

● Microsoft Hyper-V

Page 9: Docker king-d00m

Hosted hypervisors

Page 10: Docker king-d00m

Hosted hypervisors (2)

● VirtualBox

● Wmvare Desktop

Page 11: Docker king-d00m

Mix type hypervisors

For example :

● Linux's Kernel-based Virtual Machine (KVM)

● FreeBSD's bhyve

Page 12: Docker king-d00m

Ok but where is Docker ?

Page 13: Docker king-d00m

On what virt. level is Docker ?

● Operating-system-level virtualization

● Requires Linux kernel spec. futures

Page 14: Docker king-d00m

Decker dependencies

● Requires different Linux kernel virtualization

futures (cgroups, namespaces, etc)

● Access these features through libs. : ○ libvirt

○ LXC

○ systemdnspawn

○ libcointainer (added after v. 0.9 )

● Mainline Linux kernel > 3.8 is enough

Page 15: Docker king-d00m

Docker dependencies (2)

Page 16: Docker king-d00m

Where can I run Docker ?

● On almost any Linux OS ( Ubuntu, RHEL,

CentOs, ….)

● IaaS (AWS, Rackspace Cloud, Google

cloud, ...)

● Also on virtualization itself :○ Xen (paravirtualization )(AWS uses it )

○ VirtualBox (full virtualization )

Page 17: Docker king-d00m

Where can I run Docker ? (2)

● Even Microsoft Windows can run Docker

Page 18: Docker king-d00m

Once again what is difference ?

Page 19: Docker king-d00m
Page 20: Docker king-d00m

Install Docker

Page 21: Docker king-d00m

Install on Mac

Page 22: Docker king-d00m

Mac

● Docker needs specific kernel instructions

(absent in mac kernel) so only option is to

run Docker in VM , you can use : ○ Boot2Docker

○ Kitematic.io

Page 23: Docker king-d00m

Boo2Docker

Page 24: Docker king-d00m

Boo2Docker

● Get latest release:

https://github.com/boot2docker/osx-

installer/releases/latest

● Install “Boot2Docker-x.x.x.pkg”

● Spin up Docker VM by executing : ○ “$ boot2docker init”

○ “$ boot2docker start”

Page 25: Docker king-d00m

Boo2Docker (2)

Page 26: Docker king-d00m

Boo2Docker (3)

● You can access VM and work with docker : ○ “$ boot2docker ssh”○ “$ docker ps”

OR

● Use docker CLI on mac (docker host on VM)○ “$ boot2docker shellinit”○ Export printed variables ○ ”$ docker ps”

Page 27: Docker king-d00m

boot2Docker(4)

Page 28: Docker king-d00m

Kitematic

Page 29: Docker king-d00m

Kitematic

● Get latest installation :

http://kitematic.com/download/

● Unzip and install

● You can create images only from docker

files

Page 30: Docker king-d00m

Kitematic (2)

Page 31: Docker king-d00m

Install on Ubuntu 14.04

Page 32: Docker king-d00m

Ubuntu

Install from docker repo (version 1.4.1):

● Install “https” pkg. :○ “$sudo apt-get update”○ “$sudo apt-get install apt-transport-https”

● Add key server ○ “$sudo apt-key adv --keyserver

hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9”

Page 33: Docker king-d00m

Ubuntu (2)

● Add docker repo ○ “$ sudo sh -c "echo deb

https://get.docker.com/ubuntu docker main\> /etc/apt/sources.list.d/docker.list”

● Install docker ○ “$ sudo apt-get update”○ “$ sudo apt-get install lxc-docker”○ “$ sudo docker ps ”

Page 34: Docker king-d00m

Ubuntu (3)

Install from Ubuntu maintained repo (version

1.0.1) (not recommended ):○ “$ sudo apt-get update”○ “$ sudo apt-get install docker.io” ○ “$ docker ps”

Page 35: Docker king-d00m

Install on Centos 6.5

Page 36: Docker king-d00m

Centos

Installation available only from 3rd party repos

(EPEL) (version 1.3.2):

● Add EPEL repo ○ “$ wget

http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm”

○ “$ sudo rpm -Uvh epel-release-6*.rpm”

Page 37: Docker king-d00m

Centos (2)

Page 38: Docker king-d00m

Centos (3)

● Install docker:○ “$ sudo yum install docker-io”

● Ensure service is started ○ “$ service docker start”○ “$ docker ps”

Page 39: Docker king-d00m
Page 40: Docker king-d00m

Ok so what so special in

this Docker ?

Page 41: Docker king-d00m

What so special

● Less overhead than VM

● Run anything, run everywhere

● Reproducible way of building images

(DockerFiles )

Page 42: Docker king-d00m

What so special (2)

● Snapshot based

file system, we can

build images on

top of others

Page 43: Docker king-d00m

What so special (3)

Docker allows to isolate:

● Process (own process space )

● File system (can use dedicated / can share )

● Memory amount

● CPU quotas

● Network (own network interface)

Page 44: Docker king-d00m

What so special (4)

● Compute efficiency :○ Processes runs straight on host

○ CPU performance (native performance )

○ Memory performance (few % shaved of )

○ Network performance (small overhead)

Page 45: Docker king-d00m

What so special (5)

● Use containers as building blocks for much

complicated system / environments

Page 46: Docker king-d00m

What so special (6)

● Docker = Docker CLI + Docker Daemon

Page 47: Docker king-d00m

What so special (7)

● Reuse other people's work (ecosystem)

Page 48: Docker king-d00m

What so special (8)

● We can isolate one process, different way of

delivering apps

Page 49: Docker king-d00m

What so special (9)

● Super fast ( virtualbox vs docker )

Page 50: Docker king-d00m
Page 51: Docker king-d00m

But I can do everything without docker

Page 52: Docker king-d00m

Yes ,- but its complicated

Page 53: Docker king-d00m

And docker makes it easy as:

Page 54: Docker king-d00m
Page 55: Docker king-d00m

Show me the magic

Page 56: Docker king-d00m

Docker command overview

Page 57: Docker king-d00m

Docker concepts

● image

● container

● container state

● registry

Page 58: Docker king-d00m
Page 59: Docker king-d00m

Docker pull

Page 60: Docker king-d00m

hub.docker.com

Page 61: Docker king-d00m

docker registry = artifactory (nexus)

Page 62: Docker king-d00m

Achtung bug spotted in boot2Docker

Page 63: Docker king-d00m

boot2Docker bug (2)

● add nameserver : “$echo 'nameserver 8.8.8.8' > /etc/resolv.conf”

● restart docker service on VM :“$/etc/init.d/docker restart”

Page 64: Docker king-d00m

Docker pull (2)

● Search images using “hub.docker.com”

Page 65: Docker king-d00m

Docker pull (3)

● Search images using docker cli: “$docker search image_name”

Page 66: Docker king-d00m

Docker pull (4)

● Pull images “$docker pull image_name”

Page 67: Docker king-d00m

Docker pull (5)

● Pull specific tag

“$docker pull image_name:tag”

Page 68: Docker king-d00m
Page 69: Docker king-d00m

Docker run

Page 70: Docker king-d00m

Docker run

● Container will run ( persist its state = 'UP' )

until process inside will return exit code

Page 71: Docker king-d00m

Docker run (2)

● Run container from image

“$docker run image_name command”

Page 72: Docker king-d00m

Docker run (3)

Page 73: Docker king-d00m

Docker run (4)

We can run container in two modes :

● Detached

● Interactive

Page 74: Docker king-d00m

Docker run detached

● Container runs in background we can

interact using : ○ network

○ shared volume

○ or attaching to process

Page 75: Docker king-d00m

Docker run detached (2)

“$docker run -d image_name command”

Page 76: Docker king-d00m

Docker run detached (3)

Page 77: Docker king-d00m
Page 78: Docker king-d00m

Docker run interactive

● Default mode

● Attach terminal (stdin, stdout, stderr) to

process

● Can attach pseudo-tty

Page 79: Docker king-d00m

Hold on, pseudo-tty ?

Page 80: Docker king-d00m

pseudo-tty (2)

Page 81: Docker king-d00m

Docker run interactive (2)

“$docker run -i -t image_name command”

Page 82: Docker king-d00m

Docker run interactive (3)

And why I need these “ -i , -t ” ?

Page 83: Docker king-d00m

Docker run interactive (4)

Page 84: Docker king-d00m

Docker run interactive (5)

But how to keep my container running when

detaching from them ?

Page 85: Docker king-d00m

Docker run interactive (6)

Remember if container is started in interactive

mode (-i -t) :

● “Control + C” = will detach from container

and terminate it

● “Control + P , Control + Q” = will detach

without termination

Page 86: Docker king-d00m
Page 87: Docker king-d00m

Ok, but how can I attach back ?

Page 88: Docker king-d00m

Attaching to container

You can try :

● Attach to existing process in container =

“docker attach”

● Run-attach new process in container =

“docker execute”

Page 89: Docker king-d00m

docker attach

Attach to primary process (pid 1) tty in running

container : “$docker attach container_name”

Page 90: Docker king-d00m

docker attach (2)

Page 91: Docker king-d00m

docker execute

Run and attach to new process in container : “$docker exec -i -t container_name command”

Page 92: Docker king-d00m

docker execute (2)

Page 93: Docker king-d00m
Page 94: Docker king-d00m

Hmm maybe we don't need attach to

containers

Page 95: Docker king-d00m

Container control tools

● Inspect container config = “docker inspect”

● Terminal output = “docker logs”

● Process state = “docker top”

● Exposed ports = “docker port”

Page 96: Docker king-d00m

docker inspect

Returns low level info. about container / image: “$docker inspect container_name / image_name”

Page 97: Docker king-d00m

docker logs

Shows output history of running process in

container: “$docker logs container_name”

Page 98: Docker king-d00m

docker top

Outputs processes running in container : “$docker top container_name”

Page 99: Docker king-d00m
Page 100: Docker king-d00m

docker commit

Page 101: Docker king-d00m

docker commit (2)

● We can make changes made in container

persistent by committing them to image.

● This is one approach how we can build

custom images.

Page 102: Docker king-d00m

docker commit (3)

“$docker commit container_name new_image_name”

Page 103: Docker king-d00m
Page 104: Docker king-d00m

docker build

Page 105: Docker king-d00m

docker build

● Second approach of building custom images

● We need 'Dockerfile' which will describe

changes made on base image.

Page 106: Docker king-d00m

docker build (2)

Page 107: Docker king-d00m

docker build (3)

“$docker buil -t image_name docker_file_url”

Page 108: Docker king-d00m

docker build (4)

Page 109: Docker king-d00m

docker build (5)

Page 110: Docker king-d00m

Stop, Stop

Page 111: Docker king-d00m

docker build (6)

● why “docker run” works without providing

process to execute in container ?

Page 112: Docker king-d00m

docker build (7)

Page 113: Docker king-d00m
Page 114: Docker king-d00m

Anti-patterns

Page 115: Docker king-d00m

Anti-patterns (1)

1) docker container = virtual machine

2) docker container = virtual machine

3) docker container = virtual machine

4) docker container = virtual machine

5) docker container = virtual machine

6) seriously !!!

- > one container one process

Page 116: Docker king-d00m

Anti-patterns (2)

● containers with built in sshd

- > no ssh, most things can be achieved with

built in tools

● persist data in container

- > use volumes

Page 117: Docker king-d00m

Anti-patterns (3)

● check app logs

- > use volumes

● restart service “/etc/init.d/my_srv restart”

- > send signal “docker kill -s <signal>”

● edit config / new app version

- > rebuild image from dockerfile

Page 118: Docker king-d00m
Page 119: Docker king-d00m

What is left outside this presentation.

Page 120: Docker king-d00m

Left behind

● Port forwarding

● File system , volumes

● Resource limitation

● Clustering

● Dockerfiles

● Container linkage

Page 121: Docker king-d00m
Page 122: Docker king-d00m