Docker
Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker特點
(1)上手快。
用戶只需要幾分鐘,就可以把自己的程序“Docker化”。Docker依賴於“寫時複製”(copy-on-write)模型,使修改應用程序也非常迅速,可以說達到“隨心所致,代碼即改”的境界。
隨後,就可以創建容器來運行應用程序了。大多數Docker容器只需要不到1秒中即可啓動。由於去除了管理程序的開銷,Docker容器擁有很高的性能,同時同一臺宿主機中也可以運行更多的容器,使用戶儘可能的充分利用系統資源。
(2)職責的邏輯分類
使用Docker,開發人員只需要關心容器中運行的應用程序,而運維人員只需要關心如何管理容器。Docker設計的目的就是要加強開發人員寫代碼的開發環境與應用程序要部署的生產環境一致性。從而降低那種“開發時一切正常,肯定是運維的問題(測試環境都是正常的,上線後出了問題就歸結爲肯定是運維的問題)”
(3)快速高效的開發生命週期
Docker的目標之一就是縮短代碼從開發、測試到部署、上線運行的週期,讓你的應用程序具備可移植性,易於構建,並易於協作。(通俗一點說,Docker就像一個盒子,裏面可以裝很多物件,如果需要這些物件的可以直接將該大盒子拿走,而不需要從該盒子中一件件的取。
(4)鼓勵使用面向服務的架構
Docker還鼓勵面向服務的體系結構和微服務架構。Docker推薦單個容器只運行一個應用程序或進程,這樣就形成了一個分佈式的應用程序模型,在這種模型下,應用程序或者服務都可以表示爲一系列內部互聯的容器,從而使分佈式部署應用程序,擴展或調試應用程序都變得非常簡單,同時也提高了程序的內省性。(當然,可以在一個容器中運行多個應用程序)
Registry(註冊中心)
Docker用Registry來保存用戶構建的鏡像。Registry分爲公共和私有兩種。Docker公司運營公共的Registry叫做Docker Hub。用戶可以在
Docker Hub註冊賬號,分享並保存自己的鏡像(說明:在Docker Hub下載鏡像巨慢,可以自己構建私有的Registry)。
Docker鏡像
Docker鏡像是由文件系統疊加而成(是一種文件的存儲形式)。最底端是一個文件引導系統,即bootfs,這很像典型的Linux/Unix的引導文件
系統。Docker用戶幾乎永遠不會和引導系統有什麼交互。實際上,當一個容器啓動後,它將會被移動到內存中,而引導文件系統則會被卸載,以留
出更多的內存供磁盤鏡像使用。Docker容器啓動是需要的一些文件,而這些文件就可以稱爲Docker鏡像。
CentOS7操作Docker常用命令
安裝Docker yum install docker
啓動docker systemctl start docker
查看狀態 systemctl status docker
開機啓動 systemctl enable docker
容器操作
列出正在運行容器: docker ps
查看已停止的容器: docker ps -f status=exited
列出所有運行過的容器:docker ps -a
查看最後一次運行的容器 docker ps –l
容器保存爲鏡像: docker commit -m="描述信息" -a="作者信息" [ID或者名字] 新鏡像名稱
創建和啓動容器:
創建容器常用的參數說明:
-
創建容器命令:docker run
-
-i:表示運行容器
-
-t:表示容器啓動後會進入其命令行。加入這兩個參數後,容器創建就能登錄進去。即分配一個僞終端。
-
–name :爲創建的容器命名。
-
-v:表示目錄映射關係(前者是宿主機目錄,後者是映射到宿主機上的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然後共享到容器上。
-
-d:在run後面加上-d參數,則會創建一個守護式容器在後臺運行(這樣創建容器後不會自動登錄容器,如果只加-i -t兩個參數,創建後就會自動進去容器)。
-
-p:表示端口映射,前者是宿主機端口,後者是容器內的映射端口。可以使用多個-p做多個端口映射
命令行模式容器示例:docker run -it --name=mycentos centos:7 /bin/bash
退出容器終端: exit
守護進程容器示例: docker run -id --name=mycentos1 centos:7
登錄守護式容器: docker exec -it [ID或者名字] /bin/bash
停止正在運行的容器: docker stop [ID或者名字]
啓動之前啓動過的容器: docker start [ID或者名字]
刪除已經停止的容器: docker rm [ID或者名字]
強制刪除正在運行的容器: docker rm -f [ID或者名字]
刪除所有容器: docker rmdocker ps -a -q
查看容器內日誌輸出: docker logs [ID或者名字]
查看容器信息,ip : docker inspect [ID或者名字]
文件操作複製文件到容器中: docker cp 文件 容器名稱:目標目錄
複製容器中的文件到宿主: docker cp 容器名稱:文件 宿主系統目標目錄
目錄掛載
在創建容器的時候將宿主機的某個目錄和容器中的某個目錄進行映射,這樣在修改修改宿主機目錄的同時也能修改容器內的目錄
docker run -di -v 宿主機目錄:容器目錄 --name=容器名稱 鏡像名稱:tag --privileged=true
加上 --privileged=true 是因爲掛載多級目錄的時候操作內部文件會出現權限不足的情況
端口映射
在創建容器的時候將宿主機的端口與容器的端口進行映射,外部通過訪問宿主機的端口來訪問容器
docker run -di -p 宿主機端口 :容器端口 --name=容器名稱 鏡像名稱:tag
鏡像操作
列出所有Docker鏡像 docker images
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE
centos | 6.7 | 860c279d2fec | 5 hours ago | 190.6 MB
- REPOSITORY:鏡像所在的倉庫名稱
- TAG:鏡像標籤
- IMAGE ID:鏡像ID
- CREATED:鏡像的創建日期(不是獲取該鏡像的日期)
- SIZE:鏡像大小
- 這些鏡像都是存儲在Docker宿主機的/var/lib/docker目錄下
爲了區分同一個倉庫下的不同鏡像,Docker提供了一種稱爲標籤(Tag)的功能。每個鏡像在列出來時都帶有一個標籤,例如12.10、12.04等等。每個標籤對組成特定鏡像的一些鏡像層進行標記(比如,標籤12.04就是對所有Ubuntu12.04鏡像層的標記)。這種機制使得同一個倉庫中可以存儲多個鏡像。— 版本號
我們在運行同一個倉庫中的不同鏡像時,可以通過在倉庫名後面加上一個冒號和標籤名來指定該倉庫中的某一具體的鏡像,例如docker run --name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash,表明從鏡像Ubuntu:12.04啓動一個容器,而這個鏡像的操作系統就是Ubuntu:12.04。在構建容器時指定倉庫的標籤也是一個好習慣。
搜索docker鏡像 docker search 鏡像名稱
拉取docker鏡像 docker pull 鏡像名稱(centos:7)
刪除docker鏡像 docker rmi 鏡像名稱+TAG / 鏡像Id
刪除所有鏡像 docker rmi `docker images -q`
創建鏡像方式
1.從已經創建的容器中更新鏡像,並且提交這個鏡像
2.使用 Dockerfile 指令來創建一個新的鏡像
拉取鏡像: docker pull 鏡像名稱
設置鏡像標籤: docker tag 鏡像ID 鏡像名稱:新標籤
鏡像備份: docker save -o 保存的鏡像名稱.tar 備份鏡像
示例: docker save -o test_mysql.tar test_mysql -o :輸入的備份鏡像
加載備份鏡像: docker load -i 保存的備份鏡像 示例: docker load -i teste_mysql.tar -i 輸入的文件