[TIL] 關於 Docker Remote API 的學習

什麼是 Docker Remote API 每個 Docker Daemon 其實都有提供 Remote API .其工作主要都是提供一個介面可以讓 Docker Client 透過 API 來控制. 舉凡大家日常使用的指令 docker images 或是 docker ps 其實都是使用 Docker Remote API 的方式來連接本地端的 Daemon 來對 Docker Daemon Service 下指令. 此外, docker-machine 對於遠端的機器也是透過 Docker Remote API 的方式. 如何在 Mac OSX for Docker 使用 Docker Remote API 尋找 Docker-Machine Certificate 當你使用 Docker-Machine 來建置機器的時候,其實你的 Certificate 會存放在 /Users/YOUR_USERNAME/.docker/machine/machines 裡面. 該 Certificate 就是存放著讓 Docker Client 與 Docker Daemon 能夠相互溝通的金鑰資訊. 舉個例子: 如果你有建立一個 Docker-Machine 的機器名稱為 default,那麼 Certificate 檔案就會存放在: /Users/YOUR_USERNAME/.docker/machine/machines/default 裡面. 透過 curl 連接 Docker Remote API 以我的名稱 Evan 的作為一個範例的話: ### Set your environment variable > export DOCKER_CERT_PATH=/Users/Evan/.docker/machine/machines/default ### Get Docker Machine IP > docker-machine ip default 192.168.99.100 ## Use CURL > curl https://192.168.99.100:2376/images/json --cert $DOCKER_CERT_PATH/cert.pem --key $DOCKER_CERT_PATH/key.pem --cacert $DOCKER_CERT_PATH/ca.pem curl: (58) SSL: Can't load the certificate "/Users/Evan/.docker/machine/machines/default/cert.pem" and its private key: OSStatus -25299 如果出現以下的錯誤: curl: (58) SSL: Can't load the certificate "/Users/Evan/.docker/machine/machines/default/cert.pem" and its private key: OSStatus -25299 代表你沒有 cert.pem 需要執行額外的 key 轉換的動作...
繼續閱讀

[TIL] 搞清楚三種 Docker SWarm 的差異

原文 Comparing Swarm, Swarmkit and Swarm Mode 名詞解釋: Docker Swarm: 最原始的 Docker Swarm 需要透過 docker --swarm 來呼叫 Docker SwarmKit: 使用 Github 另外一個 Open Source Project docker/SwarmKit 做 Clustering orchestration. Docker SwarmNext: 也就是 Docker 1.12 之後系統內建的 Docker Swarm Mode (或稱為 Docker Swarm V2) TL;DR (直接告訴我差異)   Docker Swarm Swarm Kit Swarm Next (Swarm V2) 額外 K/V DB 需要 (progrium/consul) 內建 內建 Security None 內建 內建 額外安裝 不需要 需要額外安裝 binaries 不需要 Extra Service None Noone Routing Mesh, Load Balancer, Service Discovery Docker-Compose, Docker-Machine 支援 支援 支援 不支援 (目前) 關於最原始的 Docker Swarm 建立 Key-Value Service #Create Docker Machine docker-machine create -d virtualbox mh-keystore #Switch to taret docker-machine eval "$(docker-machine env mh-keystore)" #Start Consul Service docker run -d \ -p "8500:8500" \ -h "consul" \ progrium/consul -server -bootstrap 關於 SwarmKit 使用流程 請參考我的這篇文章,[TIL][Docker] Docker SwarmKit 學習紀錄 關於 Docker Swarm Next 請參考我的這篇文章,[TIL] Learning note about Docker Swarm Mode 參考鏈結 试用swarmkit [TIL] Learning note about Docker Swarm...
繼續閱讀

[TIL] Docker Live Restore: Docker 1.12 讓人驚艷的新功能

What's New in Docker 1.12 by Nishant Totla for Docker SF Meetup 08.03.16 from Docker, Inc. Docker 官方在 1.12 正式 Release 之後也放出了新的 Slide 來講解 1.12 新的功能: Docker Swarm Mode 無疑是最大的亮點,裡面的Routing Mesh可以讓任何節點都可以找到有 deploy 的 service 除此之外 Live Restore: (p.30) 這大概是 DockerCon 2016 之後新的功能,今天看到同事 Demo 後覺得相當有趣. 只要你在啟動 daemon 的時候加上 –live-restore 的參數. Docker Daemon 啟動的 Container 就可以把 Docker Daemon 殺掉,但是可以確保自己不會一併消失. 這樣就可以來 Container 來更新 Docker Daemon
繼續閱讀

[TIL] DPDK

What is DPDK DPDK(Data Plane Development Kit) Data Plane Development Kit 能大幅提升封包處理效能與傳輸量,讓資料層面應用程式享有更充裕的處理時間。 Data Plane Development Kit 可讓封包處理效能加快達十倍。於單一 Intel® Xeon® 處理器上便可實現超過 80 Mpps 的傳輸量,搭配雙處理器配置則可達雙倍。1 因此電信與網路設備製造商 (TEM 與 NEM) 可有效降低開發成本,動用更少工具與支援團隊,亦享有更快的上市時間。 (refer from Intel Website) DPDK Support NIC DPDK Supported NICs It could support on virtual driver “virtio-net”. Process: Bind DPDK (dpdk-devbind.py)to mount your network driver to DPDK driver list Use dpdk status (dpdk-devbind.py status) to query it. Use KNI (Kernel Network Interface) to enable that driver to eth0. If you use kni to enable DPDK to eth0, you can use all network function with DPDK benefit. kni will waste one CPU to relay DPDK driver data to eth0. Suggestion: Write DPDK related code directly. DPDK suitable for small cell but lots of data queue. Reference dpdk入门及环境准备 DPDK-NGINX vs NGINX – Tech Overview and Performance Testing Intel 加速分布式计算系统的三个神器
繼續閱讀

[TIL][Docker] Docker SwarmKit 學習紀錄

前言 其實之前就跑過一次,不過沒有記錄下來詳細的指令.這次為了比較 Docker Swarm , Docker Swarm Kit 還有 Docker Swarm Mode,又把整個流程跑了一次. 稍微做個紀錄. SwarmKit 使用流程 安裝 SwarmKit 由於 Open Source Project,需要另外安裝. go get -u github.com/docker/swarmkit cd $GOPATH/src/github.com/docker/swarmkit make binaries mv bin/* $GOBIN 注意: 如果你不是使用 Brew 安裝 Golang 你可能不會有 $GOBIN 參數,可以改到 $GOPATH/bin 建立 Cluster Master Node swarmd -d /tmp/node-1 --listen-control-api /tmp/manager1/swarm.sock --hostname node-1 要注意解釋一下,其中 /tmp/manager1/swarm.sock 是 SwarmKit socket 的位址.如果其他的 node 要加入,一定要將環境變數加入. export SWARM_SOCKET=/tmp/manager1/swarm.sock 然後我們來查詢,現在 Master 的 token (在新的 console) export SWARM_SOCKET=/tmp/manager1/swarm.sock swarmctl cluster inspect default >ID : 1piq7f9tr1xlmnui4xhjhsafi >Name : default >Orchestration settings: > Task history entries: 5 >Dispatcher settings: > Dispatcher heartbeat period: 5s >Certificate Authority settings: > Certificate Validity Duration: 2160h0m0s > Join Tokens: > Worker: >SWMTKN-1-1wttj6u10f9fueptptma9ohf99zcxt0gia1wt3a5odphi6nt1f-c4y428p7wwr23efwo4xw6qiwz > Manager: >SWMTKN-1-1wttj6u10f9fueptptma9ohf99zcxt0gia1wt3a5odphi6nt1f-cdh5ucqp1xjvh3pp1rvs0two4 建立 Cluster Worker Node 節點 2 (Node2) swarmd -d /tmp/node-2 --hostname node-2 --join-addr 127.0.0.1:4242 --join-token SWMTKN-1-1wttj6u10f9fueptptma9ohf99zcxt0gia1wt3a5odphi6nt1f-c4y428p7wwr23efwo4xw6qiwz 其中注意, --join-token 一定要加入,不然會找不到.請使用查詢到的,勿用到我提供的 :p 節點 3 (Node3) swarmd -d /tmp/node-3 --hostname node-3 --join-addr 127.0.0.1:4242 --join-token SWMTKN-1-1wttj6u10f9fueptptma9ohf99zcxt0gia1wt3a5odphi6nt1f-c4y428p7wwr23efwo4xw6qiwz 確認節點都有建立成功 export SWARM_SOCKET=/tmp/manager1/swarm.sock swarmctl node ls 二...
繼續閱讀

[TIL] 在 MacOSX 上面透過 Docker 來跑 X11 原生視窗 App

原文 Bring Linux apps to the Mac Desktop with Docker 好處: 某些 App 只出 Linux App 版本,卻沒有 MacOSX 透過 sandbox 的方式執行程式 相關準備: 先裝 X11 Client - xquartz brew install Caskroom/cask/xquartz 安裝 TCP/UDP mapping 工具 SOCAT brew install socat 撰寫相關的 Dockerfile vi Dockerfile 內容直接複製貼上… 開始吧 先下載這次範例程式 slack linux 版本 wget https://downloads.slack-edge.com/linux_releases/slack-desktop-2.1.0-amd64.deb 先在另外一個 teminal 跑 SOCAT socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\" 記得不要關掉,這是對應 X11 Client/Server 對應的部分 編譯 Docker Image docker build -t slack:2.1.0 . 跑起來吧 docker run -e DISPLAY=192.168.0.15:0 --name slack -d slack:2.1.0
繼續閱讀