官方鏡像基本上都默認是 UTC 時區。docker實例裡面的系統時間和物理機是一樣的,而且無法修改,最多只可以修改時區,通常為了解決時區問題,要在創建(運行)容器的時候加上(例如中國上海時區)
37 -e TZ=Asia/Shanghai
或者掛載宿主機的 " /etc/localtime" 文件來保持時區一致,時間無法直接修改,但是可以用libfaketime這個庫來欺騙修改下時間。
庫地址: https://github.com/wolfcw/libfaketime/
簡單編譯之後,把libfaketime.so.1文件複製到docker實例,然後運行以下命令:
38 export LD_PRELOAD=/libfaketime.so.1 FAKETIME="+100"
即可達到和真實時間偏差快100秒的效果。
docker實例默認使用的是私有的網段,需要訪問裡面服務時候通過映射埠出來,但是如果想讓實例使用物理IP,比如我們辦公網想當做虛擬機來使用,就可以用macvlan網絡來實現。
39 docker network create -d macvlan --subnet=172.16.0.0/19 --gateway=172.16.0.1 -o parent=eth0 gitlab-net40 --subnet: 指定網段(宿主機)41 --gateway: 指定網關(宿主機)42 parent: 註定父網卡(宿主機)
接下來創建容器指定網絡即可
43 docker run --net=gitlab-net --ip=172.16.0.170 -dt --name test centos:7
--net 指定使用的網絡,--ip 用於指定網段內 IP;啟動後只需要在容器內啟動程序測試即可,注意centos6上面的不支持指定IP。
針對網絡這塊,如果集群同默認那樣直接用nat的方式應用到線上,必然是個大問題,因為我們現在openstack的雲平臺就碰到了包量的問題,現在是用sr-iov技術來臨時解決。
針對私有倉庫的管理可以使用vmware提供的harbor來做,安裝也是很docker化,下載源碼之後利用docker-compose編排工具進行全自動化編排,因為裡面包含各個需要互聯的docker實例,所以需要docker-compose.yml這個配置文件來進行編排自動化管理。
需要可以在內部團隊共享鏡像的當然得用私有倉庫,雖然harbor有基本的功能,但是用起來感覺還是有些薄弱。界面如下:
命令行用起來的話需要下載harbor客戶端才方便,可以下載python版本的harborclient,安裝好之後配置HARBOR_URL、HARBOR_USERNAME、HARBOR_PASSWORD變量即可進行常規的鏡像倉庫搜索操作。
harbor命令如果有No module named 'requests.packages.urllib3'報錯可以通過執行pip install requests urllib3 --force –upgrade升級python庫修復。
docker提供了很多api,所以有很多個圖形化的東西來管理,但是簡單易用的web界面暫時是推薦用portainer。
支持常見的一些操作和性能監控。而且支持本地或者遠程docker管理,只需要docker在啟動時候添加埠監聽就可以了。
比如可以在這個web裡面創建數據卷、網絡、然後對各個docker實例進行操作和查看詳細信息,比較強大。
這裡有個有趣的現象,一些常見的docker工具本身也是個docker鏡像,比如這個portainer和之前的harbor倉庫,是不需要進行特殊的搭建配置,直接pull搜索下載下來啟動就可以了,雖然有些便捷,不需要解決額外的依賴(傻瓜化),如果按照傳統IT人員的思路,估計會有點懵。
docker的安全性相對openstack來說要弱一些,因為和宿主機共用的內核,所以宿主機的內核提權漏洞是可以在docker實例裡面測試並進行逃逸影響到宿主機,不單是內核漏洞,普通的docker實例互通的安全隱患也會比vmware之類的大一些。
資源限制這塊,docker也可以做,但是默認沒做,默認是儘量使用宿主機的資源,所以可以df看到磁碟大小是宿主機的磁碟之類的,也可能某個實例佔用大額的cpu和內存讓其餘的實例感覺到卡頓。事實上可以通過cpuset、memory和dm.basesize等參數來進行調控。
還一個就是宿主機的iptables內容得注意不可以隨意修改,會影響到docker的網絡通訊,如果不小心覆蓋了docker生成的規則之後怎麼恢復也暫時沒有很好的辦法。