一、鏡像相關問題
1、如何批量清理臨時鏡像文件?
#docker rmi $(DOCKER IMAGES -qf dangling=true)
2、如何查看鏡像支持的環境變量?
#docker run IMAGE env
3、本地的鏡像文件都存放在哪里?
與Docker相關的本地資源都存放在/var/lib/docker/目錄直,以aufs文件系統為例,其中container目錄存放容器信息,graph目錄存放鏡像信息,aufs目錄下存放具體的鏡像層文件。
4、構建Docker像應該遵循哪些原則?
整體原則上,盡量保持鏡像功能的明確和內容的精簡,要點包括:
盡量選取滿足需求但較小的基礎系統鏡像,例如大部分時候可以選擇debian:wheezy或debian:jessie鏡像,僅有不足百兆大小;
清理編譯生成文件、安裝包的緩存等臨時文件;
安裝各個軟件時候指定准確的版本號,並避免引入不需要的依賴;
從安全角度考慮,應用要盡量使用系統的庫和依賴;
如果安裝應用時候需要配置一些特殊的環境變量,在安裝后要還原不需要保持的變量值;
使用Dockerfile創建鏡像時候要添加.dockerignore文件或使用干凈的工作目錄。
5、碰到網絡問題,無法pull鏡像,命令行指定http_proxy無效,怎么辦?
在Docker配置文件中添加export http_proxy="http://<PROXY_HOST>:<PROXY_PORT>",之后重啟Docker服務即可。
二、容器相關問題
1、容器退出后,通過docker ps命令查看不到,數據會丟失么?
容器退出后會處於終止(exited)狀態,此時可以能過docker ps -a 命令查看。其中的數據也不會丟失,還可以通過docker start命令來啟動它。只有刪除掉容器才會清除所有數據。
2、如何停止所有正地運行的容器?
docker kill $(docker ps -q)
3、如何清理批量后台停止的容器?
docker rm -f $(docker ps -qa)
4、如何獲取某個容器的PID信息?
docker inspect --format '{{ .State.Pid }}' <CONTANINERID or NAME>
5、如何獲取某個容器的IP地址?
dpcler inspect --format '{{ >NetworkSettings.IPAddress }}' <CONTANINERID or NAME>
6、如何給容器指定一個固定IP地址,而不是每次重啟容器IP地址都會變?
目前Docker並沒有提供直接的對容器IP地址的管理支持,可以在網上查找容器網絡配置創建點對點連接的案例,來手動配置容器的靜態IP。或者在容器啟動后,再手動進行修改。
7、如何臨時退出一個正在交互的容器的終端,而不終止它?
按Ctrl-p Ctrl-q。如果按Ctil-c往往會讓容器內應用進程終止,進而會終止容器。
8、使用docker port 命令映射容器的時,系統報錯“Error: No Public port '80' published for xxx” ,怎么辦?
創建鏡像時Dockerifle要通過EXPOSE命令指定正確的開放端口;容器啟動時指定PublishAllPort=true。
9、可以在一個容器中同進運行多個應用進程么?
一般並不推薦在同一個容器內運行多個應用進程。如果有需求,可以通過一些額外的進程管理機制,比如supervisord來管理所運行的進程。可以參考https://docs.docker.com/articles/using_supervisord/
10、如何控制容器占用系統資源(CPU MEM)的份額?
在使用docker create命令創建容器或使用docker run創建並啟動容器的時候,可以使用-c | --cpu-shares[=0] 參數來調整容器使用CPU的權重;使用 -m | --memory[=MEMORY]參數來調整容器使用內存的大小。
