2017年8月24日 星期四

[筆記] 從docker轉換到rkt

※下文完全是個人筆記,不保證其正確性與完整性。 

docker images -> rkt image list 

docker pull -> rkt fetch
example: rkt --insecure-options=image fetch docker://nodered/node-red-docker
如果要指定tag可以用 name:tag 的格式,如 rkt --insecure-options=image fetch docker://ubuntu:16.04

docker run -> rkt run
example: rkt run --port=1880-tcp:1880 registry-1.docker.io/nodered/node-red-docker:latest
在docker上,如果要做容器到主機的埠對應,是用-p HOSTPORT:EXPOSE,rkt的話則是看EXPOSE的設置加上通訊協定,像nodered使用tcp 1880,就會寫成--port=1880-tcp:1880,格式是--port=EXPOSE-PROTOCOL:HOSTPORT。

docker run -d -> systemd-run --slice=machine rkt run
example: systemd-run --slice=machine rkt run --port=1880-tcp:1880 registry-1.docker.io/nodered/node-red-docker:latest
因為rkt沒有實做daemon管理,沒辦法像docker一樣把服務放到背景執行,須使用作業系統的init daemon來管理。對於一般的開發者來說學習的成本比較高,但對於系統管理者來說有著穩定、易於管理與一致性的優點。如果要為執行的服務命名,而不是使用自動產生的名字,可加上--unit參數。如systemd-run --slice=machine --unit=nodered rkt run --port=1880-tcp:1880 registry-1.docker.io/nodered/node-red-docker:latest

docker ps -> machinectl list
在Ubuntu上要先安裝systemd-container才會有machinectl這個指令。有個奇怪的情況,安裝完後執行的pod才會列出,安裝前已經執行的pod不會列出。

docker ps -a -> rkt list

docker rm -> rkt rm
example: rkt rm e77323df
rm後面帶的是UUID,可以從rkt list看到。rkt的rm會把pod徹底刪除,不像docker只是從列表上隱藏。

docker stop -> rkt stop
example: rkt stop e77323df
stop後面帶的是UUID,可以從rkt list看到。

docker exec -> rkt enter
example: rkt enter  e77323df /bin/bash

Q: 在rkt list看到已經啟動過的pod,可以像docker start一樣的方式再次啟動嘛?
A: 目前沒有實做此功能,但有考慮 issue:2087

Q: 在pod裡頭掛載host的目錄?
A: 使用--volume與--mount,參考
example: rkt run --port=1880-tcp:1880 --volume data,kind=host,source=/tmp/123,readOnly=false --mount volume=data,target=/tmp/123 registry-1.docker.io/nodered/node-red-docker:latest
先用volume export一個目錄給pod,然後再用mount把volume掛載到特定目錄