1、什么是Docker?
Docker是一個容器化平台,它以容器的形式將你的應用程序及所有的依賴項打包在一起,以確保你的應用程序在任何環境中無縫運行。
2、什么是Docker鏡像?
Docker鏡像是Docker容器的源代碼,Docker鏡像用於創建容器,使用Build命令創建鏡像。
3、什么是Docker容器?
Docker容器包括應用程序及所有的依賴項,作為操作系統的獨立進程運行。
4、Docker容器有幾種狀態?
四種狀態:運行、已停止、重新啟動、已退出。
5、DockerFile中最常見的指定是什么?
6、DockerFile中的命令COPY和ADD命令有什么區別?
COPY和ADD的區別是COPY的SRC只能是本地文件,其他用法一致。
7、Docker的常用命令?
8、容器與主機之間的數據拷貝命令?
Docker cp命令用於容器與主機之間的數據拷貝
- 主機到容器:docker cp /www 96f7f14e99ab:/www/
- 容器到主機:docker cp 96f7f14e99ab:/www /tmp
9、啟動nginx容器(隨機端口映射),並掛載本地文件目錄到容器html的命令?
Docker run -d -p --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx
10、解釋一下dockerfile的ONBUILD指令?
當鏡像用作另一個鏡像構建的基礎時,ONBUILD指令向鏡像添加將在稍后執行的觸發指令。如果要構建將用作構建其他鏡像的基礎的鏡像(例如,可以使用特定於用戶的配置自定義的應用程序構建環境或守護程序),這將非常有用。
11、什么是docker Swarm?
Docker Swarm是docker的本地集群。它將docker主機池轉變為單個虛擬docker主機。Docker Swarm提供標准的docker API,任何已經與docker守護進程通信的工具都可以使用Swarm透明地擴展到多個主機。
12、如何在生產中監控docker?
1.Docker提供docker:stats和docker事件等工具來監控生產中的docker。我們可以使用這些命令獲取重要統計數據的報告。
2.Docker統計數據:當我們使用容器ID調用docker stats時,我們獲得容器的CPU,內存使用情況等。它類似於Linux中的top命令。
3.Docker事件:docker事件是一個命令,用於查看docker守護程序中正在進行的活動流。一些常見的docker事件是:attach,commit,die,detach,rename,destroy等。我們還可以使用各種選項來限制或過濾我們感性其的事件。
13、Docker如何在非Linux系統中運行容器?
Docker for Mac和Windows都使用Linux VM來運行容器。Docker Toolbox用於在Virtual Box VM中運行容器。但是,罪行的docker早Windows中使用Hyper-V,在MAC中使用Hypervisor.framework。
鏡像相關
1、如何批量清理臨時鏡像文件?
可以使用sudo docker rmi $(sudo docker images -q -f danging=true)命令
2、如何查看鏡像支持的環境變量?
使用sudo docker run IMAGE env
3、本地的鏡像文件都存放在哪里?
於docker相關的本地資源存在/var/lib/docker/目錄下,其中container目錄存放容器信息,graph目錄存放鏡像信息,aufs目錄下存放具體的鏡像底層文件。
4、構建docker鏡像應該遵循哪些原則?
整體原則上,盡量保持鏡像功能的明確和內容的精簡,要點包括:
1.盡量選取滿足需求但較小的基礎系統鏡像,建議選擇debian:wheezy鏡像,僅有86MB大小。
2.清理編譯生成文件、安裝包的緩存等臨時文件。
3.安裝哥哥軟件時候要指定准確的版本號,並避免引入不需要的依賴。
4.從安全的角度考慮,應用盡量使用系統的庫和依賴。
5.使用dockerfile創建鏡像時候要添加.dockerignore文件或使用干凈的工作目錄。
容器相關
1、容器退出后,通過docker ps命令查看,數據會丟失么?
容器退出后會處於終止(exited)狀態,此時可以通過docker ps -a查看,其中數據不會丟失,還可以通過docker start來啟動,只有刪除容器才會清除數據。
2、如何停止所有正在運行的容器?
docker kill $(sudo docker ps -q)
3、如何批量清理后台停止容器?
docker rm$(sudo docker ps -a -q)
4、如何臨時退出一個正在交互的容器的終端,而不終止它?
按Ctrl+p,后按Ctrl+q,如果按Ctrl+c會使容器內的應用進程終止,進而會使容器終止。
5、很多應用容器都是默認后台運行的,怎么查看他們的輸出和日志信息?
使用docker logs,后面跟容器的名稱或者ID信息
6、使用docker port命令映射容器的端口時,系統報錯Error:NO public port ‘80’ published for …,是什么意思?
創建鏡像時dockerfile要指定正確的EXPOSE的端口,容器啟動時指定PublishAllport=true
7、可以在一個容器中同時運行多個應用進程嗎?
一般不推薦在一個容器內運行多個應用進程,如果有類似需求,可以用過額外的進程管理機制,比如supervisord來管理所運行的進程。
8、如何控制容器占用系統資源(CPU,內存)的份額?
在使用docker create命令創建容器或使用docker run 創建並運行容器的時候,可以使用-c|-spu-shares[=0]參數來調整同期使用SPU的權重,使用-m|-memory參數來調整容器使用內存的大小。
倉庫相關
1、倉庫(Repository)、注冊服務器(Registry)、注冊 索引(Index)有和關系?
首先,倉庫是存放一組關聯鏡像的集合,比如同一個應用的不同版本的鏡像,注冊服務器時存放實際的鏡像的地方,注冊索引則負責維護用戶的賬號、權限、搜索、標簽等管理。注冊服務器利用注冊索引來實現認證等管理。
2、從非官方倉庫(如:dl.dockerpool.com)下載鏡像的時候,有時候會提示”Error:Invaild registry endpoint https://dl.docker.com:5000/v1/…”?
Docker自1.3.0版本往后以來,加強了對鏡像安全性的驗證,需要手動添加對非官方倉庫的信任。DOCKER_ORTS=”-insecure-registry dl.dockerpool.com:5000”重啟docker服務。
配置相關
1、Docker的配置文件放在那里。如何修改配置?
Ubuntu系統下Docker的配置文件是/etc/default/docker,CentOS系統配置文件存放在/etc/sysconfig/docker。
2、如何更改docker的默認存儲設置?
Docker的默認存放位置是/var/lib/docker,如果希望將docker的本地文件存儲到其他分區,可以使用Linux軟連接的方式來做。
Docker與虛擬化
1、docker與LXC(Linux Container)有何不同?
LXC利用Linux上相關技術實現容器,docker則在如下的幾個方面進行了改進:
2、Docker於Vagrant有何不同?
兩者的定位完全不同
Vagrant類似於Boot2Docker(一款運行Docker的最小內核),是一套虛擬機的管理環境,Vagrant可以在多種系統上和虛擬機軟件中運行,可以在Windows、Mac等非Linux平台上為Docker支持,自身具有較好的包裝性和移植性。原生Docker自身只能運行在Linux平台上,但啟動和運行的性能比虛擬機要快,往往更適合快速開發和部署應用的場景。
3、開發環境中Docker與Vagrant該如何選擇?
Docker不是虛擬機,而是進程隔離,對於資源的消耗很少,單一開發環境下Vagrant是虛擬機上的封裝,虛擬機本身會消耗資源.
Other FAQ
1、如何將一台宿主機的docker環境遷移到另外一台宿主機?
停止docker服務,將整個docker存儲文件復制到另外一太宿主機上,然后調整另外一台宿主機的配置即可。
2、Docker容器創建后,刪除了/var/run/netns目錄下的網絡名字空間文件,可以手動恢復它:
查看容器進程ID,比如1234
Sudo docker inspect --format=’{{. State.pid}}’ $container_id 1234
到proc目錄下,把對應的網絡名字空間文字鏈接到/var/run/netns,然后通過正常的系統命令查看操作容器的名字空間