簡介:
??Docker是一個軟件容器平臺。容器可以在共享的操作系統上運行隔離的應用環(huán)境。與VM不同,容器不捆綁完整的操作系統,而是共享宿主機的系統內核和資源,只需提供應用軟件工作時所需的庫和配置。這使得docker可以做到高效,輕便,自包含的系統,并且應用將始終運行相同,無論它在哪里部署。
??開發(fā)人員使可以用Docker來消除相互之間代碼協作時的“works on my machine”問題。運營商可以使用Docker在隔離的容器中并行運行和管理應用程序,以獲得更好的計算密度。企業(yè)可以使用Docker構建靈活的軟件傳輸管道,可以更快,更安全地發(fā)布新功能。
??Docker底層基于Linux內核 2.4.19 版本開始包含的NameSpace機制,NameSpace是一種內核級別環(huán)境隔離機制。Docker底層使用libcontainer進行容器管理,使用pivot_root切換進程的根目錄。
??在Docker之前還有一種基于NameSpace的虛擬化工具LXC,LXC通過Cgroups進行資源管理,使用chroot進行根目錄的切換。其實早期Docker是在lxc上面封裝了一層并加入了aufs(Union File System)功能,在Docker 0.9.0 版本才引入了libcontainer 替代LXC進行底層容器管理。

容器虛擬化和主機虛擬化對比

docker 的基本工作流程

Docker應用場景:
web應用的自動化打包和發(fā)布;
自動化測試和持續(xù)集成、發(fā)布;
在服務型環(huán)境中部署和調整數據庫或其他的后臺應用;
從頭編譯或者擴展現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環(huán)境。
安裝
實驗主機系統平臺:CentOS 7.4
docker從2017年開始提供兩個版本,收費的商業(yè)版本Docker EE和免費的社區(qū)版本Docker CE(moby)。
可以訪問下面的鏈接獲取docker相關版本的安裝說明:
https://store.docker.com/search?offering=community&q=&type=edition
Docker官方的安裝腳本
curl -fsSL get.docker.com -o get-docker.sh
bash get-docker.sh
也可以使用Linux系統的包管理器進行安裝,本文使用centos 提供的docker版本,在extras倉庫中提供了docker 1.12.6的安裝包。這個版本較老是在docker商業(yè)化之前的版本。
[root@localhost ~]# yum -y install docker #安裝docker,需要確保extras倉庫已開啟。
[root@localhost ~]# docker -v #查看當前的docker版本。
Docker version 1.12.6, build c4618fb/1.12.6
[root@localhost ~]# systemctl start docker #啟動
docker文件
/etc/docker/daemon.json
/etc/sysconfig/docker-network 啟動配置文件
/etc/sysconfig/docker-storage 啟動配置文件
/etc/sysconfig/docker-storage-setup 啟動配置文件
/usr/bin/docker-containerd-current
/usr/bin/docker-containerd-shim-current
/usr/bin/docker-ctr-current
/usr/bin/docker-storage-setup
/usr/bin/dockerd-current #docker主程序
/usr/lib/systemd/system/docker-cleanup.service
/usr/lib/systemd/system/docker-cleanup.timer
/usr/lib/systemd/system/docker-storage-setup.service
/usr/lib/systemd/system/docker.service
/usr/lib/udev/rules.d/80-docker.rules
/usr/libexec/docker/docker-proxy-current
/usr/libexec/docker/docker-runc-current
下載鏡像
docker的官方鏡像站:Docker Hub




在主機上下載鏡像,如果下載時不寫標簽名默認下載latest版本
[root@localhost ~]# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
d9aaf4d82f24: Pull complete
Digest: sha256:eba772bac22c86d7d6e72421b4700c3f894ab6e35475a34014ff8de74c10872e