容器是軟件的標準單元, 它打包代碼及其全部依賴項, 以便應用程序可以快速、可靠地從一個計算環境運行到另外一個計算環境。Docker 容器映像是一個輕量級的獨立可執行軟件包, 其中包括運行應用程序所需的一切: 代碼、運行時、系統工具、系統庫和設置。linux
LXC經過linux namespaces➕chroot➕cgroups實現。
其建立容器的過程是先建立一個空的用戶空間,在切換根目錄到用戶空間內,經過定義的模版下載並建立用戶進程,經過cgroups爲進程分配資源docker
Docker是基於Go語言實現的雲開源項目,是一個開源的應用容器引擎,聽從Apache2.0協議開源。Docker是LXC的二次封裝發行版,docker提供了各類容器管理工具讓用戶無需關注底層的操做,能夠簡單明瞭的使用容器。後端
docker的主要目標是經過對應用組件的封裝、分發、部署、運行等生命週期的管理,使開發者能夠打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。centos
一、應用的快速交付和部署
二、系統資源的高效利用
三、可擴展,可遷移
四、更簡單的更新管理安全
一、docker容器很快,啓動和中止能夠在秒級實現
二、docker容器使用的系統資源不多,一臺主機可同時運行千個docker容器
三、docker經過相似Git的操做來方便用戶獲取、分發和更新應用鏡像,指令簡明,學習成本較低
四、docker經過dockerfile配置文件來支持靈活的自動化建立和部署機制,提升工做效率服務器
(引自docker技術入門與實踐)架構
Docker 鏡像是一個面向docker引擎的只讀模版,相似於虛擬機的鏡像;docker鏡像是建立容器的基礎,用戶能夠在網上下載使用,也能夠自行定製鏡像。鏡像文件內包含文件系統且只讀。
Docker 鏡像採用分層構建機制,最底層爲bootfs,之上爲rootfs
bootfs:用於系統引導的文件系統,包括bootloader和kernel,容器啓動完成後會被卸載以節約內存資源
rootfs:位於bootfs之上,表現爲docker容器的根文件系統
傳統模式中,系統啓動之時,內核掛載rootfs時會首先將其掛載爲「只讀」模式,完整性自檢完成後將其從新掛在爲讀寫模式
docker中,rootfs由內核掛載爲「只讀」模式,然後經過「聯合掛載」技術額外掛載一個「可寫」層
app
Docker image layer
位於下層的鏡像稱爲父鏡像(parent image),最底層的稱爲基礎鏡像(base image)
最上層爲「可讀寫」層,其下的均爲「只讀」層ide
聯合掛載技術
Docker 最初使用aufs(advanced multi-layered unification filesystem 高級多層統一文件系統)來實現聯合掛載,在docker3.18版本之後linux內核中加入了overlayfs,但aufs目前仍做爲存儲後端之一來支持。docker的分層鏡像,除了aufs和overlayfs,docker還支持btrfs,vfs和devicemapper等;Ubuntu默認使用aufs,而在CentOS7上,用的是devicemapper。
工具
docker容器是從鏡像建立的應用運行實例,用戶能夠管理和使用容器;與鏡像所不一樣的是,容器帶有額外的可寫文件層;由於docker容器使用沙箱機制,因此容器間相互隔離,互不可見的。
Docker 註冊服務器是存放docker倉庫的的具體服務器,倉庫通常爲一個具體的項目或目錄。啓動容器時,docker daemon會試圖從本地獲取相關的鏡像,本地鏡像不存在時,會從registry中的repository裏下載該鏡像保存到本地
Docker Registry 分類
Registry 用於保存docker鏡像,包括鏡像的層次結構和元數據
用戶可自建registry,也可以使用官方提供的docker hub
○ Sponsor Registry:第三方的registry,供客戶和docker社區使用
○ Mirror Registry:第三方的registry,只供客戶使用
○ Vendor Registry:由發佈docker鏡像的供應商提供
○ Private Registry:經過設有防火牆和額外的安全層的私有實體提供
Docker Registry 的組成
Index:維護用戶帳戶、鏡像的校驗以及公共命名空間的信息,至關於爲Registry提供了一個完成用戶認證等功能的檢索接口
Repository :鏡像倉庫,一個Registry中能夠存在多個Repository
由特定的docker鏡像的全部迭代版本組成的鏡像倉庫;Repository可分爲「頂層倉庫」和「用戶倉庫」,用戶倉庫名稱格式爲「用戶名/倉庫名」;每一個倉庫能夠包含多個Tag(標籤),每一個標籤對應一個鏡像
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo 將repo文件放在yum.repos.d目錄下
yum install docker-ce
systemctl start docker
搜索鏡像(默認在官方docker hub倉庫中搜索) docker search busybox 拉取鏡像 docker image pull busybox 列出本地鏡像 docker image ls 移除鏡像 docker image rm busybox 獲取鏡像的詳細信息 docker inspect busybox
建立並啓動容器 docker container run --name d1 -it --rm busybox:latest 中止容器 docker container stop d1 強制中止容器 docker container kill d1 刪除容器 docker container rm d1 查看容器運行狀態 docker container stats d1 列出容器 docker container ls 暫停容器 docker container pause d1 取消暫停容器 docker container unpause d1 列出容器的詳細信息 docker container inspect d1
參考文章:
Docker技術入門與實戰
docker 官方文檔:https://docs.docker.com/馬哥docker.pdf