隨着docker/K8S技術的日漸成熟, 越來越多的公司將自己的服務放進docker裏面來運行, 以此來做到資源隔離和部署的簡化。
docker與虛擬機的區別
從下圖可以看出, docker與VM相比, 結構要簡單, 更加輕量一些, docker的dockerd程序是操作系統的一個進程, 每個docker內部也不是有自己的操作系統, 這些都是公用主機的資源, 因此docker比虛擬機要輕很多, 與之相應的,它的隔離性比虛擬機要差一些。
docker的基本原理
docker是通過namespace來隔離每個的docker, 使得用戶感覺在獨立使用一套自己的環境。待續。。。
docker鏡像
要創建docker, 必須先創建鏡像, 這裏包含了docker索要包含的程序以及相關的依賴, 如何初始化並且啓動應用程序。
- 獲得基礎鏡像
通常可以先到官方的鏡像上面下載一個基礎鏡像, 作爲我們自己的鏡像的基礎,如果有的話更好,沒有的話, 可以通過docker search命令查找摸個關鍵字相關的現有鏡像, 然後下載到本地, 通過docker history命令來查看某個鏡像的分層情況, 選擇某個commitID作爲新鏡像的基礎。docker search centos docker pull centos docker history centos
- 生成Dockerfile文件
在獲得了基礎鏡像之後, 我們有需要產生一個Dockerfile文件, 來制定我們的鏡像裏面需要的操作, 常見的有如下幾個:命令 說明 ADD 將本地文件添加到鏡像裏面去, 注意有些類型的壓縮文件是會自動解壓縮的, 比如, tar.gz, 而有些如.zip不會 RUN 後面跟shell命令, 注意這是在docker裏面 CMD 只能有一條, 多個區最後一條 ENTRYPOINT docker啓動時, 執行的第一條命令, 可以是可執行程序, 加參數 EXPOSE 對外暴露的端口號 - 生成鏡像
生成鏡像可以用如下命令:docker build -t "xxx:1.0.0" .
- 特殊情況處理
正常情況下, 一個docker應該包含一個應用程序, 並且由它作爲docker內的1號進程, 這樣docker的生命週期與其內部運行的程序相互綁定, 通過外部工具, 比如K8S的監控, 可以實現自動failover的功能。
但是有時候, 我們的應用程序由於某些原因, 需要多個程序運行在一個docker內, 這時候就需要先啓動一個init進程, 由它來block住docker不會退出, 其他的要運行的程序採用開機啓動的方式。
docker的運行與管理
常見的docker命令:
- 啓動docker
docker run -it -d --privilege IMAGE_XXX -v host_path:docker_path -p 8080:8080
- 監控docker狀態
docker ps; docker inspect dockerId
- 刪除docker
docker rm -f dockerid