docker在ubuntu上的安裝
配置docker的apt源
1. 對系統源進行更新
sudo apt-get update2. 安裝包,允許apt命令https訪問docker源
3. 新增docker官方的gpg
4. 將docker的源新增到 /etc/apt/sources.list
sudo add-apt-repository \ "安裝dockerdeb [arch=amd64] \
$(lsb_release -cs) \
stable
"
sudo apt-get1. 在daocloud.io上註冊乙個賬號,如果已經有賬號的可以直接登入update
sudo apt-get install docker-ce
2. 登入後點選右上角的加速器
3. 根據自己的系統複製加速器命令,並在主機中執行
4. 重啟docker daemon
sudo systemctl restart docker.servicedocker採用的是c/s架構。客戶端向伺服器傳送請求,伺服器負責構建、執行和分發容器
docker客戶端
最常見的客戶端是docker命令,通過docker命令可以很方便的在主機上構建和執行容器,docker支援很多操作,常見的docker命令及其用途如下
除了docker命令列工具,使用者也可以通過rest api與伺服器通訊
docker伺服器
docker daemon是伺服器元件,以linux後台服務的方式執行
docker daemon執行在docker主機上,負責建立、執行、監控容器,構建、儲存映象。預設配置下,docker daemon只能響應來自本地主機的客戶端請求,如果要允許遠端客戶請求,需要在配置檔案中開啟tcp的監聽,具體操作如下
1. 編輯配置檔案/etc/systemd/system/multi-user-target.wants/docker.service,在環境變數execstart後面新增-h tcp:允許來自任意的客戶端連線
2. 重啟docker daemon
sudo systemctl daemon-reload3. 客戶端在命令列裡面加上-h引數,即可與遠端服務端通訊,其中info子命令用來檢視docker伺服器的資訊sudo systemctl docker.service
只有容器層是可寫的,容器層下面的所有映象都是唯讀。在容器層,使用者看到的是乙個疊加之後的檔案系統
1. 新增檔案
在容器中建立檔案時,新檔案被新增到容器層中
2. 讀取檔案
在容器中讀取某個檔案時,docker會從上往下依次在各映象層中查詢檔案。一旦找到,立即將其複製到容器層,然後開啟並讀入記憶體
3. 修改檔案
在容器中修改已存在的檔案時,docker會從上往下依次在各映象層中查詢此檔案。一旦找到,立即將其複製到容器層,然後修改
4. 刪除檔案
在容器中刪除檔案時,docker也是從上往下依次在映象層中查詢檔案。找到後,會在容器層中記錄下此刪除操作
只有當需要修改時才複製乙份資料,這種特性被稱為copy-on-write。可見,容器層儲存的是映象變化的部分,不會對映象本身進行任何修改。
docker commit建立新映象的三個步驟:執行容器、修改容器、將容器儲存為新的映象
1. 執行容器:sudo docker run -it --name test
這是以互動式的方式執行乙個容器,並將容器命名為test,使用者可以根據自己的容器用途和型別自行起名,當然除了以-it引數啟動互動型容器外,也可以使用-d引數啟動守護型容器
2. 修改容器:進入容器後,先用apt-get update對容器源進行更新,然後再用apt-get install命令來按需對容器進行擴充套件
3. 將容器儲存為新的映象:sudo docker commit test test:v1
儲存新映象的格式:sudo docker commit 《容器名稱/容器id> 新映象名稱。如果要對所建立的映象進行持續性修改,可以像上面案例一樣,用test:v1的方式來給映象名稱,它表示的是映象test的版本為v1,這樣在需要對容器進行持續性修改時很有幫助
即使docker commit命令建立映象在某種意義上很方便,但docker並不建議使用者使用該命令進行映象的建立,原因有兩點:
(1)這是一種手工建立映象的方式,很容易出錯,效率低且可重複性弱
(2)使用者並不知道映象是如何建立出來的,裡面是否有惡意程式。也就是說無法對映象進行審計,存在安全隱患
雖然不建議採用docker commit的方式建立映象,但還是要學習它,因為就算是dockerfile的方式建立映象,其底層也是docker commit一層一層構建新映象的,學習docker commit能夠幫助我們深入地理解構建過程和映象的分層結構
用dockerfile建立test/ubuntu,其內容如下
下面是dockerfile的執行步驟和建立映象過程
root@ubuntu:~# pwd ①
/root
root@ubuntu:~# ls ②
dockerfile
root@ubuntu:~# docker build -t test/ubuntu . ③
sending build context to docker daemon 32.26 kb ④
step 1 : from ubuntu ⑤
---> f753707788c5
step 2 : run apt-get update && apt-get install -y vim ⑥
---> running in 9f4d4166f7e3 ⑦
......
setting up vim (2:7.4.1689-3ubuntu1.1) ...
---> 35ca89798937 ⑧
removing intermediate container 9f4d4166f7e3 ⑨
successfully built 35ca89798937 ⑩
root@ubuntu:~#
用docker build命令來構建映象,-t引數將新映象命名為test/ubuntu,命令末尾的 . 指明build context為當前目錄。docker會從build context中查詢dockerfile檔案,也可以用-f引數指定dockerfile的位置
首先docker將build context中的所有檔案傳送給docker daemon,build context為映象提供所需的檔案或目錄
這個檔案的執行過程:首先執行from,將ubuntu作為基礎映象,該步驟會給出基礎映象的id。然後執行run,安裝所需擴充套件的服務,在該過程中會生成乙個臨時容器並返回臨時容器的id,並在臨時容器中通過apt-get來安裝所需服務,安裝成功後,將容器儲存為映象,並返回該映象的id,這裡底層使用的類似docker commit命令。最後刪除前面生成的臨時容器
映象構建成功後,可以通過docker history命令驗證。docker history會顯示映象的構建歷史,也就是dockerfile的執行過程。
Docker基本知識
docker docker 是乙個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到乙個可移植的容器中,然後發布到任何流行的linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。簡言之,就是可以在linux上映象使用的這麼乙個容器。docker可以在什麼情況下使...
Docker容器基本知識
docker的思想來自於貨櫃,貨櫃解決了什麼問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被貨櫃標準化了,貨櫃和貨櫃之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在貨櫃裡封裝的好好的,那我就可以用一艘大船把他們都運走。設想一下下面的場景 1.不...
docker基本知識點與命令
cgroups control groups 資源管理 namespace 程序隔離 基於檔案許可權 selinux安全 docker的架構 準備工作 準備centos7或以上64位作業系統,關閉防火牆或新增適當規則 安裝 筆者使用yum源在ubuntu上安裝的docker在centos上執行只需稍...