Docker 是一個開源項目,誕生于 2013 年初,最初是 dotCloud 公司內(nèi)部的一個業(yè)余項目。它基于 Google 公司推出的 Go 語言實現(xiàn)。 項目后來加入了 Linux 基金會,遵從了 Apache 2.0 協(xié)議,項目代碼在 GitHub 上進行維護。
Docker 自開源后受到廣泛的關(guān)注和討論,以至于 dotCloud 公司后來都改名為 Docker Inc。Redhat 已經(jīng)在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產(chǎn)品中廣泛應(yīng)用。
Docker 項目的目標是實現(xiàn)輕量級的操作系統(tǒng)虛擬化解決方案。 Docker 的基礎(chǔ)是 Linux 容器(LXC)等技術(shù)。
在 LXC 的基礎(chǔ)上 Docker 進行了進一步的封裝,讓用戶不需要去關(guān)心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。
下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處,可見容器是在操作系統(tǒng)層面上實現(xiàn)虛擬化,直接復(fù)用本地主機的操作系統(tǒng),而傳統(tǒng)方式則是在硬件層面實現(xiàn)。


在任何地方開發(fā)、部署和運行任何應(yīng)用
Docker是一款針對程序開發(fā)人員和系統(tǒng)管理員來開發(fā)、部署、運行應(yīng)用的一款虛擬化平臺。Docker 可以讓你像使用集裝箱一樣快速的組合成應(yīng)用,并且可以像運輸標準集裝箱一樣,盡可能的屏蔽代碼層面的差異。Docker 會盡可能的縮短從代碼測試到產(chǎn)品部署的時間。
Docker 組件
- The Docker Engine – Docker Engine 是一個基于虛擬化技術(shù)的輕量級并且功能強大的開源容器引擎管理工具。它可以將不同的 work flow 組合起來構(gòu)建成你的應(yīng)用。
- Docker Hub 可以分享和管理你的images鏡像的一個 Saas 服務(wù)。
為什么選擇Docker
快速交付應(yīng)用程序
- 我們希望你的開發(fā)環(huán)境能夠更好的提高你的工作效率。Docker容器能夠幫助開發(fā)人員、系統(tǒng)管理員、QA和版本控制工程師在一個生產(chǎn)環(huán)節(jié)中一起協(xié)同工作。我們制定了一套容器標準,而這套容器標準能夠使系統(tǒng)管理員更改容器的時候,程序員不需要關(guān)心容器的變化,而更專注自己的應(yīng)用程序代碼。從而隔離開了開發(fā)和管理,簡化了開發(fā)和部署的成本。
- 我們使應(yīng)用的構(gòu)建方式更加簡單,可以快速的迭代你的應(yīng)用,并且可以可視化的來查看應(yīng)用的細微更改。這能夠幫助組織里邊的成員來更好的理解一個應(yīng)用從構(gòu)建到運行的過程。
- Docker 是一個輕量級的容器,所以它的速度是非常快的,而容器的啟動時間只需要一秒鐘,從而大大的減少了開發(fā)、測試和部署的時間。輕松部署和擴展
- Docker 容器可以運行在大多數(shù)的環(huán)境中,你可以在桌面環(huán)境、物理主機、虛擬主機再到數(shù)據(jù)中,私有或者公有云中部署。
- 因為 Docker 可以從多平臺下運行。你可以很容器的遷移你的應(yīng)用程序。如果需要,你可以非常簡單的將應(yīng)用程序從測試環(huán)境遷移到云,或者從云遷移到測試環(huán)境。
- Docker 是一個輕量級的容器,因此它可以在很短的時間內(nèi)啟動和關(guān)閉。當你需要的時候,你可以啟動多個容器引擎,并且在不需要使用他們的時候,可以將他們?nèi)筷P(guān)閉。
Get higher density and run more workloads
Docker的容器本身不需要額外創(chuàng)建虛擬機管理系統(tǒng),因此你可以啟動多套Docker容器,這樣就可以充分發(fā)揮主機服務(wù)器的物理資源,也可以降低因為采購服務(wù)器licenses而帶來的額外成本。
快速構(gòu)建 輕松管理
因為Docker上述輕便,快速的特性。可以使您的應(yīng)用達到快速迭代的目的。每次小的變更,馬上就可以看到效果。而不用將若干個小變更積攢到一定程度再變更。每次變更一小部分其實是一種非常安全的方式。
Docker的安裝和使用
Docker CE 的安裝請參考官方文檔:
- MacOS:https://docs.docker.com/docker-for-mac/install/
- Windows:https://docs.docker.com/docker-for-windows/install/
- Ubuntu:https://docs.docker.com/install/linux/docker-ce/ubuntu/
- Debian:https://docs.docker.com/install/linux/docker-ce/debian/
- CentOS:https://docs.docker.com/install/linux/docker-ce/centos/
- Fedora:https://docs.docker.com/install/linux/docker-ce/fedora/
- 其他 Linux 發(fā)行版:https://docs.docker.com/install/linux/docker-ce/binaries/
安裝Docker -- Ubantu為例
OS 要求
要安裝Docker CE,您需要這些Ubuntu版本之一的64位版本:
- Cosmic 18.10
- Bionic 18.04 (LTS)
- Xenial 16.04 (LTS)
Docker CE上支持x86_64(或amd64)armhf,arm64,s390x (IBM Z),和ppc64le(IBM的Power)架構(gòu)。
卸載舊版本
Docker的舊版本被稱為docker,docker.io 或docker-engine。如果已安裝,請卸載它們:
$ sudo apt-get remove docker docker-engine docker.io containerd runc
支持的存儲驅(qū)動
Docker CE在Ubuntu支持overlay2,aufs和btrfs存儲驅(qū)動程序。
注意:在Docker Engine - Enterprise中,
btrfs僅在SLES上受支持。有關(guān)更多詳細信息,請參閱btrfs上的文檔 。
對于Linux內(nèi)核版本4及更高版本的新安裝,overlay2 支持并首選aufs。Docker CE overlay2 默認使用存儲驅(qū)動程序。如果需要使用aufs,則需要手動配置。見aufs
安裝 Docker CE
您可以根據(jù)需要以不同方式安裝Docker CE:
大多數(shù)用戶 設(shè)置Docker的存儲庫并從中進行安裝,以便于安裝和升級任務(wù)。這是推薦的方法。
有些用戶下載DEB軟件包并 手動安裝并完全手動管理升級。這在諸如在沒有訪問互聯(lián)網(wǎng)的氣隙系統(tǒng)上安裝Docker的情況下非常有用。
在測試和開發(fā)環(huán)境中,一些用戶選擇使用自動 便捷腳本來安裝Docker。
使用存儲庫安裝
在新主機上首次安裝Docker CE之前,需要設(shè)置Docker存儲庫。之后,您可以從存儲庫安裝和更新Docker。
設(shè)置存儲庫
-
更新
apt包索引:$ sudo apt-get update -
安裝包以允許
apt通過HTTPS使用存儲庫:$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common -
添加Docker的官方GPG密鑰:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88通過搜索指紋的最后8個字符,驗證您現(xiàn)在擁有帶指紋的密鑰 。$ sudo apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S] -
使用以下命令設(shè)置穩(wěn)定存儲庫。要添加 夜間或測試存儲庫,請在下面的命令中的單詞后添加單詞
nightly或test(或兩者)stable。了解夜間和測試頻道。注意:下面的
lsb_release -cs子命令返回Ubuntu發(fā)行版的名稱,例如xenial。有時,在像Linux Mint這樣的發(fā)行版中,您可能需要更改$(lsb_release -cs)為父Ubuntu發(fā)行版。例如,如果您正在使用Linux Mint Tessa,則可以使用bionic。Docker不對未經(jīng)測試和不受支持的Ubuntu發(fā)行版提供任何保證。
x86_64 / amd64 對應(yīng)的是:
```
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
```
安裝DOCKER CE
-
更新
apt包索引。$ sudo apt-get update -
安裝最新版本的Docker CE和containerd,或者轉(zhuǎn)到下一步安裝特定版本:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io有多個Docker存儲庫?
如果您啟用了多個Docker存儲庫,則在未指定
apt-get install或apt-get update命令中的版本的情況下安裝或更新始終會安裝盡可能高的版本,這可能不適合您的穩(wěn)定性需求。 -
要安裝特定版本的Docker CE,請在repo中列出可用版本,然后選擇并安裝:
一個。列出您的倉庫中可用的版本:
$ apt-cache madison docker-ce docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages docker-ce | 18.06.1~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages docker-ce | 18.06.0~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages例如,使用第二列中的版本字符串安裝特定版本
5:18.09.1~3-0~ubuntu-xenial。$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io -
通過運行
hello-world映像驗證是否正確安裝了Docker CE 。$ sudo docker run hello-world此命令下載測試映像并在容器中運行它。當容器運行時,它會打印一條信息性消息并退出。
Docker CE已安裝并正在運行。該docker組已創(chuàng)建,但未向其添加任何用戶。您需要使用它sudo來運行Docker命令。繼續(xù)Linux postinstall以允許非特權(quán)用戶運行Docker命令和其他可選配置步驟。
添加daemon.json文件
運行 sudo docker run hello-world,沒有返回結(jié)果,如下:

docker在本地沒有找到hello-world鏡像,也沒有從docker倉庫中拉取鏡像,出項這個問題的原因:是應(yīng)為docker服務(wù)器再國外,我們在國內(nèi)無法正常拉取鏡像,所以就需要我們?yōu)閐ocker設(shè)置國內(nèi)阿里云的鏡像加速器;
需要修改配置文件 /etc/docker/daemon.json 如下:
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
先創(chuàng)建 daemon.json

后添加字段

重啟docker systemctl restart docker
查看docker 狀態(tài) systemctl restart docker

運行 sudo docker run hello-world,結(jié)果如下:

升級DOCKER CE
要升級Docker CE,請先運行sudo apt-get update,然后按照 安裝說明選擇要安裝的新版本。
從包安裝
如果您無法使用Docker的存儲庫來安裝Docker CE,則可以下載.deb適用于您的發(fā)行版的 文件并手動安裝。每次要升級Docker時都需要下載新文件。
- 去
https://download.docker.com/linux/ubuntu/dists/選擇你的Ubuntu版本,瀏覽pool/stable/,選擇amd64,armhf,arm64,ppc64el,或s390x,并下載.deb文件要安裝多克爾CE版本。
Note: To install a nightly package, change the word
stablein the URL tonightly. Learn about nightly and testchannels.
-
安裝Docker CE,將下面的路徑更改為您下載Docker軟件包的路徑。
$ sudo dpkg -i /path/to/package.debDocker守護程序自動啟動。
-
通過運行
hello-world映像驗證是否正確安裝了Docker CE 。$ sudo docker run hello-world此命令下載測試映像并在容器中運行它。當容器運行時,它會打印一條信息性消息并退出。
Docker CE已安裝并正在運行。該docker組已創(chuàng)建,但未向其添加任何用戶。您需要使用它sudo來運行Docker命令。繼續(xù)執(zhí)行Linux的安裝后步驟, 以允許非特權(quán)用戶運行Docker命令和其他可選配置步驟。
升級DOCKER CE
要升級Docker CE,請下載較新的軟件包文件并重復(fù) 安裝過程,指向新文件。
使用便捷腳本安裝
Docker在get.docker.com 和test.docker.com上提供了便捷腳本,用于快速,非交互地將Docker CE的邊緣和測試版本安裝到開發(fā)環(huán)境中。腳本的源代碼位于 docker-install存儲庫中。 建議不要在生產(chǎn)環(huán)境中使用這些腳本,在使用它們之前,您應(yīng)該了解潛在的風險:
- 腳本需要
root或sudo特權(quán)才能運行。因此,在運行腳本之前,應(yīng)仔細檢查和審核腳本。 - 這些腳本會嘗試檢測您的Linux發(fā)行版和版本,并為您配置包管理系統(tǒng)。此外,腳本不允許您自定義任何安裝參數(shù)。從Docker的角度或您自己組織的指導方針和標準來看,這可能會導致配置不受支持。
- 腳本安裝包管理器的所有依賴項和建議,而不要求確認。這可能會安裝大量軟件包,具體取決于主機的當前配置。
- 該腳本不提供選項來指定要安裝的Docker版本,并安裝在“邊緣”通道中發(fā)布的最新版本。
- 如果已使用其他機制在主機上安裝了Docker,請不要使用便捷腳本。
此示例使用get.docker.com上的腳本在Linux上安裝最新版本的Docker CE。要安裝最新的測試版本,請改用test.docker.com。在下面的每個命令中,替換每次出現(xiàn)的getwith test。
警告:
始終檢查從Internet下載的腳本,然后在本地運行它們。
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
如果您想將Docker用作非root用戶,您現(xiàn)在應(yīng)該考慮將您的用戶添加到“docker”組,例如:
sudo usermod -aG docker your-user
請記得注銷并重新登錄才能生效!
警告:
將用戶添加到“docker”組會授予他們運行容器的能力,這些容器可用于獲取Docker主機上的root權(quán)限。 有關(guān)更多信息,請參閱 Docker守護程序攻擊面。
已安裝Docker CE。它會自動在DEB基于發(fā)行版的分發(fā)上啟動。在RPM基于On的 基礎(chǔ)上,您需要使用相應(yīng)的systemctl或service命令手動啟動它 。如消息所示,非root用戶默認情況下無法運行Docker命令。
使用便捷腳本后升級DOCKER
如果您使用便捷腳本安裝了Docker,則應(yīng)直接使用軟件包管理器升級Docker。重新運行便捷腳本沒有任何好處,如果它嘗試重新添加已添加到主機的存儲庫,則可能會導致問題。
卸載Docker CE
-
卸載Docker CE軟件包:
$ sudo apt-get purge docker-ce -
主機上的圖像,容器,卷或自定義配置文件不會自動刪除。要刪除所有圖像,容器和卷:
$ sudo rm -rf /var/lib/docker
您必須手動刪除任何已編輯的配置文件。
·