一、關于Docker
1.1為什么要用docker?
隨著開發的項目越來越復雜,軟件越來越多,服務器越來越多,我們在開發和部署的時候會遇到很多問題,比如:
1.不同的應用程序可能會有不同的應用環境,比如Java開發的網站和php開發的網站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個服務器上就要調試很久,而且很麻煩,還會造成一些沖突。比如tomcat和Apache訪問端口沖突。這個時候你就要隔離Java開發的網站和php開發的網站。常規來講,我們可以在服務器上創建不同的虛擬機在不同的虛擬機上放置不同的應用,但是虛擬機開銷比較高。2.你開發軟件的時候用的是Ubuntu,但是運維管理的都是centos,運維在把你的軟件從開發環境轉移到生產環境的時候就會遇到一些Ubuntu轉centos的問題,比如:有個特殊版本的數據庫,只有Ubuntu支持,centos不支持,在轉移的過程當中運維就得想辦法解決這樣的問題。3.我們部署一臺服務器就需要安裝和配置很多環境,在分布式環境中,需要部署很多臺,每臺都完全安裝和部署一次太麻煩。
那么怎么解決呢?我們可以用Docker!
Docker可以把開發環境直接封裝轉移給運維,運維直接部署封裝后的環境就可以,而且docker可以實現虛擬機隔離應用環境的功能,并且開銷比虛擬機小,小就意味著省錢了。
1.2 什么是docker
docker是一個開源的應用容器引擎,開發者可以打包自己的應用到容器里面,然后遷移到其他機器的docker應用中,可以實現快速部署。如果出現的故障,可以通過鏡像,快速恢復服務。
1.3 docker的思想
1.Docker采用集裝箱思想意思是將需要的內容和環境打包成一個個集裝箱,所有的集裝箱都可以上傳到碼頭上,當有人需要某個環境時,就從碼頭上拉取這個集裝箱就可以。碼頭的概念類似Maven倉庫。2.Docker的隔離型docker在運行集裝箱中的內容時,會在linux內核中,單獨的開辟一個單元,不會影響到其它程序。3.Docker的標準化docker提供了一系列的命令,幫助我們去創建,拉取集裝箱。docker還提供了Rest的Api,衍生出了很多的圖形化界面,Rancher。
1.4 底層原理
docker是利用Linux內核虛擬機化技術(LXC),提供輕量級的虛擬化,以便隔離進程和資源。LXC不是硬件的虛擬化,而是Linux內核的級別的虛擬機化,相對于傳統的虛擬機,節省了很多硬件資源。NameSpaceLXC是利用內核namespace技術,進行進程隔離。其中pid, net, ipc, mnt, uts 等namespace將container的進程, 網絡, 消息, 文件系統和hostname 隔離開。Control GroupLXC利用的宿主機共享的資源,雖然用namespace進行隔離,但是資源使用沒有收到限制,這里就需要用到Control Group技術,對資源使用進行限制,設定優先級,資源控制等。
1.5 版本支持
在CentOS6.8是可以支持docker,但是有些特性無法使用,因此至少使用3.8的內核版本,建議是使用3.10版本以上。國內生產環境很多都是使用CentOS,所以一般使用CentOS7即可。
當然如果是Ubuntu/Debian/Deepin系列的發行版本也是支持的。
二、 Docker安裝和配置
2.1 環境準備
操作系統:CentOS
軟件源:阿里云鏡像(在阿里云鏡像站上面可以找到docker-ce的軟件源,使用國內的源速度比較快)
2.2 安裝docker
1、安裝依賴
docker依賴于系統的一些必要的工具,可以提前安裝。
yum -y install yum-utils device-mapper-persistent-data lvm2
2、添加軟件源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安裝docker-ce
yum clean all #yum 會把下載的軟件包和header存儲在cache中而不自動刪除。如果覺得占用磁盤空間,可以使用yum clean指令清除緩存。yum makecache fast #這個命令是將軟件包信息提前在本地緩存一份,用來提高搜索安裝軟件的速度yum -y install docker-ce
4、啟動服務
通過systemctl啟動服務
systemctl start docker
5、查看安裝版本
這樣子就安裝成功了,啟動服務以后可以使用docker version查看一下當前的版本。
docker version
6、設置開機自動啟動
systemctl enable docker