3嗡髓、docker疑問篇(常見問題)

一本涕、鏡像相關

1业汰、如何批量清理臨時鏡像文件

答:可以使用 docker rmi $(docker images -q -f dangling=true) 命令。

2菩颖、如何查看鏡像支持的環(huán)境變量样漆?

答:可以使用 docker run IMAGE env 命令。

3晦闰、本地的鏡像文件都存放在哪里放祟?

答:與 Docker 相關的本地資源都存放在 /var/lib/docker/ 目錄下,以 aufs 文件系統(tǒng)為例呻右,其中 container 目錄存放容器信息跪妥,graph 目錄存放鏡像信息,aufs 目錄下存放具體的鏡像層文件声滥。

4眉撵、構建 Docker 鏡像應該遵循哪些原則?

答:整體原則上落塑,盡量保持鏡像功能的明確和內容的精簡纽疟,要點包括

盡量選取滿足需求但較小的基礎系統(tǒng)鏡像,例如大部分時候可以選擇 debian:wheezy 或 debian:jessie 鏡像憾赁,僅有不足百兆大小;

清理編譯生成文件污朽、安裝包的緩存等臨時文件;

安裝各個軟件時候要指定準確的版本號龙考,并避免引入不需要的依賴蟆肆;

從安全角度考慮矾睦,應用要盡量使用系統(tǒng)的庫和依賴;

如果安裝應用時候需要配置一些特殊的環(huán)境變量炎功,在安裝后要還原不需要保持的變量值枚冗;

使用 Dockerfile 創(chuàng)建鏡像時候要添加 .dockerignore 文件或使用干凈的工作目錄。

5亡问、碰到網絡問題官紫,無法 pull 鏡像,命令行指定 http_proxy 無效州藕?

答:在 Docker 配置文件中添加 export http_proxy="http://:",之后重啟 Docker 服務即可酝陈。


二床玻、容器相關

1、容器退出后沉帮,通過 docker ps 命令查看不到锈死,數(shù)據會丟失么?

答:容器退出后會處于終止(exited)狀態(tài)穆壕,此時可以通過 docker ps -a 查看待牵。其中的數(shù)據也不會丟失,還可以通過 docker start 命令來啟動它喇勋。只有刪除掉容器才會清除所有數(shù)據缨该。

2、如何停止所有正在運行的容器

答:可以使用 docker kill $(docker ps -q) 命令川背。

3贰拿、如何清理批量后臺停止的容器?

答:可以使用 docker rm -f $(docker ps -qa) 命令熄云。

4膨更、如何獲取某個容器的 PID 信息?

答:可以使用 docker inspect --format '{{ .State.Pid }}' 命令缴允。

5荚守、如何獲取某個容器的 IP 地址?

答:可以使用 docker inspect --format '{{ .NetworkSettings.IPAddress }}' 命令

6练般、如何給容器指定一個固定 IP 地址矗漾,而不是每次重啟容器 IP 地址都會變?

答:目前 Docker 并沒有提供直接的對容器 IP 地址的管理支持踢俄,用戶可以考慮參考第三部分中高級網絡配置章節(jié)中介紹的創(chuàng)建點對點連接例子携冤,來手動配置容器的靜態(tài) IP≌矬裕或者在啟動容器后,再手動進行修改(可參考其它類的問題 “如何進入 Docker 容器的網絡命名空間虑稼?”)。

7势木、如何臨時退出一個正在交互的容器的終端蛛倦,而不終止它?

答:按 Ctrl-p Ctrl-q啦桌。如果按 Ctrl-c 往往會讓容器內應用進程終止溯壶,進而會終止容器。

8甫男、容器與宿主機系統(tǒng)時間相差8小時且改,如何處理?

?答:在啟動容器時多加以下參數(shù)

????????-v /etc/localtime:/etc/localtime:ro

????????-e LC_ALL="en_US.UTF-8"

????????-e TZ="Asia/Shanghai"

9板驳、如何更改或指定容器的系統(tǒng)時間

答:1又跛、在構建鏡像時添加一層:RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

????????2、如容器已啟動則執(zhí)行以下命令:

? ? ? ? ? ? ? #docker? cp? /usr/share/zoneinfo/Asia/Shanghai? 容器ID:/etc/localtime

10若治、使用 docker port 命令映射容器的端口時慨蓝,系統(tǒng)報錯“Error: No public port '80' published for xxx”?

答:創(chuàng)建鏡像時 Dockerfile 要通過 EXPOSE 指定正確的開放端口端幼;

????????容器啟動時指定 PublishAllPort = true礼烈。

11、可以在一個容器中同時運行多個應用進程么婆跑?

答:一般并不推薦在同一個容器內運行多個應用進程此熬。如果有類似需求,可以通過一些額外的進程管理機制洽蛀,比如 supervisord 來管理所運行的進程摹迷。可以參考https://docs.docker.com/articles/using_supervisord/郊供。

12峡碉、如何控制容器占用系統(tǒng)資源(CPU、內存)的份額驮审?

答:在使用 docker create 命令創(chuàng)建容器或使用 docker run 創(chuàng)建并啟動容器的時候鲫寄,可以使用 -c|--cpu-shares[=0] 參數(shù)來調整容器使用 CPU 的權重;使用 -m|--memory[=MEMORY] 參數(shù)來調整容器使用內存的大小疯淫。


三地来、倉庫相關

1、倉庫(Repository)熙掺、注冊服務器(Registry)未斑、注冊索引(Index) 有何關系?

首先币绩,倉庫是存放一組關聯(lián)鏡像的集合蜡秽,比如同一個應用的不同版本的鏡像府阀。

注冊服務器是存放實際的鏡像文件的地方。注冊索引則負責維護用戶的賬號芽突、權限试浙、搜索、標簽等的管理寞蚌。因此田巴,注冊服務器利用注冊索引來實現(xiàn)認證等管理。

2挟秤、從非官方倉庫(例如 non-official-repo.com)下載鏡像時候壹哺,有時候會提示“Error: Invalid registry endpointhttps://non-official-repo.com/v1/……”?

答:Docker 自 1.3.0 版本往后艘刚,加強了對鏡像安全性的驗證斗躏,需要添加私有倉庫證書,或者手動添加對非官方倉庫的信任昔脯。 編輯 Docker 配置文件,在其中添加:

DOCKER_OPTS="--insecure-registry non-official-repo"

之后笛臣,重啟 Docker 服務即可云稚。


四、配置相關

1沈堡、Docker 的配置文件放在哪里静陈,如何修改配置?

答:使用 upstart 的系統(tǒng)(如Ubuntu 14.04)的配置文件在 /etc/default/docker诞丽,使用systemd 的系統(tǒng)(如 Ubuntu 16.04鲸拥、Centos 等)的配置文件在 /etc/systemd/system/docker.service.d/docker.conf。

Ubuntu 下面的配置文件內容如下僧免,讀者可以參考配刑赶。(如果出現(xiàn)該文件不存在的情況,重啟或者自己新建一個文件都可以解決懂衩。)

# Customize location of Docker binary (especially for development testing). #DOCKERD="/usr/local/bin/dockerd" # Use DOCKER_OPTS to modify the daemon startup options. #DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4" # If you need Docker to use an HTTP proxy, it can also be specified here. #export http_proxy="http://127.0.0.1:3128/" # This is also a handy place to tweak where Docker's temporary files go. #export TMPDIR="/mnt/bigdrive/docker-tmp"

2撞叨、如何更改 Docker 的默認存儲位置?

答:Docker 的默認存儲位置是 /var/lib/docker浊洞,如果希望將 Docker 的本地文件存儲到其他分區(qū)牵敷,可以使用 Linux 軟連接的方式來完成,或者在啟動 daemon 時通過 -g 參數(shù)指定法希。

例如枷餐,如下操作將默認存儲位置遷移到 /storage/docker。

[root@s26 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 50G 5.3G 42G 12% / tmpfs 48G 228K 48G 1% /dev/shm /dev/sda1 485M 40M 420M 9% /boot /dev/mapper/VolGroup-lv_home 222G 188M 210G 1% /home /dev/sdb2 2.7T 323G 2.3T 13% /storage [root@s26 ~]# service docker stop [root@s26 ~]# cd /var/lib/ [root@s26 lib]# mv docker /storage/ [root@s26 lib]# ln -s /storage/docker/ docker [root@s26 lib]# ls -la docker lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker [root@s26 lib]# service docker start

3苫亦、使用內存和 swap 限制啟動容器時候報警告:“WARNING: Your kernel does not support cgroup swap limit. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.”毛肋?

答:這是因為系統(tǒng)默認沒有開啟對內存和 swap 使用的統(tǒng)計功能怨咪,引入該功能會帶來性能的下降。要開啟該功能村生,可以采取如下操作:

編輯 /etc/default/grub 文件(Ubuntu 系統(tǒng)為例)惊暴,配置 GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1";

更新 grub:$ sudo update-grub趁桃;

重啟系統(tǒng)辽话,即可。

五卫病、Docker 與虛擬化

1油啤、Docker 與 LXC(Linux Container)有何不同?

答:LXC 利用 Linux 上相關技術實現(xiàn)了容器蟀苛。Docker 則在如下的幾個方面進行了改進:

移植性:通過抽象容器配置益咬,容器可以實現(xiàn)從一個平臺移植到另一個平臺;

鏡像系統(tǒng):基于 AUFS 的鏡像系統(tǒng)為容器的分發(fā)帶來了很多的便利帜平,同時共同的鏡像層只需要存儲一份幽告,實現(xiàn)高效率的存儲;

版本管理:類似于Git的版本管理理念裆甩,用戶可以更方便的創(chuàng)建冗锁、管理鏡像文件;

倉庫系統(tǒng):倉庫系統(tǒng)大大降低了鏡像的分發(fā)和管理的成本嗤栓;

周邊工具:各種現(xiàn)有工具(配置管理冻河、云平臺)對 Docker 的支持,以及基于 Docker的 PaaS茉帅、CI 等系統(tǒng)叨叙,讓 Docker 的應用更加方便和多樣化。

2堪澎、Docker 與 Vagrant 有何不同擂错?

答:兩者的定位完全不同。

Vagrant 類似 Boot2Docker(一款運行 Docker 的最小內核)全封,是一套虛擬機的管理環(huán)境马昙。Vagrant 可以在多種系統(tǒng)上和虛擬機軟件中運行,可以在 Windows刹悴,Mac 等非 Linux 平臺上為 Docker 提供支持行楞,自身具有較好的包裝性和移植性。

原生的 Docker 自身只能運行在 Linux 平臺上土匀,但啟動和運行的性能都比虛擬機要快子房,往往更適合快速開發(fā)和部署應用的場景。

簡單說:Vagrant 適合用來管理虛擬機,而 Docker 適合用來管理應用環(huán)境证杭。

3田度、開發(fā)環(huán)境中 Docker 和 Vagrant 該如何選擇?

答: Docker 不是虛擬機解愤,而是進程隔離镇饺,對于資源的消耗很少,但是目前需要 Linux 環(huán)境支持送讲。Vagrant 是虛擬機上做的封裝奸笤,虛擬機本身會消耗資源。

如果本地使用的 Linux 環(huán)境哼鬓,推薦都使用 Docker监右。

如果本地使用的是 OSX 或者 Windows 環(huán)境,那就需要開虛擬機异希,單一開發(fā)環(huán)境下 Vagrant 更簡單健盒;多環(huán)境開發(fā)下推薦在 Vagrant 里面再使用 Docker 進行環(huán)境隔離。



六称簿、其它

1扣癣、Docker 能在非 Linux 平臺(比如 Windows 或 MacOS)上運行么?

答:可以憨降。目前需要使用 docker for mac搏色、boot2docker 等軟件創(chuàng)建一個輕量級的 Linux 虛擬機層。

2券册、如何將一臺宿主主機的 docker 環(huán)境遷移到另外一臺宿主主機?

答:停止 Docker 服務垂涯。將整個 Docker 存儲文件夾復制到另外一臺宿主主機烁焙,然后調整另外一臺宿主主機的配置即可。

3耕赘、如何進入 Docker 容器的網絡命名空間骄蝇?

答:Docker 在創(chuàng)建容器后,刪除了宿主主機上 /var/run/netns 目錄中的相關的網絡命名空間文件操骡。因此九火,在宿主主機上是無法看到或訪問容器的網絡命名空間的。

?????? 用戶可以通過如下方法來手動恢復它册招。

?????? 首先岔激,使用下面的命令查看容器進程信息,比如這里的1234是掰。

?????? $ docker inspect --format='{{. State.Pid}} ' $container_id 1234

?????? 接下來虑鼎,在 /proc 目錄下,把對應的網絡命名空間文件鏈接到 /var/run/netns 目錄。

?????? $ sudo ln -s /proc/1234/ns/net /var/run/netns/

?????? 然后炫彩,在宿主主機上就可以看到容器的網絡命名空間信息匾七。例如

?????? $ sudo ip netns show 1234

?????? 此時,用戶可以通過正常的系統(tǒng)命令來查看或操作容器的命名空間了江兢。例如修改容器的 IP 地址信息為 172.17.0.100/16昨忆。

?????? $ sudo ip netns exec 1234 ifconfig eth0 172.17.0.100/16

4、如何獲取容器綁定到本地那個 veth 接口上杉允?

答:Docker 容器啟動后邑贴,會通過 veth 接口對連接到本地網橋,veth 接口命名跟容器命名毫無關系夺颤,十分難以找到對應關系痢缎。

??????? 最簡單的一種方式是通過查看接口的索引號,在容器中執(zhí)行 ip a 命令世澜,查看到本地接口最前面的接口索引號独旷,如 205,將此值加上 1寥裂,即 206嵌洼,然后在本地主機執(zhí)行 ip a 命令,查找接口索引號為 206 的接口封恰,兩者即為連接的 veth 接口對麻养。

上傳鏡像至私有倉庫時失敗,如何處理诺舔。

http://blog.csdn.net/wangtaoking1/article/details/44180901/


5鳖昌、Docker掛載主機目錄Docker訪問出現(xiàn)Permission denied的解決辦法

問題原因及解決辦法 原因是CentOS7中的安全模塊selinux把權限禁掉了,至少有以下三種方式解決掛載的目錄沒有權限的問題: 1.在運行容器的時候低飒,給容器加特權许昨,及加上 --privileged=true 參數(shù): docker run -i -t -v /soft:/soft --privileged=true 686672a1d0cc /bin/bash 2.臨時關閉selinux: setenforce 0 3.添加selinux規(guī)則,改變要掛載的目錄的安全性文本

http://blog.csdn.net/rznice/article/details/52170085

6褥赊、Docker服務不能啟動并提示“Failed to start Docker Application Container Engine.”

答:一般情況下為配置文件中有格式錯誤的問題糕档,可查看近期修改了哪些/etc/docker目錄下的文件,回滾即可拌喉。

案例:/etc/docker/daemon.json文件修改有問題速那,內容還原如下:

{ "storage-driver": "devicemapper"}

7、Docker 服務2375端口安全問題

docker服務通過修改配置文件后可以啟動2375端口尿背,該端口未經加密端仰,一旦開啟后,就可通過遠程命令的形式操作該臺Docker服務田藐,遠程執(zhí)行命令如下:

????docker -H IP:2375 run --rm -v /:/root alpine cat /root/etc/hostname

在測試環(huán)境中可能由于某種需要如此進行遠程控制榆俺,但不應該出現(xiàn)在生產環(huán)境中,一旦被掃描出來,就相當于裸露在公網中(也可能是局域網中)茴晋。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末陪捷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诺擅,更是在濱河造成了極大的恐慌市袖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烁涌,死亡現(xiàn)場離奇詭異苍碟,居然都是意外死亡,警方通過查閱死者的電腦和手機撮执,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門微峰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抒钱,你說我怎么就攤上這事蜓肆。” “怎么了谋币?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵仗扬,是天一觀的道長。 經常有香客問我蕾额,道長早芭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任诅蝶,我火速辦了婚禮退个,結果婚禮上,老公的妹妹穿的比我還像新娘调炬。我一直安慰自己帜乞,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布筐眷。 她就那樣靜靜地躺著,像睡著了一般习柠。 火紅的嫁衣襯著肌膚如雪匀谣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天资溃,我揣著相機與錄音武翎,去河邊找鬼。 笑死溶锭,一個胖子當著我的面吹牛宝恶,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼垫毙,長吁一口氣:“原來是場噩夢啊……” “哼霹疫!你這毒婦竟也來了?” 一聲冷哼從身側響起综芥,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤丽蝎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后膀藐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屠阻,經...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年额各,在試婚紗的時候發(fā)現(xiàn)自己被綠了国觉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡虾啦,死狀恐怖麻诀,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情缸逃,我是刑警寧澤针饥,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站需频,受9級特大地震影響丁眼,放射性物質發(fā)生泄漏。R本人自食惡果不足惜昭殉,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一苞七、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挪丢,春花似錦蹂风、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至任内,卻和暖如春撵渡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背死嗦。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工趋距, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人越除。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓节腐,卻偏偏與公主長得像外盯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翼雀,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件饱苟?Google Compute Engi...
    ahohoho閱讀 15,508評論 15 147
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,725評論 1 21
  • 0. 前言 docker是什么?docker是用GO語言開發(fā)的應用容器引擎锅纺,基于容器化掷空,沙箱機制的應用部署技術《陲保可...
    sessionboy閱讀 3,838評論 2 49
  • 轉載自 http://blog.opskumu.com/docker.html 一坦弟、Docker 簡介 Docke...
    極客圈閱讀 10,473評論 0 120
  • 上課時間:11月30 任教老師:小美老師 學員姓名:王祉棋 教學目標: 一 能夠熟練的利用互鎖形式進行創(chuàng)意搭建。 ...
    Letnaturetakeit閱讀 279評論 0 0