+ All Categories
Home > Technology > Basic docker for developer

Basic docker for developer

Date post: 05-Apr-2017
Category:
Upload: weerayut-hongsa
View: 803 times
Download: 0 times
Share this document with a friend
261
Docker For Developer
Transcript
Page 1: Basic docker for developer

DockerFor Developer

Page 2: Basic docker for developer

#whoami• Mr. Weerayut Hongsa (@kusumoto_ton)• Graduated from Prince of Songkla University, Phuket Campus

Major Software Engineer• System Administrator / Infrastructure Engineer

(Major Kantana Broadcasting Co., Ltd)• Software Developer (C#, Node.js, Lua, Java, PHP, Javascript)

#Freelance• Software Developer (iCONEXT Co., Ltd)• Interesting DevOps, Software Development, Agile Methodology,

CI/CD, Infrastructure As a Code

Page 3: Basic docker for developer

#resourcehttps://github.com/Kusumoto/psu-docker-workshop-resource

Page 4: Basic docker for developer

What is Docker ?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 5: Basic docker for developer

Mr.Weerayut Hongsa - @kusumoto_ton

Page 6: Basic docker for developer

This is “Dock” :p

Mr.Weerayut Hongsa - @kusumoto_ton

Page 7: Basic docker for developer

Mr.Weerayut Hongsa - @kusumoto_ton

Page 8: Basic docker for developer

Mr.Weerayut Hongsa - @kusumoto_ton

Page 9: Basic docker for developer

#docker??

“Software Container management platform”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 10: Basic docker for developer

#docker??

Mr.Weerayut Hongsa - @kusumoto_ton

Page 11: Basic docker for developer

What is Container ?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 12: Basic docker for developer

#container??

“Concept for create environment for software, without disturbing the rest of the core operating system.”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 13: Basic docker for developer

#container??

Mr.Weerayut Hongsa - @kusumoto_ton

Page 14: Basic docker for developer

Why to use Docker?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 15: Basic docker for developer

Ok, I have a new question.Do you have this problem?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 16: Basic docker for developer

Mr.Weerayut Hongsa - @kusumoto_ton

Page 17: Basic docker for developer

Mr.Weerayut Hongsa - @kusumoto_ton

Page 18: Basic docker for developer

Mr.Weerayut Hongsa - @kusumoto_ton

Page 19: Basic docker for developer

Mr.Weerayut Hongsa - @kusumoto_ton

Page 20: Basic docker for developer

FTP

Mr.Weerayut Hongsa - @kusumoto_ton

Page 21: Basic docker for developer

FTP

Mr.Weerayut Hongsa - @kusumoto_ton

Page 22: Basic docker for developer

FTP

Mr.Weerayut Hongsa - @kusumoto_ton

Page 23: Basic docker for developer

FTP??

?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 24: Basic docker for developer

FTP??

? Software version is not been control.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 25: Basic docker for developer

I would say that, Docker can solve all problem.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 26: Basic docker for developer

#docker platform

Docker Engine Docker Machine Docker Compose Docker Swarm Docker Registry

Mr.Weerayut Hongsa - @kusumoto_ton

Page 27: Basic docker for developer

Why not use VM (Virtual Machine) ?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 28: Basic docker for developer

Virtual Machine (VM) Containers (Docker)

#teamvm vs #teamcontainer

Mr.Weerayut Hongsa - @kusumoto_ton

Page 29: Basic docker for developer

#docker solution

Mr.Weerayut Hongsa - @kusumoto_ton

Page 30: Basic docker for developer

#docker edition

• Community Edition (CE)• Enterprise Edition (EE)

Mr.Weerayut Hongsa - @kusumoto_ton

Page 31: Basic docker for developer

Case Study (Development Case)PHP Web Application Development

Mr.Weerayut Hongsa - @kusumoto_ton

Page 32: Basic docker for developer

PHP version requirement

yii2

CodeIgniterPhalcon

SymfonyLaravel

dokuwiki

Wordpress

Drupal 7 Drupal 8

Joomla

Mr.Weerayut Hongsa - @kusumoto_ton

Page 33: Basic docker for developer

PHP version requirement

yii2 (PHP 5.4+)

CodeIgniter (PHP 5.6+) Phalcon (PHP 5.5+)

Symfony (PHP 5.5.9+) Laravel (PHP 5.6.4+)

dokuwiki (PHP 5.3.4+)

Wordpress (PHP 5.2.4+)

Drupal 7 (PHP 5.2.5+) Drupal 8 (PHP 5.5.9+)

Joomla (PHP 5.3.10+)

Mr.Weerayut Hongsa - @kusumoto_ton

Page 34: Basic docker for developer

PHP version requirement

yii2 (PHP 5.4+)

CodeIgniter (PHP 5.6+) Phalcon (PHP 5.5+)

Symfony (PHP 5.5.9+) Laravel (PHP 5.6.4+)

dokuwiki (PHP 5.3.4+)

Wordpress (PHP 5.2.4+)

Drupal 7 (PHP 5.2.5+) Drupal 8 (PHP 5.5.9+)

Joomla (PHP 5.3.10+)

Mr.Weerayut Hongsa - @kusumoto_ton

Page 35: Basic docker for developer

PHP Extensionapxs2, mongo, db2, bcmath, bz2, calendar, cgi, cli, ctype, dab, debug, odbc, dom, embed, exif, fileinfo, filter, fpm, ftp, gcov, gd, gettext, hash, iconv, icu, imap, intl, ipc, ipv6, json, kerberos, mbregex, mbstring, mcrypt, mhash, mysql, openssl, pcntl, pcre, pdo, pgsql, phar, posix, readline, session, soap, sockets, sqlite, tidy, tokenize, xml_all, xmlrpc, zip, zlib

Mr.Weerayut Hongsa - @kusumoto_ton

Page 36: Basic docker for developer

PHP Extensionapxs2, mongo, db2, bcmath, bz2, calendar, cgi, cli, ctype, dab, debug, odbc, dom, embed, exif, fileinfo, filter, fpm, ftp, gcov, gd, gettext, hash, iconv, icu, imap, intl, ipc, ipv6, json, kerberos, mbregex, mbstring, mcrypt, mhash, mysql, openssl, pcntl, pcre, pdo, pgsql, phar, posix, readline, session, soap, sockets, sqlite, tidy, tokenize, xml_all, xmlrpc, zip, zlib

Mr.Weerayut Hongsa - @kusumoto_ton

Page 37: Basic docker for developer

One Server Multiple Projects

Server

App 1PHPMySQLEtc.

App 2PHPMariaDBEtc.

App nPHPMySQLEtc.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 38: Basic docker for developer

One Server Multiple Projects

Server

App 1PHP 5.2.1MySQL 5.1Etc.

App 2PHP 5.5.3MariaDB 10Etc.

App nPHP 7.0MySQL 5.6Etc.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 39: Basic docker for developer

Mr.Weerayut Hongsa - @kusumoto_ton

Page 40: Basic docker for developer

Solve this problem!

Mr.Weerayut Hongsa - @kusumoto_ton

Page 41: Basic docker for developer

Virtual Machine (VM)

Mr.Weerayut Hongsa - @kusumoto_ton

Page 42: Basic docker for developer

Virtual Machine (VM)Can solve this problem

Mr.Weerayut Hongsa - @kusumoto_ton

Page 43: Basic docker for developer

Virtual Machine (VM)Can solve this problem

But not lightweight and use much more resources

Mr.Weerayut Hongsa - @kusumoto_ton

Page 44: Basic docker for developer

PHPBrew

Mr.Weerayut Hongsa - @kusumoto_ton

Page 45: Basic docker for developer

PHPBrewAlmost good

Mr.Weerayut Hongsa - @kusumoto_ton

Page 46: Basic docker for developer

PHPBrewAlmost good

But we need encapsulation, portability and portable

Mr.Weerayut Hongsa - @kusumoto_ton

Page 47: Basic docker for developer

Vagrant

Mr.Weerayut Hongsa - @kusumoto_ton

Page 48: Basic docker for developer

VagrantThat’s awesome!

Mr.Weerayut Hongsa - @kusumoto_ton

Page 49: Basic docker for developer

VagrantThat’s awesome!

But may it be more lightweight and portable

Mr.Weerayut Hongsa - @kusumoto_ton

Page 50: Basic docker for developer

Docker

Mr.Weerayut Hongsa - @kusumoto_ton

Page 51: Basic docker for developer

DockerThat’s awesome!

Lightweight, encapsulation, portability and portable

Mr.Weerayut Hongsa - @kusumoto_ton

Page 52: Basic docker for developer

Can Docker help you?• Docker can create environment compatible for your software.• Docker separate disk space each project.• You software easy for implementation.• You software easy deployment and portability.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 53: Basic docker for developer

PHP Multi Version In One Server

Mr.Weerayut Hongsa - @kusumoto_ton

Page 54: Basic docker for developer

Case Study (Operations Case)Large Scale Web Application

Mr.Weerayut Hongsa - @kusumoto_ton

Page 55: Basic docker for developer

It's time to deployment

Mr.Weerayut Hongsa - @kusumoto_ton

Page 56: Basic docker for developer

Basic Infrastructure

Mr.Weerayut Hongsa - @kusumoto_ton

Page 57: Basic docker for developer

Basic Infrastructure

Mr.Weerayut Hongsa - @kusumoto_ton

Page 58: Basic docker for developer

Basic Infrastructure

Mr.Weerayut Hongsa - @kusumoto_ton

Page 59: Basic docker for developer

Cloud InfrastructureBlock Storage

Cluster Farm

Mr.Weerayut Hongsa - @kusumoto_ton

Page 60: Basic docker for developer

Cloud InfrastructureBlock Storage

Cluster Farm

Mr.Weerayut Hongsa - @kusumoto_ton

Page 61: Basic docker for developer

Cloud InfrastructureBlock Storage

Cluster Farm

Mr.Weerayut Hongsa - @kusumoto_ton

Page 62: Basic docker for developer

Cloud InfrastructureBlock Storage

Cluster Farm

Mr.Weerayut Hongsa - @kusumoto_ton

Page 63: Basic docker for developer

Who’s using #docker?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 64: Basic docker for developer

How do you know software support #docker?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 65: Basic docker for developer

How do you know software support #docker?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 66: Basic docker for developer

We talk about an element of Docker.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 67: Basic docker for developer

Element of Docker

Registry (Docker Repository)ContainerImage

Mr.Weerayut Hongsa - @kusumoto_ton

Page 68: Basic docker for developer

Image

”A template of container”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 69: Basic docker for developer

Image

• Linux or Windows Inside.• Already install the application and environment.• Build from Dockerfile or container. • After build image, the image can been read only.• Template of container.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 70: Basic docker for developer

Container

”Wrap up a piece of software in a complete filesystem that contains everything it needs to run”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 71: Basic docker for developer

Container

• Create from image.• Running Process• Can modify/access after container up and running• Commit change to create image

Mr.Weerayut Hongsa - @kusumoto_ton

Page 72: Basic docker for developer

Registry

”The repository of images”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 73: Basic docker for developer

Registry

• Contain a lot of images.• There are many services, Docker hub is key future.• Image on registry can pull from any location.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 74: Basic docker for developer

Image vs Container

• Compare the OOP concept (Image = Class, Container = Object)• Image can't writable / Container can writeable• Image can extends• Image need transform to Container only for runnable.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 75: Basic docker for developer

Next step, we talk about Docker workflow.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 76: Basic docker for developer

#docker workflow

Mr.Weerayut Hongsa - @kusumoto_ton

Page 77: Basic docker for developer

#docker workflow

Image(from registry)

Mr.Weerayut Hongsa - @kusumoto_ton

Page 78: Basic docker for developer

#docker workflow

Image(from registry)

Image(from local)

PULL

Mr.Weerayut Hongsa - @kusumoto_ton

Page 79: Basic docker for developer

#docker workflow

Image(from registry)

Image(from local)

Container

PULL

RUN

Mr.Weerayut Hongsa - @kusumoto_ton

Page 80: Basic docker for developer

#docker workflow

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

Mr.Weerayut Hongsa - @kusumoto_ton

Page 81: Basic docker for developer

#docker workflow

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

COMMIT

Mr.Weerayut Hongsa - @kusumoto_ton

Page 82: Basic docker for developer

#docker workflow

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

COMMIT

PUSH

Mr.Weerayut Hongsa - @kusumoto_ton

Page 83: Basic docker for developer

#docker workflow

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

COMMIT

PUSH

Mr.Weerayut Hongsa - @kusumoto_ton

Page 84: Basic docker for developer

#docker workflow

Dockerfile

Mr.Weerayut Hongsa - @kusumoto_ton

Page 85: Basic docker for developer

#docker workflow

Image(from local)Dockerfile

BUILD

Mr.Weerayut Hongsa - @kusumoto_ton

Page 86: Basic docker for developer

#docker workflow

Image(from local)Dockerfile Image

(from registry)PUSH

BUILD

Mr.Weerayut Hongsa - @kusumoto_ton

Page 87: Basic docker for developer

#docker workflow

Image(from local)Dockerfile

BUILD

Image(from registry)

PUSH

PULL

Mr.Weerayut Hongsa - @kusumoto_ton

Page 88: Basic docker for developer

#docker workflow

Image(from local)Dockerfile

BUILD

Image(from registry)

PUSH

PULL

Container

RUN

Mr.Weerayut Hongsa - @kusumoto_ton

Page 89: Basic docker for developer

#docker workflow

Image(from local)Dockerfile

BUILD

Image(from registry)

PUSH

PULL

Container

RUN

Mr.Weerayut Hongsa - @kusumoto_ton

Page 90: Basic docker for developer

Go back to #docker solution.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 91: Basic docker for developer

#docker solution

Mr.Weerayut Hongsa - @kusumoto_ton

Page 92: Basic docker for developer

#docker solution

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

COMMIT

PUSHBuild

Mr.Weerayut Hongsa - @kusumoto_ton

Page 93: Basic docker for developer

#docker solution

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

COMMIT

PUSHShip

Mr.Weerayut Hongsa - @kusumoto_ton

Page 94: Basic docker for developer

#docker solution

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

COMMIT

PUSHRun

Mr.Weerayut Hongsa - @kusumoto_ton

Page 95: Basic docker for developer

#docker solution

Image(from local)Dockerfile

BUILD

Image(from registry)

PUSH

PULL

Container

RUN

Build

Mr.Weerayut Hongsa - @kusumoto_ton

Page 96: Basic docker for developer

#docker solution

Image(from local)Dockerfile

BUILD

Image(from registry)

PUSH

PULL

Container

RUN

Ship

Mr.Weerayut Hongsa - @kusumoto_ton

Page 97: Basic docker for developer

#docker solution

Image(from local)Dockerfile

BUILD

Image(from registry)

PUSH

PULL

Container

RUN

Run

Mr.Weerayut Hongsa - @kusumoto_ton

Page 98: Basic docker for developer

Do you understand #dockerworkflow and #docker solution?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 99: Basic docker for developer

Next step, we talk about #dockercommand

Mr.Weerayut Hongsa - @kusumoto_ton

Page 100: Basic docker for developer

#docker workflow

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

COMMIT

PUSH

Mr.Weerayut Hongsa - @kusumoto_ton

Page 101: Basic docker for developer

Pull image from repository to localdocker pull ubuntu:xenial

Mr.Weerayut Hongsa - @kusumoto_ton

Page 102: Basic docker for developer

Pull image from repository to localdocker pull ubuntu:xenial

Image Name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 103: Basic docker for developer

Pull image from repository to localdocker pull ubuntu:xenial

Mr.Weerayut Hongsa - @kusumoto_ton

Page 104: Basic docker for developer

#docker workflow

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

COMMIT

PUSH

Mr.Weerayut Hongsa - @kusumoto_ton

Page 105: Basic docker for developer

Create container from image and run container

docker run ubuntu:xenial /bin/echo “hello word”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 106: Basic docker for developer

docker run ubuntu:xenial /bin/echo “hello word”

Image Name execute argument

Create container from image and run container

Mr.Weerayut Hongsa - @kusumoto_ton

Page 107: Basic docker for developer

docker run -d ubuntu:xenial /bin/echo “hello word”

Image Name execute argument

Create container from image and run container

parameter

Mr.Weerayut Hongsa - @kusumoto_ton

Page 108: Basic docker for developer

docker run ubuntu:xenial /bin/echo “hello word”

Create container from image and run container

Mr.Weerayut Hongsa - @kusumoto_ton

Page 109: Basic docker for developer

#docker workflow

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

COMMIT

PUSH

Mr.Weerayut Hongsa - @kusumoto_ton

Page 110: Basic docker for developer

List containerdocker ps

Mr.Weerayut Hongsa - @kusumoto_ton

Page 111: Basic docker for developer

List containerdocker ps

Mr.Weerayut Hongsa - @kusumoto_ton

Page 112: Basic docker for developer

List container (include stopped)docker ps -a

Mr.Weerayut Hongsa - @kusumoto_ton

Page 113: Basic docker for developer

List imagesdocker images

Mr.Weerayut Hongsa - @kusumoto_ton

Page 114: Basic docker for developer

List imagesdocker images

Mr.Weerayut Hongsa - @kusumoto_ton

Page 115: Basic docker for developer

Create a new image from a container’s changes

docker commit d927d74ecd97 kusumoto/testhello:latest

Image NameContainer

Mr.Weerayut Hongsa - @kusumoto_ton

Page 116: Basic docker for developer

Create a new image from a container’s changes

docker commit d927d74ecd97 kusumoto/testhello:latest

Mr.Weerayut Hongsa - @kusumoto_ton

Page 117: Basic docker for developer

#docker workflow

Image(from registry)

Image(from local)

Container Container (changed)

PULL

RUN

CHANGE

COMMIT

PUSH

Mr.Weerayut Hongsa - @kusumoto_ton

Page 118: Basic docker for developer

Push imagedocker push kusumoto/testhello:latest

Mr.Weerayut Hongsa - @kusumoto_ton

Page 119: Basic docker for developer

Push imagedocker push kusumoto/testhello:latest

Image Name (Match on repository)

Mr.Weerayut Hongsa - @kusumoto_ton

Page 120: Basic docker for developer

Push imagedocker push kusumoto/testhello:latest

Mr.Weerayut Hongsa - @kusumoto_ton

Page 121: Basic docker for developer

#docker workflow

Image(from local)Dockerfile

BUILD

Image(from registry)

PUSH

PULL

Container

RUN

Mr.Weerayut Hongsa - @kusumoto_ton

Page 122: Basic docker for developer

Build image from Dockerfiledocker build -t kusumoto/tutu-bigo-tofblive .

Mr.Weerayut Hongsa - @kusumoto_ton

Page 123: Basic docker for developer

Build image from Dockerfiledocker build -t kusumoto/tutu-bigo-tofblive .

Image Name Path Dockerfileparameter

Mr.Weerayut Hongsa - @kusumoto_ton

Page 124: Basic docker for developer

Build image from Dockerfiledocker build -t kusumoto/tutu-bigo-tofblive .

Mr.Weerayut Hongsa - @kusumoto_ton

Page 125: Basic docker for developer

#docker workflow

Image(from local)Dockerfile

BUILD

Image(from registry)

PUSH

PULL

Container

RUN

Mr.Weerayut Hongsa - @kusumoto_ton

Page 126: Basic docker for developer

Push imagedocker push kusumoto/tutu-bigo-tofblive:latest

Mr.Weerayut Hongsa - @kusumoto_ton

Page 127: Basic docker for developer

Push imagedocker push kusumoto/tutu-bigo-tofblive:latest

Image Name (Match on repository)

Mr.Weerayut Hongsa - @kusumoto_ton

Page 128: Basic docker for developer

Push imagedocker push kusumoto/tutu-bigo-tofblive:latest

Mr.Weerayut Hongsa - @kusumoto_ton

Page 129: Basic docker for developer

#docker workflow

Image(from local)Dockerfile

BUILD

Image(from registry)

PUSH

PULL

Container

RUN

Mr.Weerayut Hongsa - @kusumoto_ton

Page 130: Basic docker for developer

docker run -d kusumoto/docker-openresty:latest

Create container from image and run container

-d : run container in background mode

Mr.Weerayut Hongsa - @kusumoto_ton

Page 131: Basic docker for developer

docker run -d kusumoto/docker-openresty:latest

Create container from image and run container

Mr.Weerayut Hongsa - @kusumoto_ton

Page 132: Basic docker for developer

Utility Command

Mr.Weerayut Hongsa - @kusumoto_ton

Page 133: Basic docker for developer

docker exec -it 158b4a099baf bash

Execute shell into container

Mr.Weerayut Hongsa - @kusumoto_ton

Page 134: Basic docker for developer

docker exec -it 158b4a099baf bash

Execute shell into container

Mr.Weerayut Hongsa - @kusumoto_ton

Page 135: Basic docker for developer

docker run -d -p 80:80 nginx:latest

Image Name

Create container and expose port to real host

Run container background

Expose port from container port 80 to local port 80 [local:container]

Mr.Weerayut Hongsa - @kusumoto_ton

Page 136: Basic docker for developer

docker run -d -p 80:80 nginx:latest

Create container and expose port to real host

Mr.Weerayut Hongsa - @kusumoto_ton

Page 137: Basic docker for developer

docker run -d -v /home/kusumoto/test:/usr/share/nginx/html -p 80:80 nginx:latest

Mapping host volume to container

Mr.Weerayut Hongsa - @kusumoto_ton

Page 138: Basic docker for developer

docker run -d -v /home/kusumoto/test:/usr/share/nginx/html -p 80:80 nginx:latest

Mapping host volume to container

Run container backgroundExpose port from container port 80 to local port 80 [local:container]

Image Name

Mapping volume to container [host:container]

Mr.Weerayut Hongsa - @kusumoto_ton

Page 139: Basic docker for developer

docker run -d -v /home/kusumoto/test:/usr/share/nginx/html -p 80:80 nginx:latest

Mapping host volume to container

Mr.Weerayut Hongsa - @kusumoto_ton

Page 140: Basic docker for developer

docker system prune

System cleanup

Mr.Weerayut Hongsa - @kusumoto_ton

Page 141: Basic docker for developer

docker system prune

System cleanup

Mr.Weerayut Hongsa - @kusumoto_ton

Page 142: Basic docker for developer

docker login

Registry Authentication

Mr.Weerayut Hongsa - @kusumoto_ton

Page 143: Basic docker for developer

docker login

Registry Authentication

Mr.Weerayut Hongsa - @kusumoto_ton

Page 144: Basic docker for developer

Do you want to encapsulate your container?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 145: Basic docker for developer

Next step, we talk about #dockernetwork

Mr.Weerayut Hongsa - @kusumoto_ton

Page 146: Basic docker for developer

What is Docker Network?

”Control communicate between container”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 147: Basic docker for developer

Docker Network

Mr.Weerayut Hongsa - @kusumoto_ton

Page 148: Basic docker for developer

Create new #docker networkdocker network create --driver bridge --subnet=192.168.1.0/24 --ip-range=192.168.1.128/25 --gateway=192.168.1.5 --opt="com.docker.network.mtu"="1500" backend

Mr.Weerayut Hongsa - @kusumoto_ton

Page 149: Basic docker for developer

Create new #docker networkdocker network create --driver bridge --subnet=192.168.1.0/24 --ip-range=192.168.1.128/25 --gateway=192.168.1.5 --opt="com.docker.network.mtu"="1500" backend

Network driver Network subnet IP range for container use.Gateway for

master subnet Network name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 150: Basic docker for developer

Create new #docker networkdocker network create --driver bridge --subnet=192.168.1.0/24 --ip-range=192.168.1.128/25 --gateway=192.168.1.5 --opt="com.docker.network.mtu"="1500" backend

Mr.Weerayut Hongsa - @kusumoto_ton

Page 151: Basic docker for developer

List all #docker networkdocker network ls

Mr.Weerayut Hongsa - @kusumoto_ton

Page 152: Basic docker for developer

List all #docker networkdocker network ls

Mr.Weerayut Hongsa - @kusumoto_ton

Page 153: Basic docker for developer

Delete #docker networkdocker network rm backend

Mr.Weerayut Hongsa - @kusumoto_ton

Page 154: Basic docker for developer

Delete #docker networkdocker network rm backend

Network name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 155: Basic docker for developer

Delete #docker networkdocker network rm backend

Mr.Weerayut Hongsa - @kusumoto_ton

Page 156: Basic docker for developer

Run container and attach network docker run -d --name nginx --net backend --ip="192.168.1.130" -p 80:8080 nginx

Mr.Weerayut Hongsa - @kusumoto_ton

Page 157: Basic docker for developer

Run container and attach network docker run -d --name nginx --net backend --ip="192.168.1.130" -p 80:8080 nginx

Attach network to container

Assign ip address to container

Mr.Weerayut Hongsa - @kusumoto_ton

Page 158: Basic docker for developer

Run container and attach network docker run -d --name nginx --net backend --ip="192.168.1.130" -p 80:8080 nginx

Mr.Weerayut Hongsa - @kusumoto_ton

Page 159: Basic docker for developer

Do you want to store and control persistent data in container?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 160: Basic docker for developer

Next step, we talk about #dockerVolume

Mr.Weerayut Hongsa - @kusumoto_ton

Page 161: Basic docker for developer

What is Docker Volume?”Concept for manage persistent data in

container”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 162: Basic docker for developer

Type of Data Volumes

• Mount a host directory as a data volume• Mount a shared-storage volume as a data volume• Mount a host file as a data volume

Mr.Weerayut Hongsa - @kusumoto_ton

Page 163: Basic docker for developer

Mount a host directory as a data volume

Mr.Weerayut Hongsa - @kusumoto_ton

docker run -d -v /home/kusumoto/test:/usr/share/nginx/html -p 80:80 nginx:latest

Page 164: Basic docker for developer

docker run -d -v /home/kusumoto/test:/usr/share/nginx/html -p 80:80 nginx:latest

Run container backgroundExpose port from container port 80 to local port 80 [local:container]

Image Name

Mapping volume to container [host:container]

Mr.Weerayut Hongsa - @kusumoto_ton

Mount a host directory as a data volume

Page 165: Basic docker for developer

Mount a share-storage as a data volume

Mr.Weerayut Hongsa - @kusumoto_ton

docker volume create --driver=flocker volumename

Page 166: Basic docker for developer

Mount a share-storage as a data volume

Mr.Weerayut Hongsa - @kusumoto_ton

docker volume create --driver=flocker volumename

File System Driver

Page 167: Basic docker for developer

Mount a share-storage as a data volume

Mr.Weerayut Hongsa - @kusumoto_ton

docker container run -it –v volumename:/data busybox sh

Page 168: Basic docker for developer

Mount a share-storage as a data volume

Mr.Weerayut Hongsa - @kusumoto_ton

docker container run -it –v volumename:/data busybox sh

Mapping file to container [share-storage:container]

Page 169: Basic docker for developer

Mount a host file as a data volume

Mr.Weerayut Hongsa - @kusumoto_ton

docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash

Page 170: Basic docker for developer

Mount a host file as a data volume

Mr.Weerayut Hongsa - @kusumoto_ton

docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash

Mapping file to container [host:container]

Page 171: Basic docker for developer

Do you want make an easy to control multiple #docker node?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 172: Basic docker for developer

We’re recommend “Docker Machine”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 173: Basic docker for developer

Docker Machine is attached from Docker Toolbox

Mr.Weerayut Hongsa - @kusumoto_ton

Page 174: Basic docker for developer

What is Docker Machine?

”The tool for management #docker node”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 175: Basic docker for developer

Create new #docker nodedocker-machine create --driver virtualbox node1

Machine Name

Driver for connect

Mr.Weerayut Hongsa - @kusumoto_ton

Page 176: Basic docker for developer

Driver for docker-machine are support

Mr.Weerayut Hongsa - @kusumoto_ton

Page 177: Basic docker for developer

Create new #docker nodedocker-machine create --driver virtualbox node1

Mr.Weerayut Hongsa - @kusumoto_ton

Page 178: Basic docker for developer

List #docker nodedocker-machine ls

Mr.Weerayut Hongsa - @kusumoto_ton

Page 179: Basic docker for developer

List #docker nodedocker-machine ls

Mr.Weerayut Hongsa - @kusumoto_ton

Page 180: Basic docker for developer

Start #docker node by docker-machine

docker-machine start node1

Mr.Weerayut Hongsa - @kusumoto_ton

Page 181: Basic docker for developer

Start #docker node by docker-machine

docker-machine start node1

Machine Name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 182: Basic docker for developer

Start #docker node by docker-machine

docker-machine start node1

Mr.Weerayut Hongsa - @kusumoto_ton

Page 183: Basic docker for developer

Stop #docker node by docker-machine

docker-machine stop node1

Mr.Weerayut Hongsa - @kusumoto_ton

Page 184: Basic docker for developer

Stop #docker node by docker-machine

docker-machine stop node1

Machine Name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 185: Basic docker for developer

Stop #docker node by docker-machine

docker-machine stop node1

Mr.Weerayut Hongsa - @kusumoto_ton

Page 186: Basic docker for developer

Remove #docker nodedocker-machine rm node1

Mr.Weerayut Hongsa - @kusumoto_ton

Page 187: Basic docker for developer

Remove #docker nodedocker-machine rm node1

Machine Name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 188: Basic docker for developer

Remove #docker nodedocker-machine rm node1

Mr.Weerayut Hongsa - @kusumoto_ton

Page 189: Basic docker for developer

Show docker-machine environmentdocker-machine env

Mr.Weerayut Hongsa - @kusumoto_ton

Page 190: Basic docker for developer

Show docker-machine environmentdocker-machine env

Mr.Weerayut Hongsa - @kusumoto_ton

Page 191: Basic docker for developer

Connect shell to you #docker nodeeval "$(docker-machine env node1)"

Mr.Weerayut Hongsa - @kusumoto_ton

Page 192: Basic docker for developer

Connect shell to you #docker nodeeval "$(docker-machine env node1)"

Mr.Weerayut Hongsa - @kusumoto_ton

Page 193: Basic docker for developer

Do you think the container management very difficult?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 194: Basic docker for developer

Have a tooling for container management make an easy?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 195: Basic docker for developer

We’re recommend “Docker Compose”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 196: Basic docker for developer

What is Docker Compose?

”A tool for defining and running multi-container Docker applications.”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 197: Basic docker for developer

Docker Compose• A template for create and configuration container• YML format• Up and running in one command• Update all container in one command

Mr.Weerayut Hongsa - @kusumoto_ton

Page 198: Basic docker for developer

Example docker-compose.ymlversion: '2'services:web:build: .ports:- "5000:5000"volumes:- .:/code

redis:image: "redis:alpine"

Mr.Weerayut Hongsa - @kusumoto_ton

Page 199: Basic docker for developer

Command for execute docker-compose

Mr.Weerayut Hongsa - @kusumoto_ton

Page 200: Basic docker for developer

Up all container in docker-compose.ymldocker-compose up -d

Mr.Weerayut Hongsa - @kusumoto_ton

Page 201: Basic docker for developer

Up all container in docker-compose.ymldocker-compose up -d

Run all container in background

Mr.Weerayut Hongsa - @kusumoto_ton

Page 202: Basic docker for developer

Up all container in docker-compose.ymldocker-compose up -d

Mr.Weerayut Hongsa - @kusumoto_ton

Page 203: Basic docker for developer

Down all container in docker-compose.yml

docker-compose down

Mr.Weerayut Hongsa - @kusumoto_ton

Page 204: Basic docker for developer

Down all container in docker-compose.yml

docker-compose down

Mr.Weerayut Hongsa - @kusumoto_ton

Page 205: Basic docker for developer

List container in docker-compose stack

docker-compose ps

Mr.Weerayut Hongsa - @kusumoto_ton

Page 206: Basic docker for developer

List container in docker-compose stack

docker-compose ps

Mr.Weerayut Hongsa - @kusumoto_ton

Page 207: Basic docker for developer

If your application have a many current user?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 208: Basic docker for developer

Do you want to scale your application?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 209: Basic docker for developer

We’re recommend “Docker Swarm”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 210: Basic docker for developer

You can scale container to multiple machine via Docker Swarm

Mr.Weerayut Hongsa - @kusumoto_ton

Page 211: Basic docker for developer

Docker Swarm

Mr.Weerayut Hongsa - @kusumoto_ton

Page 212: Basic docker for developer

Docker Swarm

How can you control cluster?

Mr.Weerayut Hongsa - @kusumoto_ton

Page 213: Basic docker for developer

Docker Swarm

Choose a once node promote to manager

Mr.Weerayut Hongsa - @kusumoto_ton

Page 214: Basic docker for developer

Docker Swarm

Manager

Mr.Weerayut Hongsa - @kusumoto_ton

Page 215: Basic docker for developer

Docker Swarm

ManagerNode Node Node Node

Mr.Weerayut Hongsa - @kusumoto_ton

Page 216: Basic docker for developer

Docker Swarm

ManagerNode Node Node Node

Mr.Weerayut Hongsa - @kusumoto_ton

Page 217: Basic docker for developer

Docker Swarm

Mr.Weerayut Hongsa - @kusumoto_ton

Page 218: Basic docker for developer

Docker Swarm

Mr.Weerayut Hongsa - @kusumoto_ton

Page 219: Basic docker for developer

Docker Swarm

”Run the Docker in cluster mode”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 220: Basic docker for developer

Docker Swarm• Scalable container to multiple docker node.• Control container multiple docker node via docker swarm manager. • In Docker swarm, you’ll have some new concepts of “services” and “tasks”.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 221: Basic docker for developer

Initialize Docker Swarmdocker swarm init

Mr.Weerayut Hongsa - @kusumoto_ton

Page 222: Basic docker for developer

Initialize Docker Swarmdocker swarm init

Mr.Weerayut Hongsa - @kusumoto_ton

Page 223: Basic docker for developer

Initialize Docker Swarmdocker swarm init

Command for join to swarm

Mr.Weerayut Hongsa - @kusumoto_ton

Page 224: Basic docker for developer

Join node to your Docker Swarmdocker swarm join --token SWMTKN-1-3o58oh8ahb0ebzqen63pp8dub4u91oqfy4erenaswbulih1ywr-4xr2p6ipg2tqxeczw6cp183ob 192.168.99.100:2377

Mr.Weerayut Hongsa - @kusumoto_ton

Page 225: Basic docker for developer

Join node to your Docker Swarmdocker swarm join --token SWMTKN-1-3o58oh8ahb0ebzqen63pp8dub4u91oqfy4erenaswbulih1ywr-4xr2p6ipg2tqxeczw6cp183ob 192.168.99.100:2377

IP Address swarm manager

Token

Mr.Weerayut Hongsa - @kusumoto_ton

Page 226: Basic docker for developer

Join node to your Docker Swarmdocker swarm join --token SWMTKN-1-3o58oh8ahb0ebzqen63pp8dub4u91oqfy4erenaswbulih1ywr-4xr2p6ipg2tqxeczw6cp183ob 192.168.99.100:2377

Mr.Weerayut Hongsa - @kusumoto_ton

Page 227: Basic docker for developer

List all node list and node statusdocker node ls

Mr.Weerayut Hongsa - @kusumoto_ton

Page 228: Basic docker for developer

List all node list and node statusdocker node ls

Mr.Weerayut Hongsa - @kusumoto_ton

Page 229: Basic docker for developer

Leave node from swarm clusterdocker swarm leave

Mr.Weerayut Hongsa - @kusumoto_ton

Page 230: Basic docker for developer

Leave node from swarm clusterdocker swarm leave

Mr.Weerayut Hongsa - @kusumoto_ton

Page 231: Basic docker for developer

Create new service in swarm clusterdocker service create --name nginx-web -p 80:80 nginx:latest

Mr.Weerayut Hongsa - @kusumoto_ton

Page 232: Basic docker for developer

Create new service in swarm clusterdocker service create --name nginx-web -p 80:80 nginx:latest

Image Name

Expose port from service port 80 to local port 80 [local:container]

Service name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 233: Basic docker for developer

Create new service in swarm clusterdocker service create --name nginx-web -p 80:80 nginx:latest

Mr.Weerayut Hongsa - @kusumoto_ton

Page 234: Basic docker for developer

List all service in swarm clusterdocker service ls

Mr.Weerayut Hongsa - @kusumoto_ton

Page 235: Basic docker for developer

List all service in swarm clusterdocker service ls

Mr.Weerayut Hongsa - @kusumoto_ton

Page 236: Basic docker for developer

Scale up/down service in swarm clusterdocker service scale nginx=3

Mr.Weerayut Hongsa - @kusumoto_ton

Page 237: Basic docker for developer

Scale up/down service in swarm clusterdocker service scale nginx=3

Service name

Number of container

Mr.Weerayut Hongsa - @kusumoto_ton

Page 238: Basic docker for developer

Scale up/down service in swarm clusterdocker service scale nginx=3

Mr.Weerayut Hongsa - @kusumoto_ton

Page 239: Basic docker for developer

Update/Apply service in swarm clusterdocker service update nginx

Mr.Weerayut Hongsa - @kusumoto_ton

Page 240: Basic docker for developer

Update/Apply service in swarm clusterdocker service update nginx

Service name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 241: Basic docker for developer

Update/Apply service in swarm clusterdocker service update nginx

Mr.Weerayut Hongsa - @kusumoto_ton

Page 242: Basic docker for developer

Delete service in swarm clusterdocker service rm nginx

Mr.Weerayut Hongsa - @kusumoto_ton

Page 243: Basic docker for developer

Delete service in swarm clusterdocker service rm nginx

Service name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 244: Basic docker for developer

Delete service in swarm clusterdocker service rm nginx

Mr.Weerayut Hongsa - @kusumoto_ton

Page 245: Basic docker for developer

Add service stack from docker-compose.yml to swarm cluster

docker stack deploy --compose-file docker-compose.yml my_stack

Mr.Weerayut Hongsa - @kusumoto_ton

Page 246: Basic docker for developer

Add service stack from docker-compose.yml to swarm cluster

docker stack deploy --compose-file docker-compose.yml my_stack

Compose file Stack name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 247: Basic docker for developer

Add service stack from docker-compose.yml to swarm cluster

docker stack deploy --compose-file docker-compose.yml my_stack

Mr.Weerayut Hongsa - @kusumoto_ton

Page 248: Basic docker for developer

Delete stack in swarm clusterdocker stack rm my_stack

Mr.Weerayut Hongsa - @kusumoto_ton

Page 249: Basic docker for developer

Delete stack in swarm clusterdocker stack rm my_stack

Stack name

Mr.Weerayut Hongsa - @kusumoto_ton

Page 250: Basic docker for developer

Delete stack in swarm clusterdocker stack rm my_stack

Mr.Weerayut Hongsa - @kusumoto_ton

Page 251: Basic docker for developer

If you want to create your #dockerimage.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 252: Basic docker for developer

but need to customize image via script.

Mr.Weerayut Hongsa - @kusumoto_ton

Page 253: Basic docker for developer

We’re recommend “Dockerfile”

Mr.Weerayut Hongsa - @kusumoto_ton

Page 254: Basic docker for developer

Format of the Dockerfile

# CommentINSTRUCTION arguments

Mr.Weerayut Hongsa - @kusumoto_ton

Page 255: Basic docker for developer

Example Dockerfile

FROM scratchCOPY hello /CMD ["/hello"]

Mr.Weerayut Hongsa - @kusumoto_ton

Page 256: Basic docker for developer

Example Dockerfile

FROM scratchCOPY hello /CMD ["/hello"]

FROM microsoft/nanoserverCOPY hello.txt C:CMD ["cmd", "/C", "type C:\\hello.txt"]

Mr.Weerayut Hongsa - @kusumoto_ton

Page 257: Basic docker for developer

Dockerfile Instruction • FROM • RUN• CMD• EXPOSE• ENV• ADD• COPY• ENTRYPOINT• VOLUME• USER• WORKDIR• ARG

Mr.Weerayut Hongsa - @kusumoto_ton

Page 258: Basic docker for developer

.dockerignore file• Defined filename or path ignore in docker image.• .dockerignore is same .gitignore

Mr.Weerayut Hongsa - @kusumoto_ton

Page 259: Basic docker for developer

Build image from Dockerfiledocker build -t kusumoto/tutu-bigo-tofblive .

Mr.Weerayut Hongsa - @kusumoto_ton

Page 260: Basic docker for developer

Build image from Dockerfiledocker build -t kusumoto/tutu-bigo-tofblive .

Image Name Path Dockerfileparameter

Mr.Weerayut Hongsa - @kusumoto_ton

Page 261: Basic docker for developer

Build image from Dockerfiledocker build -t kusumoto/tutu-bigo-tofblive .

Mr.Weerayut Hongsa - @kusumoto_ton


Recommended