1. 怎麼在docker 中啟動一個daemon
docker
run指定的命令如果不是那些一直掛起的命令(比如運行top,不斷echo),就是會自動退出的。-d命令是設置detach為true,根據官方的文檔,意思是讓這個命令在後台運行,但並不是一直運行(我們在一個正常的linux
terminal中運行/bin/bash,運行完了也就完了,不會一直掛著等待響應的,所以確實沒辦法用daemon方式來跑/bin/bash)。
這個地方官方早期和現在的文檔也確實有些前後不一致,現在是detach,早期的文檔說指定-d以daemon方式來運行容器,可能存在一定的誤解。
另外,如果你需要跑容器里的bash,直接運行docker
run
-i
-t
container_name
/bin/bash
就可以了,如果覺得參數比docker
attach多,可以設置一個別名(alias)來解決:
alias
dockerbash='docker
run
-i
-t
container_id
/bin/bash'
設置好別名後,直接運行dockerbash就可以進入容器的bash了
2. 如何啟動docker daemon
docker加-d就可以了,比如。#dockerrun--namecentos-linux-dcentos/bin/bash-c"whiletrue;doping8.8.8.8;done"
3. Docker設置許可權如何下放改普通用戶
1.新建用戶組docker,如果用戶組已經存在則跳過
點擊(此處)折疊或打開
$sudo cat/etc/group|docker
$sudo groupadd-g 999 docker
#-g 999 為組ID,也可以不指定
點擊(此處)折疊或打開
¥sudo gpasswd-a${USER}docker
點擊(此處)折疊或打開
$sudo systemctl restart docker
點擊(此處)折疊或打開
$sudo chmoda+rw/var/run/docker.sock
4. Docker是什麼它比虛擬機強在哪裡
我來換個方式說一下吧。
如果不講究的話,你把docker近似的看成虛擬機問題也不大。 (剛開始可以不用糾結那些公用內核,系統調用,應用進程之類的)
docker嘛,一個字就是快。兩個字就是省心。
你vmware裝個centos 要多久,保守估計算上下載系統鏡像到安裝完也要個20分鍾吧。 docker呢,一個docker pull centos 命令, 幾秒鍾搞定了。 接著連進去隨你怎麼折騰。
但是,玩是不會賺錢的,得向外提供服務才能賺錢,比如用httpd搭建一個網頁伺服器。 難不成我還得自己進去配置, no no no ,不用的, 直接在配置文件里寫一條命令,或者乾脆直接下載一個帶http的鏡像,多了幾十毫秒,就搞定了。 軟體再多,也分分鍾搞定,再加上k8s這樣的管理docker軟體。 一個yaml格式的配置文件 加上一條超方便的kubectl apply 命令,幾秒鍾就可以搭建一個包含超多軟體的復雜集群。效率和速度真是讓人嘆為觀止。
因為docker快,現在連解決問題的思路都有一些變化, 比如docker裡面的某個httpd服務不可用了,你說東西不能用了得找原因修吧, 但是因為啟動一個太快了。 所以乾脆先別修,直接在啟動一個新的docker,頂上去。 那個壞了的,要麼直接扔掉,要麼等待白天工作時間載慢慢找原因。
所以docker 比虛擬機,個人感覺就是單個系統啟動快,復雜系統配置快,東西壞了直接扔帶來的系統恢復速度快。
話說回來,要是真不在意啟動時間和運行時間,虛擬機中完整的系統哪點不比docker強?
5. docker運行nginx為什麼要使用 daemon off
容器啟動時執行的那條入口命令一旦結束了,容器也會結束。如果啟動命令單純是以後台守護(daemon)模式啟動nginx,那麼啟動命令會立即結束,容器也會立即結束。
其實只要在任何命令之後加一句
&&
cat,就會讓這條命令卡在前台而不會結束,不是非得用daemon
off
6. docker-java如何將本地上傳的鏡像包重新打包並push至指定的鏡像倉庫
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。
一個完整的Docker有以下幾個部分組成:
dockerClient客戶端
Docker Daemon守護進程
Docker Image鏡像
DockerContainer容器[2]
起源
Docker 是 PaaS 提供商 dotCloud 開源的一個基於 LXC 的高級容器引擎,源代碼託管在 Github 上, 基於go語言並遵從Apache2.0協議開源。
Docker自2013年以來非常火熱,無論是從 github 上的代碼活躍度,還是Redhat在RHEL6.5中集成對Docker的支持, 就連 Google 的 Compute Engine 也支持 docker 在其之上運行。
一款開源軟體能否在商業上成功,很大程度上依賴三件事 - 成功的 user case(用例), 活躍的社區和一個好故事。 dotCloud 自家的 PaaS 產品建立在docker之上,長期維護且有大量的用戶,社區也十分活躍,接下來我們看看docker的故事。
環境管理復雜 - 從各種OS到各種中間件到各種app, 一款產品能夠成功作為開發者需要關心的東西太多,且難於管理,這個問題幾乎在所有現代IT相關行業都需要面對。
雲計算時代的到來 - AWS的成功, 引導開發者將應用轉移到 cloud 上, 解決了硬體管理的問題,然而中間件相關的問題依然存在 (所以openstack HEAT和 AWS cloudformation 都著力解決這個問題)。開發者思路變化提供了可能性。
虛擬化手段的變化 - cloud 時代採用標配硬體來降低成本,採用虛擬化手段來滿足用戶按需使用的需求以及保證可用性和隔離性。然而無論是KVM還是Xen在 docker 看來,都在浪費資源,因為用戶需要的是高效運行環境而非OS, GuestOS既浪費資源又難於管理, 更加輕量級的LXC更加靈活和快速
LXC的移動性 - LXC在 linux 2.6 的 kernel 里就已經存在了,但是其設計之初並非為雲計算考慮的,缺少標准化的描述手段和容器的可遷移性,決定其構建出的環境難於遷移和標准化管理(相對於KVM之類image和snapshot的概念)。docker 就在這個問題上做出實質性的革新。這是docker最獨特的地方。
VM技術和容器技術對比
面對上述幾個問題,docker設想是交付運行環境如同海運,OS如同一個貨輪,每一個在OS基礎上的軟體都如同一個集裝箱,用戶可以通過標准化手段自由組裝運行環境,同時集裝箱的內容可以由用戶自定義,也可以由專業人員製造。這樣,交付一個軟體,就是一系列標准化組件的集合的交付,如同樂高積木,用戶只需要選擇合適的積木組合,並且在最頂端署上自己的名字(最後一個標准化組件是用戶的app)。這也就是基於docker的PaaS產品的原型。
Docker 架構
Docker 使用客戶端-伺服器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。Docker 容器通過 Docker 鏡像來創建。容器與鏡像的關系類似於面向對象編程中的對象與類。[3]
Docker 面向對象
容器
對象
鏡像
類
Docker採用 C/S架構 Docker daemon 作為服務端接受來自客戶的請求,並處理這些請求(創建、運行、分發容器)。 客戶端和服務端既可以運行在一個機器上,也可通過 socket 或者RESTful API 來進行通信。
Docker daemon 一般在宿主主機後台運行,等待接收來自客戶端的消息。 Docker 客戶端則為用戶提供一系列可執行命令,用戶用這些命令實現跟 Docker daemon 交互。[4]
特性
在docker的網站上提到了docker的典型場景:
Automating the packaging and deployment of applications(使應用的打包與部署自動化)
Creation of lightweight, private PAAS environments(創建輕量、私密的PAAS環境)
Automated testing and continuous integration/deployment(實現自動化測試和持續的集成/部署)
Deploying and scaling web apps, databases and backend services(部署與擴展webapp、資料庫和後台服務)
由於其基於LXC的輕量級虛擬化的特點,docker相比KVM之類最明顯的特點就是啟動快,資源佔用小。因此對於構建隔離的標准化的運行環境,輕量級的PaaS(如dokku), 構建自動化測試和持續集成環境,以及一切可以橫向擴展的應用(尤其是需要快速啟停來應對峰谷的web應用)。
構建標准化的運行環境,現有的方案大多是在一個baseOS上運行一套puppet/chef,或者一個image文件,其缺點是前者需要base OS許多前提條件,後者幾乎不可以修改(因為 on write 的文件格式在運行時rootfs是read only的)。並且後者文件體積大,環境管理和版本控制本身也是一個問題。
PaaS環境是不言而喻的,其設計之初和dotcloud的案例都是將其作為PaaS產品的環境基礎
因為其標准化構建方法(buildfile)和良好的REST API,自動化測試和持續集成/部署能夠很好的集成進來
因為LXC輕量級的特點,其啟動快,而且docker能夠只載入每個container變化的部分,這樣資源佔用小,能夠在單機環境下與KVM之類的虛擬化方案相比能夠更加快速和佔用更少資源。
7. 如何讓docker以daemon方式運行/bin/bash
docker run指定的命令如果不是那些一直掛起的命令(比如運行top,不斷echo),就是會自動退出的。-d命令是設置detach為true,根據官方的文檔,意思是讓這個命令在後台運行,但並不是一直運行(我們在一個正常的Linux Terminal中運行/bin/bash,運行完了也就完了,不會一直掛著等待響應的,所以確實沒辦法用daemon方式來跑/bin/bash)。
這個地方官方早期和現在的文檔也確實有些前後不一致,現在是detach,早期的文檔說指定-d以daemon方式來運行容器,可能存在一定的誤解。
另外,如果你需要跑容器里的bash,直接運行docker run -i -t CONTAINER_NAME /bin/bash 就可以了,如果覺得參數比docker attach多,可以設置一個別名(alias)來解決:
alias dockerbash='docker run -i -t CONTAINER_ID /bin/bash'
設置好別名後,直接運行dockerbash就可以進入容器的bash了
8. 如何給Docker配置官方國內加速鏡像
在國內訪問 Docker 官方的鏡像,一直以來速度都慢如蝸牛。為了快速訪問 Docker 官方鏡像都會配置三方加速器,目前常用三方加速器有: 網易 、 USTC 、 DaoCloud 、 阿里雲 。
現在 Docker 官方針對中國區推出了鏡像加速服務。通過 Docker 官方鏡像加速,國內用戶能夠以更快的下載速度和更強的穩定性訪問最流行的 Docker 鏡像。
如何使用官方鏡像
Docker 中國官方鏡像加速可通過 registry.docker-cn.com 訪問。目前該鏡像庫只包含流行的公有鏡像,而私有鏡像仍需要從美國鏡像庫中拉取。
您可以使用以下命令直接從該鏡像加速地址進行拉取。
$ docker pull registry.docker-cn.com/myname/myrepo:mytag
例如:
$ docker pull registry.docker-cn.com/library/ubuntu:16.04
注:除非您修改了Docker守護進程的–registry-mirror參數,否則您將需要完整地指定官方鏡像的名稱。例如,library/ubuntu、library/redis、library/nginx。
給Docker守護進程配置加速器
如果要配置 Docker 守護進程默認使用 Docker 官方鏡像加速。您可以在 Docker 守護進程啟動時配置 --registry-mirror 參數。
通過命令行啟動Docker
$ docker --registry-mirror=https://registry.docker-cn.com daemon
通過配置文件啟動Docker
Docker 版本在 1.12 或更高
修改 /etc/docker/daemon.json 文件並添加上 registry-mirrors 鍵值。
$ vim /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"]}
Docker版本在 1.8 與 1.11 之間
您可以找到 Docker 配置文件,在配置文件中的 DOCKER_OPTS 加入。不同的 Linux 發行版的配置路徑不同,這里以 Ubuntu 為例。
a) Ubuntu 14.04版本
修改 /etc/default/docker 文件,加入如下參數。
$ vim /etc/default/docker DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"
b) Ubuntu 15.04以後版本
Ubuntu 15.04 之後默認使用了 Systemd 管理服務,加速器配置方式稍有些不同。在 Systemd 服務文件中加入啟動參數。
$ vim /lib/systemd/system/docker.service [Service] ExecStart=/usr/bin/docker -d -H fd:// --registry-mirror=https://registry.docker-cn.com
修改保存後,重啟 Docker 以使配置生效。
$ service docker restart
給Docker守護進程配置加速器後,就可以默認通過官方鏡像加速拉取鏡像,而無需在每次拉取時指定 registry.docker-cn.com 。
9. 如何給容器服務的Docker增加數據盤
摘要:我們知道Docker的數據是通過聯合文件系統的方式存儲到磁碟上,當需要在機器上運行的容器或者鏡像的數量不斷增加時,有可能磁碟的大小不再滿足需求,這個時候就需要給Docker的數據目錄通過增加數據盤的方式進行擴容。
Docker 數據目錄
Docker默認的容器和鏡像數據存儲的目錄是在/var/lib/docker下面,可以通過命令查看這個目錄目前佔用的磁碟的大小,例如:
# -h --max-depth=0 /var/lib/docker
7.9G /var/lib/docker
更換Docker的數據盤
因為很多Docker的鏡像本身就挺大的,所以可能用不了幾個鏡像就會有很可觀的一個磁碟佔用,很容器就會導致磁碟空間不足,這個時候如何更換數據盤以滿足再增加鏡像或容器的需求,那就給Docker的數據目錄增加塊數據盤吧。
購買ECS數據盤,並掛載到需要擴容的機器上:
1. 通過ECS控制台購買需要的配置的雲盤
2. 在ECS實例詳情頁->本實例磁碟->掛載磁碟中,選擇剛才購買的磁碟,並記錄掛載點/dev/xvd*或者/dev/vd*
登錄到機器上,對剛才掛載的磁碟進行格式化:
1. 首先在機器上執行ls -l /dev/xvd*或者ls -l /dev/vd*看到和剛才記錄的一致的磁碟id
2. 通過fdisk命令對磁碟進行分區,然後使用mkfs.ext4格式化磁碟,例如: