一、需求
公司本地環境上了xen和kvm,但上周,CTO跑過來跟我說,你這幾天熟悉一下docker,公司打算利用docker做自動化持續內建,和快速部署,原有測試環境,可以先跑着。我想起去年,申請購入一本docker入門書,然後用了一個星期看完了,也總算有初步認識與運用。
正如前人所說,好記性不如爛筆頭,我一般看完一本書,都會總結一下。以下書裡講到,我把它敲下來放到部落格上,随時查閱!
二、鏡像相關
1、如何批量清理臨時鏡像檔案?
docker rmi $(docker p_w_picpaths -q -f dangling=true)
2、如何檢視鏡像支援環境變量?
docker run IMAGE env
3、本地的鏡像檔案都存放哪裡?
與docker相關本地資源都存放在/var/lib/docker/目錄樹下,其中container目錄存放容器資訊,graph目錄存放鏡像資訊,aufs目錄下存放具體鏡像層次檔案。疑問的是,在我centosy6.5下找不到aufs這個目錄
4、建構Docker鏡應該遵循哪些原則?
整體原則上,盡量保持鏡像功能的明确和内容精簡,要點包括:盡量選取滿足需求但較小的基礎系統鏡像,例如大部分時候可以選擇debian:wheezy鏡像,僅有85M大小清理編譯生成檔案,安裝包的緩存等臨時檔案安裝各個軟體時候要指定準确版本号,并避免引入不需要的依賴。從安全角度考慮,應用要盡量使用系統的庫和依賴如果安裝應用的時候需要配置一些特殊的環境變量,在安裝後要還原不需保持的變量值使用Docker建立鏡像時候要添加.dockerignore檔案或使用幹淨的工作目錄
三、容器相關的
1、容器退出後,通過docker ps 指令檢視不到,資料會丢失麼?
容器退出後會處于終止(exited)狀态,此時可以通過docker ps -a 檢視,其中資料也不會丢失,還可通過docker start 指令來啟動。隻有删除掉容器才會清除所有資料
2、如何停止所有正在運作的容器?
docker kill $(docker ps -q)
3、如何清理批量背景停止的容器?
docker rm $(docker ps -a -q)
4、如何給容器指定一個固定的IP位址,而不是每次重新開機容器IP位址都會變?
參考本書第20章,會涉及到點對點連接配接建立和pipwork工具
5、如何臨時退出一個正在互動的容器的終端,而不是終止它?
按ctrl-P ,ctrl -q 。如果按Ctrl -c 往往會讓容器應用程序終止,進而會終止容器。疑問,我的centos6.5和ubuntu 下,這個這兩人個鍵無法啟作用
6、很多應用容器都是預設背景運作的,怎麼檢視它們的的輸出和日志資訊?
docker logs 後面跟容器名稱或ID資訊
7、使用“docker port” 指令映射容器的端口時,系統報錯Error:No public port '80' published ofr e7d817698b6f,是什麼意思
建立鏡像時Dockerfile要指定正确的EXPOSE的端口容器啟動時指定PublishALLPort=true
8、可以在一個容器中同時運作多個應用程序嗎?
一般不推薦在同一個容器内運作多個應用程序。如果有類似需求,可以通過一些額外的程序管理機制。比如supervisord來管理所運作的程序。可以參考https://docs.docker.com/article/using_supervisord/
9、如何控制容器占用系統資源(CPU,記憶體)的份額?
在使用docker create 建立容器或使用docker run 建立并啟動容器的時候,可以使用-c|--cpu-share[=0]參數來調整容器使用CPU的權重;使用-m|--memory[=MEMORY]參數來調整容器使用記憶體大小
四、倉庫相關
1、倉庫(Repository),注冊伺服器(Registy),注冊索引(Index)有何關系?
倉庫是存放一組關聯鏡像的集合,比如同一個應用的不同版本的鏡像。注冊伺服器是存放實際鏡像檔案的地方。注冊索引則負責維護使用者的賬号,權限,搜尋,标簽等管理。是以注冊伺服器利用注冊索引來實作認證等管理
2、從非官方倉庫(例如dl.dockerpool.com)下載下傳鏡像時候,有時候提示“Error:Invalid registry endpoint https://dl.dockerpool.com:5000/v1/.......”?
Docker自1.3.0版本後,加強了對鏡像的安全性的驗證,需要手動添加對非官方倉庫的信任編輯Docker配置檔案,其其添加:DOCKER_OPTS="--insecure-registry dl.dockerpool.com:5000"之後,重新開機docker服務
五、配置相關
1、Docker的配置檔案在哪裡,如何修改配置?
Ubutu系統配置檔案是/etc/default/docker,centos系統配置檔案放在/etc/sysconfig/docker。我以centos6.5來[root@master ~]# cat /etc/sysconfig/docker# /etc/sysconfig/docker## Other arguments to pass to the docker daemon process# These will be parsed by the sysv initscript and appended# to the arguments list passed to docker -d other_args='--insecure-registry 10.1.9.214:5000'#other_args='--iptables=true'DOCKER_CERT_PATH=/etc/docker # Resolves: rhbz#1176302 (docker issue #407)DOCKER_NOWARN_KERNEL_VERSION=1 # Location used for temporary files, such as those created by# # docker load and build operations. Default is /var/lib/docker/tmp# # Can be overriden by setting the following environment variable.# # DOCKER_TMPDIR=/var/tmp#other_args="-b=br0"
2、如何更改Docker預設存儲位置?
Docker 的預設存儲位置是/var/lib/docker,如果希望将docker的本地檔案存儲其他分區,可以使用Linux軟體連接配接方式來實作
六、Docker與虛拟化
1、Docker 和LXC(Linux Container)有何不同?
LXC利用Linux上相關技術實作了容器。Docker則在如下幾方面進行了改進:移值性: 通過抽象容器配置,容器可以實作從一個平台移植到另一個平台;鏡像系統:基于AUFS的鏡像系統為容器的分發帶來了很多便利,同時共同的鏡像層隻需存儲一份,實作高效率的存儲;版本管理:類似于Git的版本管理理念,使用者可以更友善的建立,管理鏡像檔案;倉庫系統:倉庫系統大大降低了鏡像分發和管理成本;周邊工具:各種工具(配置管理,雲平台)對Docker的支技,以及基于Docker的PasS,CI等系統,讓Docker的應用更加友善和多樣化。
2、Docker與Vagrant有何不同?
兩者定位不同Vagrant類似于Boot2Docker(一款運作Docker的最小核心),是一套虛拟機的管理環境。Vagrant可以在多種系統上和虛拟機軟體中運作,可以在windowns,Mac等非Linux平台上為Docker提供支技,自身具有較好包裝性和移值性。原生Docker自身隻能運作在Linux平台上,但啟動和運作的性能都要比虛拟機要愉,往往更适合快速開發和部署應用的場景。簡單來說:Vagrant适合來管理虛拟機,而Docker适合用來管理應用環境。
3、開發環境Docker和Vagrant該如何選擇?
Docker不是虛拟機,而是程序隔離,對于資源消耗很少。但需要Linux環境支技。Vagrant是虛拟機做的封裝,虛拟機本身會消耗資源。如果本地使用OSX或者Windows環境,那就開虛拟機,單一開發環境下vagrant更簡單;多環境開發下推薦vagrant裡再使用Docker進行環境隔離
七、其他問題
1、如何将一台宿 主主機的docker環境遷移 到另外一台宿主主機?
停止Docker服務。将整個docker存儲檔案夾複制到另外一台宿主主機,然後調整另外一台宿主主機配置即可
Docker在建立容器後,删除了/var/run/netns目錄的網絡名字空間檔案。是以,可以手動恢複它。首先,使用下面的的指令檢視容器程序資訊,比如這裡的1234.docker inspect --format='``.`State`.`Pid`' $container_id1234接下來,在/proc目錄 下,把對應的網絡名字空間檔案連結到/var/run/netns目錄。ln -s /proc/1234/ns/net /var/run/netns/然後,可以通過正常系統指令來檢視或操作容器命名空間了,如ip netns show1234