Philipz(鄭淳尹)
桃園市教育局
容器技術入門與實作研習班
Day1
Philipz (鄭淳尹)
Docker.Taipei 共同發起人
歐萊禮《Docker 錦囊妙計》譯者
碁峰《Docker入門與實戰》、
《Kubernetes使用指南》審譯者
2014 COSCUP/iThome Summit 講者
2015 Microsoft Azure 開發者大會 講者
2016 COSCUP Docker 進階工作坊
2016 義守大學資工系 Docker 研習營
今日課程
1. 虛擬化技術介紹
2. 虛擬機與容器的差異
3. 介紹 Docker 生態系相關工具
4. 容器生命週期
5. Linux 基本指令、Docker 基本指令
6. 動手操作 Docker Engine
7. 建置第一個 Docker image
8. 使用 Azure Linux App Service 部署
0. Docker 和 Moby 之差異
1. 虛擬化技術介紹
虛擬化技術的歷史
● IBM zOS
● 虛擬化軟體 - VMware, KVM, Xen, VirtualBox
● Hardware-assisted virtualization 硬體加速
● Paravirtualization 半虛擬化
● 作業系統層虛擬化
a. OpenVZ
b. LXC
c. Docker
● IaaS, PaaS, SaaS - Snapshot, Migration
IaaS, PaaS and SaaS
虛擬化系統架構
2.1 虛擬機與容器的差異
Containers vs. VMs
Blog description
Blog description
特性 容器 虛擬機
啟動速度 秒級 分鐘級
性能 接近原生 較差
記憶體使用 很少 較多
硬碟使用 一般為MB 一般為GB
運行數量 單機支援上
千個容器
通常為幾十
個VMs
隔離性 安全隔離 完全隔離
遷移性 優異 一般
容器與虛擬機技術特性比較
Containers vs. VMs
Blog description
The Martix of Hell
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
Container Principle
Real Container
One Container
One Customer
One Commodity
Software Container
One Container
One Process
Containers are not VMs
Blog description
Adolf Hitler & Docker
3. 介紹 Docker 生態系
相關工具
Docker Engine
Docker Tools
Docker Compose
● 一鍵完成多個容器
● docker-compose.yml
● 支援 Docker Network
● 支援 Docker Volume
● 建構完整軟體服務
○ 如:3-tier
● 快速建置測試模擬環境
Docker Machine
● 在多種平台上建立 VM
● 一套工具適用所有雲端平
台、虛擬化平台
● 內建 Docker Engine
● 具備 SSH 功能
● 輕易切換多個平台
○ Docker API
● 只支援 Linux-based VM
Docker Swarm
● Docker Engine 內建功能
● 容器叢集系統
○ K8S、Mesos
● 大型容器運算平台
● 內建分散式鍵值儲存功能
● Manager-Node架構
○ Overlay、Compose YML
● DNS-based 服務發現機制
Docker Registry
● Docker 映像檔儲存服務
● 私有 Docker Hub
● 雲端平台提供代管服務
○ Azure、AWS、GCP
● Tag 版本控管
● 需第三方 OAuth 認證
● 建議直接使用雲端代管服務
Docker Datacenter
4. 容器生命週期
Docker 架構
Use Scenario
Commit
Push
Pull
Deploy
5.1 Linux 基本指令
Microsoft Azure
https://portal.azure.com/
5.2 Docker 基本指令
Install Docker
Install Docker on Ubuntu
or
curl -sSL https://get.docker.com/ | sh
and
docker run hello-world
Docker 管理用指令
Docker 映像檔指令
Docker 容器指令 (1/2)
Ctrl-p Ctrl-q
Docker 容器指令 (2/2)
2015-01-31 Study-Area
Gitbook: Docker 從入門到實踐
6. 動手操作
Docker Engine
Azure Firewall
docker run -d -p 80:80 nginx
docker run -ti --rm -p 80:80 nginx
docker run -ti --rm -p 80:80 nginx bash
Docker 架構
Azure DNS Setting
7. 建置第一個
Docker image
Docker Layers
建立 Docker 映像檔方式
1. Docker commit
2. Dockerfile - docker build
3. Docker Hub auto-build
4. FROM scratch
5. Based on others, ubuntu, alpine...
範例:
https://github.com/docker/labs/tree/master/beginn
er/static-site
docker save busybox > busybox.tar
docker load < busybox.tar
Dockerfile 使用說明
相同目錄, docker build .
docker build -f /other/folder/file .
附加 tag: docker build -t TAG_NAME .
範例:
FROM debian:jessie
MAINTAINER docker "docker@nginx.com"
RUN apt-get update && apt-get install -y nginx
CMD ["nginx", "-g", "daemon off;"]
Healthcheck from 1.12
Dockerfile 撰寫原則
1. 必須命名為 “Dockerfile”
2. 可用 .dockerignore 檔案,類似 .gitignore
3. 盡量縮減映像檔資料層(layers)
4. 結合多行指令和參數,如:RUN
5. ADD 和 COPY差異,詳細說明
6. CMD 和 ENTRYPOINT 差異
7. ONBUILD
8. EXPOSE 和 USER
9. WORKDIR 和 ENV
8. 使用 Azure Linux App
Service 部署
Azure Web App on Linux
Use Docker image for Web AP
Azure PaaS 價格選型
Exercise & Self-learning
1. Docker Basic - Katacoda by Philipz
2. Docker Trainning
3. Docker Free self-paced courses
4. Docker Tutorials and Labs
Online Self-learning
Offical Online Lab
Scalable Microservices with Kubernetes
- Udacity
See You Tomorrow!

桃園市教育局Docker技術入門與實作