Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Docker
Search
張旭
October 10, 2016
Technology
0
140
Docker
Just another docker intro.
張旭
October 10, 2016
Tweet
Share
More Decks by 張旭
See All by 張旭
Using iTerm
zx1986
0
1k
Deployment with Capistrano
zx1986
0
120
半導體簡介
zx1986
1
560
Other Decks in Technology
See All in Technology
With Devin -AIの自律とメンバーの自立
kotanin0
2
120
AI エンジニアの立場からみた、AI コーディング時代の開発の品質向上の取り組みと妄想
soh9834
7
410
ecspressoの設計思想に至る道 / sekkeinight2025
fujiwara3
12
1.7k
「現場で活躍するAIエージェント」を実現するチームと開発プロセス
tkikuchi1002
6
1k
複数のGemini CLIが同時開発する狂気 - Jujutsuが実現するAIエージェント協調の新世界
gunta
12
3.3k
P2P通信の標準化 WebRTCを知ろう
faithandbrave
6
2.3k
「手を動かした者だけが世界を変える」ソフトウェア開発だけではない開発者人生
onishi
14
6.1k
2025-07-25 NOT A HOTEL TECH TALK ━ スマートホーム開発の最前線 ━ SOFTWARE
wakinchan
0
140
OpenTelemetry の Log を使いこなそう
biwashi
5
1k
Expertise as a Service via MCP
yodakeisuke
1
150
公開初日に個人環境で試した Gemini CLI 体験記など / Gemini CLI実験レポート
you
PRO
3
360
地図と生成AI
nakasho
0
720
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Gamification - CAS2011
davidbonilla
81
5.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Code Review Best Practice
trishagee
69
19k
Visualization
eitanlees
146
16k
Thoughts on Productivity
jonyablonski
69
4.7k
Art, The Web, and Tiny UX
lynnandtonic
301
21k
Designing for Performance
lara
610
69k
Building Applications with DynamoDB
mza
95
6.5k
Transcript
張旭 @ zx1986
Docker 是什麽? 從結果來看, 您可以使用 Docker 將 Application 封裝到一個相當類似於虛擬主機 (VM) 的隔離環
境 (術語叫 Container) 中執行。
Docker 是什麽? 想像一下,只要執行一行指令,您開發的網站就可 以掛載到一個已經配置好的「主機」中,立即提供服 務,啟動過程可以迅速到就像執行一次 ls 指令那 樣。
Docker 是什麽? 想像一下,您配置好的環境可以憑藉一個設定檔 (Dockerfile),在任何支援 Docker Container 的平 台運行起來,就像是將一台一模一樣的「主機」搬過 去插電 (或是虛擬主機複製)
運作起來一樣。
Docker 是什麽? 想像一下,寫一個設定檔 (docker-compose.yml), 使用一行指令,您就可以喚起多台「主機」,每臺負 責不同的服務,例如 HAProxy、Apache、MySQL、 Memcached,瞬間就可以全部啟動,且彼此間網路 是互通的,服務是可以對外開放的。
Docker 的特色 - 1 • 作業系統層級的虛擬化產品 • 實作涉及 Linux Kernel
功能 • 100% 原生硬體的效能 • 虛擬主機等級的隔離及資源分配 • 應用程式等級的輕量及方便
Docker 的特色 - 2 • 在呼叫 Linux 的核心提供的虛擬化模組時,0.9 版前還需依賴 LXC、libvirt
及 systemd-nspawn 的功能,0.9 版之後,就預設 使用自己開發的 libcontainter 來呼叫。 • 由唯讀的多層次映像檔 (Image) 做為模板 (產生 Container) • 產生 Container 後,保持最上層可寫入 (用來提供服務)
底層原理
Container 技術發展史 • 1979 - chroot • 2008 - LXC
• 2013 - LMCTFY (Let Me Contain That For You - Google) • 2013 - Docker • 2014 - Rocket • 2016 - Windows Containers
LXC (LinuX Containers) • Kernel Namespaces - PID, User, Mount,
Network 隔離 • Cgroups - CPU, Memory, Disk I/O 隔離 • Chroot - File System 隔離 Docker 0.9 以後已經改用自行開發的 libcontainter 來實作。
Docker is more than LXC • AUFS - Another Union
File System,相當於把 Host (Server) 的目錄當成 Guest (Container) 的 Disk。 • Base Image - 透過 base image,可以在 Docker上執行各種 的 Distribution Linux 而不受限於 Host 的 OS 種類,Image 裡面其實就是一堆必要檔案的集合。
None
None
技術名詞
Docker 術語 • Image • Container • Registry
Docker 術語 - Image A Docker image is a read-only
template. • 唯讀的映像檔 • 相當於 VM 的樣板機 • 不可變更的 (immutable)
Docker 術語 - Container A Docker container holds everything that
is needed for an application to run. Each container is created from a Docker image. • 以 Image 為基板,放到記憶體中執行的 • Docker 執行起來的最小單位 • Container 裡面必須有一個前景 (foreground) 執行的程式
Docker 術語 - Registry Docker registries hold images. • 存放
Image 的倉庫 • 類似 Github 之於 Git Repository 的角色
運作架構
簡單的 Docker Client / Server 架構
詳細一點的 Docker Client / Server 架構
原生與寄生的 Docker Server 差異
Docker Client 只要設定好正確的環境變數, 即可對遠端 Docker Server 進行操作: DOCKER_TLS_VERIFY="1" DOCKER_HOST="tcp://192.168.99.100:2376" DOCKER_CERT_PATH="/machines/certs/"
DOCKER_MACHINE_NAME="dev" Docker Client From Anywhere 妥善授權給 Docker Client
使用方法
安裝 Docker Client / Server
Docker 安裝 - Mac $ brew install docker-machine $ brew
install docker https://docs.docker.com/docker-for-mac 原生的,會把 docker-compose 也裝起來,COOL
Docker 安裝 - Ubuntu 14.04 $ sudo apt-get install apt-transport-https
ca-certificates $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D $ sudo vim /etc/apt/sources.list.d/docker.list deb https://apt.dockerproject.org/repo ubuntu-trusty main $ sudo apt-get update $ sudo apt-get purge lxc-docker $ sudo apt-get install docker-engine
Docker 安裝 - CentOS $ sudo vim /etc/yum.repos.d/docker.repo $ sudo
yum install docker-engine [docker-repo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg
Dockerfile
Dockerfile - 1 • 想象 Dockerfile 是一道食譜,大家根據食譜就可以烹調 (docker build) 出同樣一道菜
(Docker Image) 來。 • 可以勉強將 Dockerfile 先想像成 Ruby 的 Gemfile、 NodeJS 的 package.json 來理解, 但 Dockerfile 絕不僅僅 是宣告相依套件而已。 • Dockerfile 手冊 :https://docs.docker.com/engine/reference/builder/
Dockerfile - 2 FROM centos:6 MAINTAINER zx1986 <
[email protected]
> EXPOSE 80
3306 USER root ENV LANG en_US.UTF-8 ENV TZ=Asia/Taipei RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN rpm -iUvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm RUN yum -y update && yum -y groupinstall "Development Tools" RUN yum -y update && yum -y install python-pip && pip install meld3==1.0.0 supervisor CMD ["/usr/bin/supervisord"] • 一個簡單的 Dockerfile 範例
docker [client]
Docker 常用指令 • docker images • docker pull ubuntu •
docker run -it ubuntu bash • docker ps -a • docker stop • docker rm
None
docker-compose
docker-compose 安裝 $ curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-co mpose-`uname -s`-`uname -m` >
docker-compose $ chmod a+x docker-compose $ mv docker-compose /usr/local/bin/ $ docker-compose --version
docker-compose.yml • yaml 格式 (YAML Ain't Markup Language) • 給
docker-compose 指令看的設定檔。 • 根據 docker-compose.yml 的設定,docker-compose 可以一次啓 動多個 docker container,並設定之間的互通關聯、資料共享等。 • docker-compose 背後其實很多個 docker 指令的組合、搭配,類似 git-flow 工具的背後其實是很多 git 指令的組合。 • docker-compose.yml 手冊: https://docs.docker.com/compose/compose-file/
docker-compose 常用指令 • docker-compose up -d • docker-compose ps •
docker-compose restart • docker-compose logs -f • docker-compose stop • docker-compose rm
應用思考
Microservice - Martin Fowler • 微服務架構 (各自專注做好一件事) • 怎樣算是 Microservice?
◦ 兩個 Pizza 可以餵飽的團隊 (人數) ◦ 兩週可以開發完成的項目 (時間)
None
Container 到底該專一還是多工? • 專注於單一應用 (服務) 才符合 Docker 的精神? • 把
Docker 當成 VM 那樣使用? • Container 裡面要跑其他多個背景服務 (daemon) 怎麼辦? 推薦閱讀 http://phusion.github.io/baseimage-docker
Docker 的風險 • 一定要做分散式叢集服務 • 做好翻船的準備(請備妥救生艇 - 替代方案)
參考資料
• https://philipzheng.gitbooks.io/docker_practice/content/ • https://speakerdeck.com/fntsrlike/docker-chu-tan-shi-yan-shi-zhong-de-yun-huo-jing • https://speakerdeck.com/sskorc/docker-and-php • https://speakerdeck.com/akalyaev/inside-docker • https://speakerdeck.com/ndemoor/what-is-docker
• https://speakerdeck.com/slok/ship-it-with-docker • https://linux.cn/article-6975-1.html • http://lab.howie.tw/2014/08/docker-docker-lxc-hypervisor.html