SlideShare une entreprise Scribd logo
1  sur  69
Docker進階探討
Docker內部實做細節與docker-compose/machine/swarm
大綱
• Docker的那些事
• 倉儲(Registry)
• 資料卷(Volume)
• 網路(Network)
• Docker compose
• Docker machine
• Docker swarm
Docker的組成
LXC
Cgroup
NameSpace
chroot
Other tools AUF
• Docker在LXC的基礎上實現
• LXC是Linux內核容器技術的簡
稱,內部由以下組成:
• Cgroup
• Namespace
• Chroot
• 其它工具
• 採用AUF多層次檔案結構,提供
容器的擴充性
Cgroup
CPU Memory
/cpu_mem_cg
/cgroup_2
/cgroup_1
Cgroup Hierachy
--cpu-shares
--cpuset-cpus
--net
--memory
--blkio-weight
資源管理
Task
1
Task
2
Task
n…
• 由使用者自行定義資源群組
• Cgroup主要是做資源的控制,並將程序(Processor)
放進一個控制群組(group)中
• 透過分配資源給予這個控制群組,達成控制程序
的資源
Namespace
MNT
PID
NET
IPC
UTS
USER
• MNT: 掛載點,檔案系統…等
• PID: 程序
• NET: NIC,路由…等
• IPC: 系統IPC
• UTS: 主機/域名
• USER: UID/GID
Proc
1
Proc
2
Root namespace
Proc
1
Proc
2
Namespace A
• 針對同一類資源抽象化,將其封裝
• 每個Namespace都有一份獨立的資源,
彼此不可見
• 在同一個種類(i.e. PID)中,資源的識別碼
是獨一無二;同一個識別碼可在不同Namespace
出現
AUFS與Cow(Copy on write)
File 1 File 2
File 3
File 4
File 1 .wh.File 3 Top層
基底層
第一層
第二層
• 上層映象檔依賴於下層,每層映象檔都是Read-only
• 啟動後的容器,最頂層是Writeable
• 若某個檔案是第一次被修改,頂層會從底層copy檔案;
若某個檔案被刪除,則會以whiteout檔案來取代
Docker核心協作
• Cgroup提供容器管理資源的使用
• Namespace確保每個容器彼此獨立,
而不會互相干擾
• AUFS提供映像檔的擴充性
VM與容器-兼容
Physical Server
Hypervisor
OS
Docker Engine
Bins/Libs
App 1
Bins/Libs
App 2
OS
Docker Engine
Bins/Libs
App 3
Bins/Libs
App 4
• VM對於硬體的隔離性相較於容器為佳
• 以VM作為硬體隔離的邊界控制,而在VM
中使用容器
• 每一個應用程式跑在一個容器上
映象檔
• 映象檔的資料結構:
• 元資料(Metadata)
• 多層映象檔
• 元資料紀錄了整個映象檔的相關資訊,
包含組態資訊與每層的檔案大小
• 當映象檔的層數越多,則相對地會產生
許多瑣碎的小檔案,不利於I/O
• 映象檔無法加密,但可以使用notary簽名機制
映象檔的儲存機制- Content Addressable
Storage(CAS)
• 映象檔中的分層透過內容加密Hash來引用與
儲存
• 提供了更高的安全性,也避免了ID衝突的問題
• 容器的ID依然是採用隨機產生的UUID,而其內
的每層都是依內容所產生的Hash值
映象檔名稱解析
Remote-dockerhub.com/namespace/busybox:latest
(遠端映象檔來源Url) (命名空間) (倉儲) (標籤)
• 遠端映象檔來源Url: 集中存放映象檔的Web俟服器位址
• 命名空間: 使用者帳號/組織中所有映象檔的集合
• 倉儲: 一個倉儲可以有多個映象檔
• 標籤: 用來區分同一個用來區分映象檔的不同版本
小結-
Docker的那些事
• Docker本身是一個Processor等級的虛擬化
• Cgroup + Namespace都是Linux核心本身具備的
• VM與Docker兩者並非零和競爭,而是應該在實務中合併使用
• Docker映象檔的特性讓Docker變得更具備彈性
• Docker不斷地在效能方面有著更多的提升
倉儲(Registry) –應用
RegistryImage
Container
Dockerfile
Backup.tar
commit run
save
load
stop/start/restart
tag
本機Docker實體
build
push
pull
本機
• 在開發的過程中利用公有倉儲取得映象檔
• 使用Dockerfile建構出所需要的映象檔,
接著再推到私有倉儲做管理
倉儲與CI/CD
Public Registry
Developer
Private Registry
Dev
QA
Prod
Pull
Push/Pull
Pull &
Deploy
• 開發人員從公有倉儲取得基礎映象檔,
在經過異動之後推送到私有倉儲
• 經過專案的持續進行,開發人員從私有
倉儲拉取修改完畢後,再推送回私有倉儲
• CI工具從私有倉儲取得映象檔,並在各個環境
中運行映象檔成為容器
小結-
倉儲
• 私有倉儲對於開發和維運上都是極為重要的元件
• 盡可能使用官方提供的映象檔作為基礎映象檔來擴充,並將擴充後
的成果放(Push)到私有倉儲
• 可利用映象檔的標籤來區分不同開發環境所需要使用的映象檔
資料卷
Docker Engine
Mount
Volume Plugin
Device
Storage 平台
Docker主機
• 容器本身不會將資料持久化;當容器執行完畢
之後,所有資料都將消失
• 容器可以綁定資料卷,將資料持久化到儲存裝
置上
• Docker提供Plugin機制,讓資料持久化能有更高
的擴充性
資料卷操作模式-主機掛載
Docker Engine
Mount Device
Storage
Docker主機
• 在啟動一個容器時,加上-v的旗標來指示
要將主機上那一個資料夾作為資料卷掛載
到容器中的那一個資料夾
• 無法直接掛載遠端機器上的資料卷
資料卷操作模式-資料卷容器
Docker Engine
Docker主機
• 創建一個資料卷容器是為了讓資料可以
更方便的被其它容器共用
• 使用docker create –v的方式來創建一個
資料卷容器
• 其它容器可以使用--volumes-from指示來
存取資料卷容器
--volumes-from --volumes-from
Docker create -v
資料卷操作模式-資料卷插件
Docker Engine Volume Plugin
Storage 平台
Docker主機
• Docker插件是一個Web Service服務以背景
服務的方式在主機上運行
• 資料使用Http並以Json資料格式傳輸
• 插件的運行是自行管理,不受Docker Daemon
干涉
• 以docker volume create創建插件
• 以- -volume-driver指定使用的資料卷插件
具名資料卷範例
Step1. 創建一個名為temp的資料卷
Step2. 檢視是否有創建成功
Step3. 創建容器並且添加一個檔案:Blah
Step4. 創建第二容器並且檢查是否有檔案:Blah
• 這種創建資料卷的方式,帶來的壞處就是
它與主機是綁定的;只能在這台主機才能
共用這個資料卷
• 資料卷若沒用到記得要定期刪除,可用指令:
docker system prune
資料卷容器範例
• 採用資料卷容器的好處在於其它容器只需要
和它綁定,就能夠共享持久化的資料
• 資料卷容器同樣有資料卷遺留的問題,需要定期
清除沒用到的資料卷
Step1. 創建一個資料卷容器,並且映射到主機某個位置
Step2. 以volumes-from指示要與那個資料卷容器綁定
小結-
資料卷
• 資料卷是用來處理容器無法將資料持久化的問題
• 實務上,資料卷只能視為是持久化資料的一種替代手段,應該要把
資料儲存到資料庫中
• 資料卷有著難以移轉的困擾,可以考慮使用第三方資料卷驅動來處
理這個問題
Docker網路概念
Endpoint
網路沙箱
Docker容器
網路1
Endpoint
網路沙箱
Docker容器
Endpoint
網路2
Endpoint
網路沙箱
Docker容器• 沙箱: 是一個隔離的網路
執行環境,儲放了容器網
路棧的組態
• 端點: 將沙箱加入到一個
網路;採用veth pair來實做
• 網路: 網路包括一組能互相
通訊的端點
• 一個端點只能隸屬於一個沙箱及一個網路,
透過給沙箱添加多個端點,可以讓沙箱加入
多的網路
• 沙箱是用Linux的Network Namespace來實現的
Docker網路模式- 主機
eth0
Container
eth0
Docker主機
• 容器會直接繼承自主機的網路設定
• 兩者所有的IP設定會是一致的
Docker網路模式- 網路橋接器
Container
eth0
Docker主機
vethxxx
docker0
eth0
veth pair
iptable
• Docker預設有一個名為:docker0的網路橋接器
• 當使用者沒有指定容器運行的模式,預設會直接套用橋接器模式
Docker網路模式- 無網路
Container
Docker主機
• 容器的運行如果需要自行設定網路組態,則需要強制設定無網路模式
• 一旦設定了無網路模式,就需要以exec指令進入運行中的容器,進行
網路組態的手動設定
Docker網路模式- Overlay
Container
eth0
Docker主機
vethxxx
docker0
eth0
veth pair
iptable
Container
eth0
Docker主機
vethxxx
docker0
eth0
veth pair
iptable
vxlanvxlan
eth1 eth1
• Overlay網路應用在跨主機網路通訊之用
• 僅能在處於Swarm模式且為管理節點上創建Overlay網路
小結-
網路
• 在過去會使用link旗標來串連容器,但這個方法有著容器啟動順序
的限制
• 網路帶來的好處是可以讓該網路中的所有容器,彼此以容器的名稱
來找到對方
Docker Compose
• Docker compose是應用在多容器協作的情境
• 使用Docker Compose之後,就不需要使用Shell
來啟動多個容器
• 僅需要一個組態檔案,就可以啟動多個容器,
並且處理好多個容器之間的鏈接和依賴
Docker Compose指令-
up,stop,start
指令: up
目的: 啟動服務
範例: docker-compose up [options] [Service…]
描述: 此命令會嘗試自動完成,包括: 建構映象檔,創建服務,啟動服務,並關聯服務相關容器的
一系列操作。
若容器組原本已經處於運行狀態,會嘗試停止並重新創建;若不希望停止,則在以命令:
docker-compose up - -no-recreate
指令: stop
目的: 停止某個運行中的容器
範例: docker-compose stop [options] [Service…]
描述: 會停止指定並處於運行中的容器,但不會刪除它
指令: start
目的: 啟動某個停止中的容器
範例: docker-compose start [Service…]
描述: 會啟動指定並處於停止中的容器
Docker Compose指令-
build, logs, port
指令: build
目的: 建構服務
範例: docker-compose build [options] [Service…]
描述: 建構(重新建構)某個服務容器,建構完畢後會多加一個tag名稱;
若資料夾名為web,而建構的對象是db,則tag名稱為:web_db
指令: logs
目的: 查看服務的輸出資訊
範例: docker-compose logs [options] [Service…]
描述: 查看容器的輸出,預設情境下,docker-compose會針對不同服務以不同顏色來區分
指令: port
目的: 開放某個容器的埠號與公共的埠號
範例: docker-compose port [options] service private_port
描述: 可以使用- -protocol來指定傳輸協定和埠號
- -index來指定執行此命令的對象容器
Docker Compose指令-
scale, run, kill
指令: scale
目的: 擴展容器的數量
範例: docker-compose scale [options] [service=num, …]
描述: 可以一次擴展指定服務的容器個數
docker-compose scale web=3 db=2
指令: run
目的: 在指定的容器上執行一段指令
範例: docker-compose run [options] [-p Port…] [-e key=value…] service [command] [Args…]
描述: docker-compose run Ubuntu ping docker.com
這將會啟動一個Ubuntu容器,並執行指令: ping docker.com
預設情況下,除了Ubuntu之外,會連帶將其相關聯的服務都啟動,若不想要這個預設行為,可以加上
- -no-deps
指令: kill
目的: 強制停止某個服務容器
範例: docker-compose kill [options] [service…]
描述: 透過發送SIGKILL訊號來強制停止服務容器
docker-compose kill –s SIGINT
Docker Compose指令-
scale, run, kill
指令: rm
目的: 刪除所有處於停止狀態的容器
範例: docker-compose rm [options] [service…]
描述: 建議先以stop指令停止容器,再使用這個指令,其有兩個常用旗標:
-f,--force 強制直接刪除,包含非處於停止中的容器
-v 刪除容器所掛載的資料卷
指令: ps
目的: 列出目前專案中所有的容器
範例: docker-compose ps [options] [service…]
描述: 可以加上-q旗標,這樣docker compose只會輸出容器ID
Docker Compose 組態檔案
version: [版本]
services:
[服務名稱]:
build 或 image: …
ports:
- “port映射”
networks:
- [網路1]
volumes:
- [位址]
volumes:
[位址]:
networkds:
[網路名稱]:
• 目前最新是第三版
• Yml的結構為階層式,除了第一階層,餘下每個階層
都是以”兩個空白”開頭
• 服務可以有多個,若彼此是使用link來串連,則啟動
時,docker-compose會依序啟動容器
(建議仍是採用network的方式來串起多個容器)
docker-compose.yml
Docker-compose組態命令-
build, image, container_name, command
指令: build
目的: 建構映象檔,並使用這個映象檔
範例: build: [路徑]
描述: 指定Dockerfile所在的路徑(可以是絕對/相對*.yml路徑)
指令: container_name
目的: 容器名稱
範例: container_name: [容器名稱]
描述: 預設名稱格式為: 專案名稱_服務名稱_序號
指令: command
目的: 執行命令
範例: command: [指令] [參數…]
描述: 覆蓋容器啟動後,預設執行的指令
指令: image
目的: 服務的映象檔
範例: image: [名稱 | ID]
描述: 若本地找不到,docker-compose會嘗試去拉取(pull)
Docker-compose組態命令-
environment, env_file, extends
指令: environment
目的: 設定環境變數,可使用陣列/字典兩種格式
範例: environment:
- [key]:[value]
描述: 要注意的是;如果值是布林值(true|false, yes|no),最好使用引號以避免發生解析錯誤的問題
指令: env_file
目的: 從檔案中取得環境變數,可以是檔案路徑或是列表
範例: env_file:
- [檔案路徑]
描述: 環境變數檔案中的每一個變數都需要符合”鍵值對”的格式,亦支持#開頭的註解方式
指令: extends
目的: 基於其它樣版檔案進行擴展
範例: extends:
file: [樣版檔案].yml
service: [樣版檔案中定義的某個Service]
描述: 要避免出現循環依賴的問題;並且extends不會繼承links和volumes_from定義的內容
建議: 盡可能在樣版檔案中定義一些可共享的映象檔和環境變數
Docker-compose組態命令-
expose, ports, links
指令: expose
目的: 曝露端點給其它docker-compose中定義的其它容器使用
範例: expose:
- “[埠號]”
描述: 這個端點的埠號不會與宿主主機綁定
指令: links
目的: 鏈結到其它服務的容器
範例: links:
- [服務名稱]
- [服務名稱]:[別名]
描述: 若直接使用服務名稱,則此服務名稱亦會成為其別名被容器所使用
指令: ports
目的: 曝露端點給其它docker-compose中定義的其它容器使用
範例: ports:
- “[埠號]”
- “[宿主埠號]”:”[容器埠號]”
描述: 若只有指定埠號,則宿主主機會隨機挑選一個埠號與之對映
Docker-compose組態命令-
volumes, volumes_driver, volumes_from
指令: volumes
目的: 資料卷所掛載路徑設定
範例: volumes:
- [宿主主機絕對/相對路徑]:[容器絕對/相對路徑]
- [宿主主機絕對/相對路徑]:[容器絕對/相對路徑]:[存取模式]
指令: volumes_from
目的: 從另一個服務或容器掛載它的資料卷
範例: volumes_from:
- [服務名稱]
- [容器名稱]
指令: volumes_driver
目的: 使用第三方的驅動來創建一個資料卷
範例: volumes_driver: [driver名稱]
Docker-compose的網路設定
• Docker compose會在執行docker-compose up命令的時候,自動建構一個網路給
所有定義在組態檔案內的服務使用
• 早期常會使用link指令去串連指定的服務,但彼此會因為啟動的順序而造成docker-compose
啟動時間變得冗長
• 當前可以使用depends_on來取代link,如此一來,服務的啟動不需要等待彼此,速度會更快
Volumes設定的概念
• 常會看到在第一階層定義了一個volumes,
但是在每個服務內部又有一個volumes
• 第一階的volumes定義的是資料卷名稱後綴(Postfix)
• 可在第一階後綴添加存取權限(例: ro/rw)
• 資料卷的名稱則是:
專案(資料夾名稱)_定義的名稱(db_data)
小結-
docker-compose
• 實務上,經常會需要多個容器一起協作,docker-compose是專司處理
這方面的工作
• 越來越多的編排(Orchestractor)工具支援docker-compose
• 當前的docker-compose已經支援到第三版(2017/03)
Docker Machine
• 採用Go語言撰寫
• 支援多種後端驅動,包括:虛擬機,和雲平台
• 可以使用-d來指示要使用的驅動,目前支援的有:
• Amazon EC2
• Azure
• Digitalocean
• Exoscale
• Generic
• Google
• None
• Openstack
• Rackspace
• Softlayer
• Virtualbox
• VMware vCloudair
• VMware vSphere
Docker-machine指令
• active: 查看目前啟用中的Docker主機
• config: 輸出當前連接主機的組態資訊
• create: 創建一個Docker主機
• env: 顯示指定的Docker主機,其環境變數
• inspect: 輸出指定Docker主機更多詳細資訊
• ip: 取得Docker主機的IP
• kill: 停止指定的Docker主機
• ls: 列出所有管理的主機
• regenerate-certs: 為某個Docker主機重新產生TLS憑證資訊
• restart: 重啟指定Docker主機
• rm: 刪除指定Docker主機
• ssh: ssh連線到指定Docker主機
• scp: 在Docker主機之間複製檔案
• start: 啟動指定Docker主機
• stop: 停止指定Docker主機
• upgrade: 更新Docker主機的Docker版本
• url: 取得指定Docker主機的Url
小結-
docker-machine
• 利用docker-machine可以快速在各種不同平台建立出一台具有完
備Docker功能的虛擬機
• 在Hyper-V上,盡可能創建獨立的虛擬機網路給自建的docker主機使
用
• 未來支援的平台會越來越多
Docker Swarm
• Docker Swarm是一套管理Docker叢集的工具,它
將一群Docker的宿主主機虛擬成為單一個主機
• Docker Swarm使用標準的Docker API作為其前端
的存取端點,因此,各種Docker整合工具都能夠與
它輕鬆的整合在一起
• Swarm有兩種模式,較早期的是容器模式,而最新的
則是Swarm模式
Swarm架構
Store
Scheduler
Discovery
Service
Swarm Manager Docker
Client
Docker APIs
over HTTP
Docker
Hub
Docker
Daemon
Swarm Node
Docker
Daemon
Swarm Node
Docker
Daemon
Swarm Node
HTTPHTTP
Docker APIs
over HTTP
• 在使用Swarm管理叢集時,會有一群扮演Manager,
以及工作節點。
• Client只需要和Manager溝通,而Manager會依據
Discovery Service的資訊來選擇一個工作節點來服務
Swarm排程
第一階段:
套用過濾器
• Constraint
• 挑選滿足所有條件的節點,通常是限制
作業系統
• Affinity
• 從三個面向: 容器/映象檔/標籤來挑選
節點
• Port
• 挑選尚未被使用掉所期望埠號的節點
• Dependency
• 與某些資源有強依賴性,挑選符合具有
這些資源的節點
• Health
• 避開有可能會進入不健康狀態的節點
第二階段:
依策略執行
• Binpack
• 依資源進行排序,挑選最佳的節點
• Spread
• 依資源排序,且挑選容器數少的節點
• Random
• 隨機挑選一個節點
Swarm探索服務
• 藉由Consul這個第三方的服務探索系統來達成
HA的效果
• 當某個節點崩潰,管理節點可以透過Consul感知到
• 節點的管理責任可由Consul負擔絕大部份
Swarm Manage
Docker Daemon
2375
Consul
Swarm Join
2375
8500
Swarm Manager 1
Swarm Manage
Docker Daemon
2375
Consul
Swarm Join
2375
8500
Swarm Manager 2
Swarm Manage
Docker Daemon
2375
Consul
Swarm Join
2375
8500
Swarm Manager 3
40008300
8300
Swarm Join
Docker Daemon
Swarm Worker 1
Swarm Join
Docker Daemon
Swarm Worker 2
Swarm Join
Docker Daemon
Swarm Worker 3
8500
8500
8500
2375
2375
2375
Swarm ManagerSwarm Worker
User
Dev/DevOps
以容器建構Swarm -
Consul-Server
docker run –p 8400:8400 –p 8500:8500 –p 8600:53/udp –h node_master progrium/consul
-server –bootstrap
http://localhost:8500
以容器建構Swarm -
Consul - Replica
docker run –d - -name node_worker –h node_worker progrium/consul
--server –join [Consul Server Container IP]
目前已有兩個Node
以容器建構Swarm -
Swarm Manager Node
docker run –d –p 4000:4000 swarm manage –H :4000
--replication - -advertise :4000 consul://[Consul Server Container IP]:8500
以容器建構Swarm -
Swarm Worker Node
docker run –d swarm join - -advertise [node IP]:2375 consul://[Consul Server Container IP]:8500
以容器建構Swarm -
確認狀態
• 藉由這個指令觀查Docker Swarm的狀態
• 目前僅有加入一個工作節點-moby
docker –H :4000 info
Swarm三種版本
Docker Swarm Swarm Kit Swarm Next*
額外KV資料庫 需要(progrium/consul) 內建 內建
Security None 內建 內建
額外安裝 不需要 需要額外安裝 不需要
Extra Service None None Routing Mesh, Load Balance, Service
Discovery
支援Docker-Compose 支援 支援 支援
• Docker Swarm: 最原始的Docker Swarm,需要透過docker - -swarm來呼叫
• Docker SwarmKit: 使用Github另外一個Open Source Project – docker/SwarmKit
• Docker SwarmNext: 也就是Docker 1.12之後系統內建的Docker Swarm Mode
Swarm Next系統結構
Docker Worker Node
tcp://localhost:2375
Docker Worker Node
tcp://localhost:2375
Docker Worker Node
tcp://localhost:2375
Docker Client
strategy
random
binpacking
spread
*cluster
filter
affinity
health
constraint
port
dependency
node discovery
health
label
…
cluster
…
node
node
node
Server
Handlers
tcp://localhost:2375
Swarm
• Swarm的管理節點本身並不運行容器,它不過是:
路由器+排程器
• 用戶藉由Docker Client與Swarm的管理節點溝通,而管理節點
會依據Discovery服務去選擇某個工作節點來啟動容器
• 由於Swarm的管理節點本身沒有運行容器,因此,就算它停擺
了也不會造成整個系統的崩潰
以Swarm Mode建構Swarm-
創建Docker-machine
docker-machine create –d hyperv - -hyperv-virtual-switch “[虛擬機網路名稱]” [docker主機名稱]
• 需要創建兩個族群的docker-machine;一組是工作節點,另一組則是管理節點
• 每個族群約莫都要2個以上的docker-machine
以Swarm Mode建構Swarm-
初始化Swarm模式
docker-machine ssh manager1 “docker swarm init - -listen-addr [manager1 IP]
--advertise-addr [manager1 IP]”
• 在接下來的所有Swarm操作都會需要用到各個docker-machine的IP資訊
• 使用docker-machine ls可以看到當前Hyper-V中所有的資訊
以Swarm Mode建構Swarm-
取得Join-Token
docker-machine ssh manager1 “docker swarm join-token manager -q”
docker-machine ssh manager1 “docker swarm join-token worker -q”
Manager Token:
Worker Token:
• 要特別小心Token一共有兩種,這兩個Token是用來讓其它docker-machine加入;
依照不同族群可以使用不同Token去加入Swarm
• 由於待會一直會需要用到,可以先將這兩個Token複製
以Swarm Mode建構Swarm-
添加一個管理節點
docker-machine ssh manager2 “docker swarm join - -token [manager token] - -listen-addr [manager2 IP]
--advertise-addr [manager2 IP] [manager1 IP]”
• 由於是要加入到管理族群,所使用的Token就必須是管理的Token
• 參數--advertise-addr: 其它節點可以用這個位址存取到管理節點
以Swarm Mode建構Swarm-
添加一個工作節點
docker-machine ssh worker1 “docker swarm join - -token [worker token]
--advertise-addr [worker1 IP] [manager1 IP]”
• 由於是要加入到工作族群,所使用的Token就必須是工作的Token
• 工作節點所需要的參數不像管理節點那麼多
以Swarm Mode建構Swarm-
觀察Swarm節點的狀況
• 當所有節點都加入完成之後,記得一定要在使用這個指令檢查一下是否有問題
• 這個指令只能應用在管理節點
docker-machine ssh manager1 “docker node ls”
與Swarm相關的Docker指令
Docker
Swarm
node
servicestack
Docker swarm相關命令解析
• demote: 將Swarm中的管理節點降級
• inspect: 檢視節點詳細資訊
• ls: 列舉所有節點
• promote: 將Swarm中的工作節點升級
• ps: 檢視某個節點上正在運行的任務
• rm: 從Swarm中移除1~多個節點
• update: 更新Swarm中某個節點
docker node指令
• create: 創建一個服務
• inspect: 檢視節點詳細資訊
• logs: 取得某個服務的日誌資訊
• ls: 列舉所有節點
• ps: 檢視某個節點上正在運行的任務
• rm: 從Swarm中移除1~多個節點
• scale: 擴展服務的副本數量
• update: 更新Swarm中某個節點
docker service指令
• deploy: 部署新的或更新已存在的服務堆疊
• ls: 列舉所有節點
• ps: 檢視某個節點上正在運行的任務
• rm: 從Swarm中移除1~多個節點
• services: 列舉服務堆疊裡的服務資訊
docker stack指令
範例: Wordpress-
複製到docker-machine
使用winScp連線,預設的帳號/密碼: docker/tcuser
範例: Wordpress-
部署服務
docker-machine ssh manager1 “docker stack deploy - -compose-file docker-compose.yml vassiblity”
• vassiblity可以被省略;其為服務的前綴字
• 使用stack deploy會自動為其構建網路
範例: Wordpress-
以瀏覽器連線到Wordpress
網址: http://10.66.66.181
範例: Wordpress-
將Wordpress服務擴充為N個
docker-machine ssh manager1 “docker service scale [服務名稱]=[擴充到N個節點數]”
• 服務的名稱可以使用docker service ls來觀察
• 除了可以使用docker service scale來擴展服務之外,還可以使用docker service update
範例: Wordpress-
視覺化觀察Swarm的容器部署
docker-machine ssh manager1 “docker service create - -name=viz –publish=8080:8080/tcp
--constraint=node.role==manager –mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock
manomarks/visualizer
10.66.66.181:8080
總結
• Docker一直持續在更新它的內容,很多特性不到半年就無法使用
• 編排(Orchestrator)工具目前雖是kubernetes拔得頭籌,但Swarm仍在
後持續追趕
• 越來越多編排工具支援docker-compose

Contenu connexe

Tendances

Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训青帅 常
 
Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器Ch Rick
 
Docker初识
Docker初识Docker初识
Docker初识hubugui
 
Openstack swift, how does it work?
Openstack swift, how does it work?Openstack swift, how does it work?
Openstack swift, how does it work?kao kuo-tung
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用hugo
 
Docker open stack
Docker open stackDocker open stack
Docker open stackGuangya Liu
 
Docker集群管理 工具篇
Docker集群管理 工具篇Docker集群管理 工具篇
Docker集群管理 工具篇Guangya Liu
 
RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門Will Huang
 
Openstack neutron 原理详解
Openstack neutron 原理详解Openstack neutron 原理详解
Openstack neutron 原理详解Yong Luo
 
Deployment with Capistrano
Deployment with CapistranoDeployment with Capistrano
Deployment with Capistrano旭 張
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to DockerChris Chen
 
基于Fuel的超融合一体机
基于Fuel的超融合一体机基于Fuel的超融合一体机
基于Fuel的超融合一体机EdwardBadBoy
 
Docker Compose
Docker ComposeDocker Compose
Docker ComposeMiles Chou
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局Alex Lau
 
Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器升煌 黃
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門azole Lai
 
再生龍於雲端環境之應用
再生龍於雲端環境之應用再生龍於雲端環境之應用
再生龍於雲端環境之應用Chenkai Sun
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探仲昀 王
 

Tendances (20)

Docker
DockerDocker
Docker
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训
 
Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器
 
Docker初识
Docker初识Docker初识
Docker初识
 
Openstack swift, how does it work?
Openstack swift, how does it work?Openstack swift, how does it work?
Openstack swift, how does it work?
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
 
Docker open stack
Docker open stackDocker open stack
Docker open stack
 
Docker集群管理 工具篇
Docker集群管理 工具篇Docker集群管理 工具篇
Docker集群管理 工具篇
 
RxJS 6 新手入門
RxJS 6 新手入門RxJS 6 新手入門
RxJS 6 新手入門
 
Openstack neutron 原理详解
Openstack neutron 原理详解Openstack neutron 原理详解
Openstack neutron 原理详解
 
Deployment with Capistrano
Deployment with CapistranoDeployment with Capistrano
Deployment with Capistrano
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
基于Fuel的超融合一体机
基于Fuel的超融合一体机基于Fuel的超融合一体机
基于Fuel的超融合一体机
 
Docker Compose
Docker ComposeDocker Compose
Docker Compose
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局
 
Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門
 
再生龍於雲端環境之應用
再生龍於雲端環境之應用再生龍於雲端環境之應用
再生龍於雲端環境之應用
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探
 

Similaire à Docker進階探討

Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShopPhilip Zheng
 
docker intro
docker introdocker intro
docker introkoji lin
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽Will Huang
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)Will Huang
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorialazole Lai
 
OpenStack and Docke Integration V6
OpenStack and Docke Integration V6OpenStack and Docke Integration V6
OpenStack and Docke Integration V6Guangya Liu
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Chu-Siang Lai
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结Yiwei Ma
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧Chu-Siang Lai
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作Philip Zheng
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践YuLing Liu
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharinggavin_lee
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)ykdsg
 
企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養Philip Zheng
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 Lheima911
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)Timothy Chen
 

Similaire à Docker進階探討 (20)

Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShop
 
docker intro
docker introdocker intro
docker intro
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
Rootkit 101
Rootkit 101Rootkit 101
Rootkit 101
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
OpenStack and Docke Integration V6
OpenStack and Docke Integration V6OpenStack and Docke Integration V6
OpenStack and Docke Integration V6
 
Docker Build
Docker BuildDocker Build
Docker Build
 
Docker 101
Docker 101Docker 101
Docker 101
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharing
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 L
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)
 

Plus de 國昭 張

8th ddd taiwan study group bounded context integration
8th ddd taiwan study group  bounded context integration8th ddd taiwan study group  bounded context integration
8th ddd taiwan study group bounded context integration國昭 張
 
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architectureDdd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture國昭 張
 
20190126 ddd-meetup1
20190126 ddd-meetup120190126 ddd-meetup1
20190126 ddd-meetup1國昭 張
 
事件風暴-設計衝刺
事件風暴-設計衝刺事件風暴-設計衝刺
事件風暴-設計衝刺國昭 張
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模國昭 張
 
Scrum essential
Scrum essentialScrum essential
Scrum essential國昭 張
 
DDD架構設計
DDD架構設計DDD架構設計
DDD架構設計國昭 張
 
DDD系統分析
DDD系統分析DDD系統分析
DDD系統分析國昭 張
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0國昭 張
 
Redux+react js
Redux+react jsRedux+react js
Redux+react js國昭 張
 
架構設計-資料存取的選擇
架構設計-資料存取的選擇架構設計-資料存取的選擇
架構設計-資料存取的選擇國昭 張
 
例外處理與單元測試
例外處理與單元測試例外處理與單元測試
例外處理與單元測試國昭 張
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享國昭 張
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework國昭 張
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server國昭 張
 

Plus de 國昭 張 (20)

8th ddd taiwan study group bounded context integration
8th ddd taiwan study group  bounded context integration8th ddd taiwan study group  bounded context integration
8th ddd taiwan study group bounded context integration
 
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architectureDdd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture
 
20190126 ddd-meetup1
20190126 ddd-meetup120190126 ddd-meetup1
20190126 ddd-meetup1
 
事件風暴-設計衝刺
事件風暴-設計衝刺事件風暴-設計衝刺
事件風暴-設計衝刺
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模
 
單元測試
單元測試單元測試
單元測試
 
Scrum essential
Scrum essentialScrum essential
Scrum essential
 
Vue
VueVue
Vue
 
DDD架構設計
DDD架構設計DDD架構設計
DDD架構設計
 
DDD系統分析
DDD系統分析DDD系統分析
DDD系統分析
 
DDD引導
DDD引導DDD引導
DDD引導
 
前端測試
前端測試前端測試
前端測試
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 
Redux+react js
Redux+react jsRedux+react js
Redux+react js
 
React js
React jsReact js
React js
 
架構設計-資料存取的選擇
架構設計-資料存取的選擇架構設計-資料存取的選擇
架構設計-資料存取的選擇
 
例外處理與單元測試
例外處理與單元測試例外處理與單元測試
例外處理與單元測試
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server
 

Docker進階探討