手把手帶你學docker 03042017

86
手把手帶你學 入門篇 Philipz(鄭淳尹) 2017-03-04 廣宣學堂

Upload: paul-chao

Post on 07-Apr-2017

205 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 手把手帶你學Docker 03042017

手把手帶你學 入門篇

Philipz(鄭淳尹)2017-03-04

廣宣學堂

Page 2: 手把手帶你學Docker 03042017

Philipz (鄭淳尹)

Docker.Taipei 共同發起人

歐萊禮《Docker 錦囊妙計》譯者

碁峰《Docker入門與實戰》、

《Kubernetes使用指南》審譯者

2014 COSCUP/iThome Summit 講者

2015 Microsoft Azure 開發者大會 講者

2016 COSCUP Docker 進階工作坊

2016 義守大學資工系 Docker 研習營

Page 3: 手把手帶你學Docker 03042017

Today Topics1. The differents between VMs and Container,

Container lifecycle.2. Docker ecosystem tools3. Linux CLI、Docker CLI 4. Using Docker Engine5. Docker Hub intoduction6. Docker image & Docker hub autobuild7. Docker Network CLI & Docker Compose CLI8. Using Docker Compose9. Docker & Qemu & RPi Raspbian

Page 4: 手把手帶你學Docker 03042017

1. Compare VM with Container

Page 5: 手把手帶你學Docker 03042017

Virtualization History● IBM zOS● Virtual Hardware - VMware, KVM, Xen, VirtualBox● Hardware-assisted virtualization● Paravirtualization● OS-level virtualization

a. OpenVZb. LXCc. Docker

● IaaS, PaaS, SaaS - Snapshot, Migration

Page 6: 手把手帶你學Docker 03042017

The Martix of Hell

Page 7: 手把手帶你學Docker 03042017

A Brief History of Containers

1979: Unix V7 2000: FreeBSD Jails

2005: Open VZ 2008: LXC

2013: LMCTFY 2013: Docker

2016: Windows Container

From: A Brief History of Containers: From 1970s chroot to Docker 2016

Page 8: 手把手帶你學Docker 03042017
Page 12: 手把手帶你學Docker 03042017

Container PrincipleReal Container

One Container

One Customer

One Commodity

Software Container

One Container

One Process

Page 14: 手把手帶你學Docker 03042017

2. Docker ecosystem tools

Page 15: 手把手帶你學Docker 03042017

Docker Tools

Page 16: 手把手帶你學Docker 03042017

Still No Silver BulletContainer is one key element, not all.

DevOps pipeline process

Microservices, or other service stacks.

Infrastructure as Code

Business model

Page 17: 手把手帶你學Docker 03042017

Business model

Microservices

Infrastructureas Code

Container Design

DevOps

Page 18: 手把手帶你學Docker 03042017

*業務系統

微服務架構

Kubernetes

基礎架構即程式碼

容器式設計

自動化生產線

Page 19: 手把手帶你學Docker 03042017

Docker Datacenter

Page 20: 手把手帶你學Docker 03042017

3.1 Linux command-line

Page 21: 手把手帶你學Docker 03042017

Microsoft Azure

https://portal.azure.com/

Page 22: 手把手帶你學Docker 03042017
Page 23: 手把手帶你學Docker 03042017
Page 24: 手把手帶你學Docker 03042017
Page 25: 手把手帶你學Docker 03042017
Page 26: 手把手帶你學Docker 03042017

3.2 Docker command-line

Page 27: 手把手帶你學Docker 03042017

Install Docker

Install Docker on Ubuntuor

curl -sSL https://get.docker.com/ | shand

docker run hello-world

Page 28: 手把手帶你學Docker 03042017

2015-01-31 Study-Area

Gitbook: Docker 從入門到實踐

Page 29: 手把手帶你學Docker 03042017

Docker Management commands

Page 30: 手把手帶你學Docker 03042017

Docker image commands

Page 31: 手把手帶你學Docker 03042017

Docker container commands (1/2)

Page 32: 手把手帶你學Docker 03042017

Docker container commands (2/2)

Page 33: 手把手帶你學Docker 03042017

4. Docker Engine Playground

Page 34: 手把手帶你學Docker 03042017

Azure Firewalldocker run -d -p 80:80 nginx

docker run -ti --rm -p 80:80 nginxdocker run -ti --rm -p 80:80 nginx bash

Page 35: 手把手帶你學Docker 03042017

Azure DNS Setting

Page 36: 手把手帶你學Docker 03042017

5. Docker Hub introduction

Page 37: 手把手帶你學Docker 03042017

Docker Hub = App Store● Public Docker Registry● One free private repo. ● Auto-build & Webhook● Security Scanning is not free.●

Page 38: 手把手帶你學Docker 03042017

GitHub & Docker Hub

Page 40: 手把手帶你學Docker 03042017
Page 41: 手把手帶你學Docker 03042017
Page 42: 手把手帶你學Docker 03042017

6.1 Docker image & Dockerfile

Page 43: 手把手帶你學Docker 03042017

Docker Layers

Page 44: 手把手帶你學Docker 03042017

Create Docker image1. Docker commit2. Dockerfile - docker build3. Docker Hub auto-build4. FROM scratch5. Based on others, ubuntu, alpine...Example:https://github.com/docker/labs/tree/master/beginner/static-sitedocker save busybox > busybox.tardocker load < busybox.tar

Page 47: 手把手帶你學Docker 03042017

Use Scenario

Commit

Push

Pull

Deploy

Page 48: 手把手帶你學Docker 03042017

6.2 Docker Hub Auto-build

Page 50: 手把手帶你學Docker 03042017

Git Workflow1. git init or init on GitHub.2. git add Dockerfile3. git commit -m “First init”4. git remote add origin

https://github.com/YOURNAME/docker_build.git

5. git push origin master

Page 51: 手把手帶你學Docker 03042017

Create Auto-build Repo.

Page 52: 手把手帶你學Docker 03042017

Build Settings

docker pull YOURNAME/IMAGENAME

Page 53: 手把手帶你學Docker 03042017

7.1.1 Docker Network command-line

Page 54: 手把手帶你學Docker 03042017

TCP/IP Foundationwww.google.com, www is hostname, google.com is domain name.Localhost: 127.0.0.1TCP/UDP Port: 0-65535 = 2^16,

but 0 is a reserved port.Private IP:

10.0.0.0/8172.16.0.0/12 ~172.31.0.0/12192.168.0.0/16

Page 55: 手把手帶你學Docker 03042017

Network and connectivity commands

https://docs.docker.com/engine/userguide/networking/

Page 57: 手把手帶你學Docker 03042017

Exercise 1$ docker network ls

$ ifconfig

$ docker run -ti --rm busybox sh

cat /etc/hosts, ifconfig

$ docker network inspect bridge

$ docker run -itd --name=container1 busybox$ docker run -itd --name=container2 busybox$ docker exec -ti container2 sh

ping -w3 172.17.0.2, ping container1

Page 58: 手把手帶你學Docker 03042017

Exercise 2$ docker network create vlan_1

$ docker network inspect vlan_1

$ ifconfig | more

$ docker run --network=vlan_1 -itd --name=container3 busybox

$ docker network inspect vlan_1

$ docker run --network=vlan_1 -itd --name=container4 busybox

$ docker exec -ti container4 shping -w3 172.17.0.2, ping container1, ping container3

Page 59: 手把手帶你學Docker 03042017

Exercise 3$ docker network create wp_db

$ docker pull mysql:5.7

$ docker pull wordpress

$ docker run -d --name db --network=wp_db -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress mysql:5.7

$ docker run -d --name wp -p 80:80 --network=wp_db -e WORDPRESS_DB_HOST=db:3306 -e WORDPRESS_DB_PASSWORD=wordpress wordpress

Page 60: 手把手帶你學Docker 03042017

7.1.2 Docker Volume command-line

Page 62: 手把手帶你學Docker 03042017

Exercise$ docker volume create \

--name composewp_db_data$ docker pull mysql:5.7$ docker pull wordpress$ docker run -d --name db --network=wp_db

-e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -v composewp_db_data:/var/lib/mysql mysql:5.7

$ docker run -d --name wp -p 80:80 --network=wp_db -e WORDPRESS_DB_HOST=db:3306 -e WORDPRESS_DB_PASSWORD=wordpress wordpress

Page 64: 手把手帶你學Docker 03042017

7.2 Docker Compose command-line

Page 65: 手把手帶你學Docker 03042017

Install Docker Composesudo curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o \/usr/local/bin/docker-compose

and

sudo chmod +x /usr/local/bin/docker-compose

docker-compose -v

Page 66: 手把手帶你學Docker 03042017

Docker Compose commands (1/2)Commands: build Build or rebuild services bundle Generate a Docker bundle from the Compose file config Validate and view the compose file create Create services down Stop and remove containers, networks, images, and volumes events Receive real time events from containers exec Execute a command in a running container help Get help on a command kill Kill containers logs View output from containers pause Pause services port Print the public port for a port binding

Page 67: 手把手帶你學Docker 03042017

Docker Compose commands (2/2)Commands: ps List containers pull Pull service images push Push service images restart Restart services rm Remove stopped containers run Run a one-off command scale Set number of containers for a service start Start services stop Stop services unpause Unpause services up Create and start containers version Show the Docker-Compose version information

Page 69: 手把手帶你學Docker 03042017

8. Using Docker Compose

Page 70: 手把手帶你學Docker 03042017

Compose File Sample (1/2)version: '2'

services:

db:

image: mysql:5.7

volumes:

- db_data:/var/lib/mysql

restart: always

environment:

MYSQL_ROOT_PASSWORD: wordpress

MYSQL_DATABASE: wordpress

MYSQL_USER: wordpress

MYSQL_PASSWORD: wordpress

Page 71: 手把手帶你學Docker 03042017

Compose File Sample (1/2) wordpress:

depends_on:

- db

image: wordpress:latest

ports:

- "8000:80"

restart: always

environment:

WORDPRESS_DB_HOST: db:3306

WORDPRESS_DB_PASSWORD: wordpress

volumes:

db_data:

Page 74: 手把手帶你學Docker 03042017

Docker Compose & CI/CDGitHub, CircleCI, Docker Hub = GitLab

Testing level? Coding effort? Env. build-up effort?

Page 75: 手把手帶你學Docker 03042017

End to End TestsCI with Docker Compose is easy to implement.

From: Oreilly - Building Microservices

Page 76: 手把手帶你學Docker 03042017

Container Development Flow

From: Testing Strategies for Docker Containers

Page 77: 手把手帶你學Docker 03042017
Page 78: 手把手帶你學Docker 03042017

9. Docker & Qemu & Raspberry Pi Raspbian

Page 81: 手把手帶你學Docker 03042017
Page 82: 手把手帶你學Docker 03042017

Why resinOShttps://resinos.io/

Page 83: 手把手帶你學Docker 03042017

10. Demo TensorFlow with Docker

Page 86: 手把手帶你學Docker 03042017

Hope You Love DockerSo long!