Docker應用容器引擎
li_zliang
一、關于Docker理論
1.1 容器和虛擬機
1.2 什么是docker
1.3 Docker的基本概念
1.3.1 Image (鏡像)
1.3.2 Container (容器)
1.3.3 Repository (倉庫)
1.4 Docker的架構
1.4.1 Docker CLIent
1.4.2 Docker daemon
1.4.3 Docker Image
1.4.4 Docker Registry
1.4.5 Docker Container
1.4.6 Docker組件是如何協作運行容器
二、docker安裝(在線安裝)
2.1 檢查centos內核版本
2.2 查看是否存在docker
2.3 卸載舊版本的docker及相關依賴
2.4 安裝依賴包
2.6 安裝docker(從源中)
2.7 啟動docker并開機啟動
三、docker安裝(RPM包離線安裝)
3.1 檢查centos內核版本
3.2 查看是否存在docker
3.3 卸載舊版本的docker及相關依賴
3.4 下載并安裝依賴包
3.5 下載并安裝docker包
3.6 啟動docker并開機啟動
3.7 驗證是否安裝成功
四、docker安裝(二進制文件離線安裝)
五、docker安裝(測試或開發環境的簡化安裝)
六、docker的使用
6.1 注冊Docker Hub
6.2 登陸Docker Hub
6.3 查找鏡像
6.3.1 在線查找鏡像
6.3.2 docker search命令查找
6.3.3 鏡像分類說明
6.4 拉取鏡像
6.5 查看鏡像
6.6 刪除鏡像
6.7 國內鏡像庫/加速器及配置
6.7.1 國內鏡像庫
6.7.2 國內加速器
6.7.4 命令從加速器地址中拉取鏡像(可不用)
6.7.5 配置加速器(Docker版本1.10.0以上)
6.8 推送鏡像(創建鏡像后)
6.9 自動創建(暫沒有搞懂)
七、鏡像文件(待續)
7.1 redis(官方)
7.2 Nginx(官方)
7.3 其他
八、創建私有鏡像倉庫(待續)
九、創建自定義鏡像(待續)
9.1 關于DockerFile
9.2 創建鏡像
9.3 上傳鏡像
十、其他(待續)
10.2 常見問題
10.2.1 非root用戶權限問題
10.3 參考
一、關于Docker理論
1.1 容器和虛擬機
我們在理解 docker 之前,首先我們得先區分清楚兩個概念,容器和虛擬機。
虛擬機:
我們用的傳統虛擬機如 VMware , VisualBox 之類的需要模擬整臺機器包括硬件,每臺虛擬機都需要有自己的操作系統,虛擬機一旦被開啟,預分配給它的資源將全部被占用。每一臺虛擬機包括應用,必要的二進制和庫,以及一個完整的用戶操作系統。
容器:
容器技術是和我們的宿主機共享硬件資源及操作系統,可以實現資源的動態分配。容器包含應用和其所有的依賴包,但是與其他容器共享內核。容器在宿主機操作系統中,在用戶空間以分離的進程運行。
容器技術是實現操作系統虛擬化的一種途徑,可以讓您在資源受到隔離的進程中運行應用程序及其依賴關系。通過使用容器,我們可以輕松打包應用程序的代碼、配置和依賴關系,將其變成容易使用的構建塊,從而實現環境一致性、運營效率、開發人員生產力和版本控制等諸多目標。容器可以幫助保證應用程序快速、可靠、一致地部署,其間不受部署環境的影響。容器還賦予我們對資源更多的精細化控制能力,讓我們的基礎設施效率更高。
1.2 什么是docker
Docker 屬于 linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。
Docker 將應用程序與該程序的依賴,打包在一個文件系統里面。運行這個文件系統,就會生成一個虛擬容器。程序在這個虛擬容器里運行,就好像在真實的物理機上運行一樣。有了 Docker ,就不用擔心環境問題。
總體來說, Docker 的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、復制、分享、修改,就像管理普通的代碼一樣。
1.3 Docker的基本概念
從上圖我們可以看到,Docker 中包括三個基本的概念:
- Image(鏡像)
- Container(容器)
- Repository(倉庫)
鏡像是 Docker 運行容器的前提,倉庫是存放鏡像的場所,可見鏡像更是 Docker 的核心。
1.3.1 Image (鏡像)
Docker 鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。
1.3.2 Container (容器)
容器 (container) 的定義和鏡像 (image) 幾乎一模一樣,也是一堆層的統一視角,唯一區別在于容器的最上面那一層是可讀可寫的。
由于容器的定義并沒有提及是否要運行容器,所以實際上,容器 = 鏡像 + 讀寫層。
1.3.3 Repository (倉庫)
Docker 倉庫是集中存放鏡像文件的場所。鏡像構建完成后,可以很容易的在當前宿主上運行,但是, 如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry (倉庫注冊服務器)就是這樣的服務。
倉庫又可以分為兩種形式:
- public(公有倉庫)
- private(私有倉庫)
Docker Registry 公有倉庫是開放給用戶使用、允許用戶管理鏡像的 Registry 服務。一般這類公開服務允許用戶免費上傳、下載公開的鏡像,并可能提供收費服務供用戶管理私有鏡像。
除了使用公開服務外,用戶還可以在本地搭建私有 Docker Registry 。Docker 官方提供了 Docker Registry鏡像,可以直接使用做為私有 Registry 服務。當用戶創建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。
1.3.4 鏡像標簽(tag)
為區分一個倉庫中的不同鏡像(不同鏡像版本),Docker Hub引入標簽。
通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽就常用于對應該軟件的各個版本 。我們可以通過<倉庫名>:<標簽>的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以 latest 作為默認標簽.。
為了方便鏡像的查找,同一個鏡像可以存在不同的標簽。如ubuntu:latest 與 ubuntu:16.04可能具有相同的鏡像ID,鏡像ID才是鏡像的唯一標識。
1.4 Docker的架構
Docker 使用 C/S 結構,即客戶端/服務器體系結構。 Docker 客戶端與 Docker 服務器進行交互,Docker服務端負責構建、運行和分發 Docker 鏡像。 Docker 客戶端和服務端可以運行在一臺機器上,也可以通過 RESTful 、 stock 或網絡接口與遠程 Docker 服務端進行通信。
這張圖展示了 Docker 客戶端、服務端和 Docker 倉庫(即 Docker Hub 和 Docker Cloud ),默認情況下Docker 會在 Docker 中央倉庫尋找鏡像文件,這種利用倉庫管理鏡像的設計理念類似于 Git ,當然這個倉庫是可以通過修改配置來指定的,甚至我們可以創建我們自己的私有倉庫。
Docker 的核心組件包括:
- Docker Client
- Docker daemon
- Docker Image
- Docker Registry
- Docker Container
1.4.1 Docker Client
Docker Client ,也稱 Docker 客戶端。它其實就是 Docker 提供命令行界面 (CLI) 工具,是許多 Docker 用戶與 Docker 進行交互的主要方式。客戶端可以構建,運行和停止應用程序,還可以遠程與Docker_Host進行交互。最常用的 Docker 客戶端就是 docker 命令,我們可以通過 docker 命令很方便地在 host 上構建和運行 docker 容器。
1.4.2 Docker daemon
Docker daemon 是服務器組件,以 Linux 后臺服務的方式運行,是 Docker 最核心的后臺進程,我們也把它稱為守護進程。它負責響應來自 Docker Client 的請求,然后將這些請求翻譯成系統調用完成容器管理操作。該進程會在后臺啟動一個 API Server ,負責接收由 Docker Client 發送的請求,接收到的請求將通過Docker daemon 內部的一個路由分發調度,由具體的函數來執行請求。
docker daemon包含以下三部分:
- Docker Server
- Engine
- Job
Docker Daemon 可以認為是通過 Docker Server 模塊接受 Docker Client 的請求,并在 Engine 中處理請求,然后根據請求類型,創建出指定的 Job 并運行。 Docker Daemon 運行在 Docker host 上,負責創建、運行、監控容器,構建、存儲鏡像。
1.4.3 Docker Image
Docker 鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。我們可將 Docker 鏡像看成只讀模板,通過它可以創建 Docker 容器。
鏡像有多種生成方法:
- 從無到有開始創建鏡像
- 下載并使用別人創建好的現成的鏡像
- 在現有鏡像上創建新的鏡像
我們可以將鏡像的內容和創建步驟描述在一個文本文件中,這個文件被稱作 Dockerfile ,通過執行 docker build 命令可以構建出 Docker 鏡像。
1.4.4 Docker Registry
Docker registry 是存儲 docker image 的倉庫,它在 docker 生態環境中的位置如下圖所示:
運行docker push、docker pull、docker search時,實際上是通過 docker daemon 與 docker registry 通信。
1.4.5 Docker Container
Docker 容器就是 Docker 鏡像的運行實例,是真正運行項目程序、消耗系統資源、提供服務的地方。 Docker Container 提供了系統硬件環境,我們可以使用 Docker Images 這些制作好的系統盤,再加上我們所編寫好的項目代碼, run 一下就可以提供服務啦。
1.4.6 Docker組件是如何協作運行容器
看到這里,我相信各位讀者朋友們應該已經對Docker基礎架構已經熟悉的差不多了,我們還記得運行的第一個容器嗎?現在我們再通過hello-world這個例子來體會一下 Docker 各個組件是如何協作的。
容器啟動過程如下:
- Docker 客戶端執行 docker run 命令
- Docker daemon 發現本地沒有 hello-world 鏡像
- daemon 從 Docker Hub 下載鏡像
- 下載完成,鏡像 hello-world 被保存到本地
- Docker daemon 啟動容器
具體過程可以看如下這幅演示圖:
我們可以通過docker images 可以查看到 hello-world 已經下載到本地
我們可以通過docker ps 或者 docker container ls 顯示正在運行的容器,我們可以看到, hello-world 在輸出提示信息以后就會停止運行,容器自動終止,所以我們在查看的時候沒有發現有容器在運行。
我們把 Docker 容器的工作流程剖析的十分清楚了,我們大體可以知道 Docker 組件協作運行容器可以分為以下幾個過程:
- Docker 客戶端執行 docker run 命令
- Docker daemon 發現本地沒有我們需要的鏡像
- daemon 從 Docker Hub 下載鏡像
- 下載完成后,鏡像被保存到本地
- Docker daemon 啟動容器
二、docker安裝(在線安裝)
docker版本
Docker 分為 CE 和 EE 兩大版本。 CE 即社區版(免費,支持周期 7 個月), EE 即企業版,強調安全,付費使用,支持周期 24 個月。
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 發行版:https://docs.docker.com/install/linux/docker-ce/binaries/
這里我們以 CentOS7 作為本文的演示。
安裝Docker CE有幾種不同的方式,取決于你的需要。
- 大多數用戶通過設置Docker倉庫并從中進行安裝,以便于安裝和升級,這是推薦的方法。
- 有些用戶下載RPM軟件包并手動安裝并完全手動管理升級,主要用于在無法連接互聯網的系統環境中安裝Docker。
- 在測試和開發環境中,一些用戶選擇使用自動便捷腳本來安裝Docker。
2.1 檢查CentOS內核版本
要求是CentOS7的維護版本,系統的內核版本高于 3.10 ,一般CentOS7及以上都是滿足,可以通過 uname -r命令查看你當前的內核版本。
必須啟用centos-extras存儲庫。默認情況下,此存儲庫已啟用,但如果已將其禁用,則需要重新啟用它。
# uname -r
2.2 查看是否存在docker
# docker -v
2.3 卸載舊版本的docker及相關依賴
如果已經存在docker,可先卸載;
# sudo yum remove docker docker-client docker-client-latest docker-common docker-latest
docker-latest-logrotate docker-logrotate docker-engine docker-selinux docker-engine-selinux
下圖提示沒有匹配是因為并未安裝Docker;注意執行時 空格間隔 即可;
保留/var/lib/docker/的內容,包括images映像,containers容器,volumes卷以?.NETworks網絡。Docker CE包現在稱為docker-ce。
若要刪除所有圖像,容器和卷,可以執行指令:
# sudo rm -rf /var/lib/docker
2.4 安裝依賴包
yum-utils提供yum-config-manager實用程序,device-mApper-persistent-data和lvm2是devicemapper存儲驅動程序所需。
# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.5 設置docker下載的穩定鏡像
官網默認穩定版本的源:
# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
阿里云的源:
# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.6 安裝docker(從源中)
方式一、安裝最新版本的Docker CE:
# sudo yum install docker-ce docker-ce-cli containerd.io
方式二、安裝特定版本的Docker CE:
列出repo中可用的版本并排序,比如按版本號從高到低。
# yum list docker-ce --showduplicates | sort -r
安裝特定版本,通過包名稱(即docker-ce)加上版本字符串(第2列,直到第一個連字符),用連字符( - )分隔,例如docker-ce-18.09.1。
# sudo yum install docker-ce- docker-ce-cli- containerd.io
方式一、方式二的效果是一樣的,我們選用方式一即可;
Docker已安裝但尚未啟動,且已創建docker組,但未向該組添加任何用戶。
2.7 啟動docker并開機啟動
# sudo systemctl start docker
# sudo systemctl enable docker
2.8 驗證是否安裝成功
# docker version
或者
# docker -v
或者
# sudo docker run hello-world
三、docker安裝(rpm包離線安裝)
如果您無法使用Docker Repository來安裝Docker,則可以下載適用于您的發行版的.rpm文件并手動安裝。每次要升級Docker時都需要下載新文件。
3.1 檢查CentOS內核版本
同上
3.2 查看是否存在docker
同上
3.3 卸載舊版本的docker及相關依賴
同上
3.4 下載并安裝依賴包
在http://mirrors.163.com/centos/7/os/x86_64/Packages/下載8個依賴:版本選擇最新版的x84_64的
audit-libs-Python/ target=_blank class=infotextkey>Python-2.8.5-4.el7.x86_64.rpm
checkpolicy-2.5-8.el7.x86_64.rpm
libcgroup-0.41-21.el7.x86_64.rpm
libseccomp-2.3.1-3.el7.x86_64.rpm
libsemanage-python-2.5-14.el7.x86_64.rpm
policycoreutils-python-2.5-33.el7.x86_64.rpm
python-IPy-0.75-6.el7.noarch.rpm
setools-libs-3.3.8-4.el7.x86_64.rpm
在http://rpm.pbone.net/index.php3?stat=3&limit=1&srodzaj=1&dl=40&search=container-selinux&field[]=1&field[]=2下載1個依賴:
container-selinux-2.9-4.el7.noarch.rpm
將上述文件上傳到主機服務器上,我一般放到/home/當前用戶下,至于怎么上傳上去,隨便找個工具即可,比如SSH Secure File Transfer Client;
然后執行安裝,path為放置rpm包的路徑,可以*.rpm批量安裝,但建議挨個安裝,以了解其依賴關系,看看哪個因為依賴而沒有安裝成功。
建議先用 rpm -q xxx檢查是否已經有舊版本的,如果有則 用rpm -e進行卸載,然后rpm -ivh進行統一安裝;否則可能會出現兩個不同版本的包;
# rpm -ivh path/xxxxxx.rpm
# rpm -ivh path/xxxxxx.rpm
# rpm -ivh path/xxxxxx.rpm
注意,此時會有一些依賴提示:
繼續下載依賴包,上傳至主機服務器后,繼續執行;需要反復幾次,直到找出所有依賴最新版。
最好把 某個包相關的包都下載下來安裝,比如下圖,紅框內的是有依賴關系的;
可能已經安裝的各個rpm包,互相之間存在依賴,無法依次安裝更新; 網絡搜索關鍵詞“rpm解決依賴”看是否有更便捷的辦法。
在rpm -ivh后面加入 --force --nodeps 來忽略軟件包及文件的沖突,不驗證套件依賴性;
比如
# rpm -ivh --force --nodeps audit-libs-2.8.5-4.el7.x86_64.rpm
最終找出的docker依賴如下,并已安裝成功。
3.5 下載并安裝docker包
官網下載離線安裝包 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/;
選擇最新版本依次下載containerd.io-1.2.6-3.3.el7.x86_64.rpm、docker-ce-cli-19.03.4-3.el7.x86_64.rpm、docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm、docker-ce-19.03.4-3.el7.x86_64.rpm;
將上述文件上傳到主機服務器上,我一般放到/home/當前用戶下,至于怎么上傳上去,隨便找個工具即可,比如SSH Secure File Transfer Client;
然后執行安裝,/path為放置rpm包的路徑:
# sudo yum install /path/containerd.io-1.2.6-3.3.el7.x86_64.rpm
# -----sudo yum install /path/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm
# sudo yum install /path/docker-ce-cli-19.03.4-3.el7.x86_64.rpm
# sudo yum install /path/docker-ce-19.03.4-3.el7.x86_64.rpm
docker-ce-selinux安裝包在1.8版本中已經被廢棄了,因此我們不需要安裝這個了。
用 rpm -ivh命令也可以安裝;
要升級Docker CE,請下載較新的軟件包文件并重復安裝過程,但使用yum -y upgrade命令而不是yum -y install,并指向新文件。
3.6 啟動docker并開機啟動
同上
3.7 驗證是否安裝成功
同上
四、docker安裝(二進制文件離線安裝)
參考https://docs.docker.com/install/linux/docker-ce/binaries/#install-static-binaries
或者網上查閱;在此不再詳述。
五、docker安裝(測試或開發環境的簡化安裝)
當然在測試或開發環境中 Docker 官方為了簡化安裝流程,提供了一套便捷的安裝腳本,CentOS 系統上可以使用這套腳本安裝:
# curl -fsSL get.docker.com -o get-docker.sh
# sh get-docker.sh
具體可以參看 docker-install 的腳本:https://github.com/docker/docker-install
執行這個命令后,腳本就會自動的將一切準備工作做好,并且把 Docker CE 的 Edge 版本安裝在系統中。
六、docker的使用
Docker Hub是Docker 官方維護了一個公共倉庫,其中已經包括了數量超過 15,000 的鏡像。大部分需求都可以通過在 Docker Hub 中直接下載鏡像來實現。
6.1 注冊Docker Hub
在 https://cloud.docker.com 免費注冊一個 Docker 賬號。
如果無法完成注冊,可上網查閱,采用"谷歌訪問助手"。訪問外國網站建議用谷歌,翻譯網頁。
6.2 登陸Docker Hub
可以通過執行 docker login 命令交互式的輸入用戶名及密碼來完成在命令行界面登錄 Docker Hub。
你可以通過 docker logout 退出登錄。
6.3 查找鏡像
查找鏡像有兩種方式:Docker Hub在線查找鏡像、docker search命令查找。
6.3.1 在線查找鏡像
https://hub.docker.com/,需要登錄。同上面的 https://cloud.docker.com一樣,都是官方的。
通過關鍵字可以搜索到名稱中含有該關鍵字的相關鏡像:
一般選用官方的鏡像,查看詳細,有詳細說明,也有拉取鏡像的操作命令。
6.3.2 docker search命令查找
你可以通過 docker search 命令來查找官方倉庫中的鏡像,并利用 docker pull 命令來將它下載到本地。
例如以 centos 為關鍵詞進行搜索:
# docker search centos
可以看到返回了很多包含關鍵字的鏡像,其中包括鏡像名字、描述、收藏數(表示該鏡像的受關注程度)、是否官方創建、是否自動創建。
倉庫名:NAME
鏡像描述:DESCRIPTION
用戶評價*:STARS
是否官方式鏡像:OFFICIAL
是否自動構建:AUTOMATED- 即由Docker Hub自動構建(Automated Build)流程創建
官方的鏡像說明是官方項目組創建和維護的,automated 資源允許用戶驗證鏡像的來源和內容。
另外,在查找的時候通過 --filter=stars=N 參數可以指定僅顯示收藏數量為 N 以上的鏡像。
6.3.3 鏡像分類說明
根據是否是官方提供,可將鏡像資源分為兩類。
一種是類似 centos 這樣的鏡像,被稱為基礎鏡像或根鏡像。這些基礎鏡像由 Docker 公司創建、驗證、支持、提供。這樣的鏡像往往使用單個單詞作為名字。
還有一種類型,比如 tianon/centos 鏡像,它是由 Docker 的用戶創建并維護的,往往帶有用戶名稱前綴。可以通過前綴 username/ 來指定使用某個用戶提供的鏡像,比如 tianon 用戶。
6.4 拉取鏡像
下載官方 centos 鏡像到本地:
# docker pull centos
這里未指定版本號下載了一個centos鏡像。如果不指定版本號,默認將下載最后一個版本,即:latest。
如果指定版本號,則使用倉庫名:版本號形式。
# docker pull centos:centos6
6.5 查看鏡像
可以通docker images命令查看已經下載的所有鏡像,也可以docker images命令后指定鏡像名查看。
# docer images
# docker images centos
6.6 刪除鏡像
當鏡像不再需要時,可以將鏡像從刪除。刪除鏡像使用docker rmi命令。
如,刪除centos的鏡像:
# docker rmi centos
刪除和鏡像時,我們會看到很多的Deleted行,這是因為Docker鏡像是一種以層(Layer)為單位的分層文件系統,每一行Deleted都表示一個鏡像層被刪除。
注意:docker rmi只能刪除本地鏡像,并不能刪除鏡像倉庫。鏡像倉庫需要登錄Docker Hub后,在后臺刪除對應的Repository。
刪除鏡像時,可以同時刪除多個鏡像:
# docker rmi image1 image2
刪除鏡像時,也可以指定版本號:
# docker rmi centos:centos6
6.7 國內鏡像庫/加速器及配置
6.7.1 國內鏡像庫
最常使用的 Registry 公開服務是官方的 Docker Hub,這也是默認的 Registry,并擁有大量的高質量的官方鏡像。除此以外,還有 CoreOS 的 Quay.io,CoreOS 相關的鏡像存儲在這里;google 的 Google Container Registry,Kubernetes 的鏡像使用的就是這個服務。
國內也有一些云服務商提供類似于 Docker Hub 的公開服務,比如時速云鏡像倉庫、網易云鏡像服務、DaoCloud 鏡像市場、阿里云鏡像庫等。這個就不考慮了, 還是采用官方鏡像庫+加速器。
國內倉庫
時速云鏡像倉庫:https://hub.tenxcloud.com/
網易云鏡像服務:https://c.163.com/hub#/m/library/
DaoCloud鏡像市場:https://hub.daocloud.io/
阿里云鏡像庫:https://cr.console.aliyun.com/#/imageList
6.7.2 國內加速器
由于某些原因,在國內訪問這些服務可能會比較慢。國內的一些云服務商提供了針對 Docker Hub 的鏡像服務(Registry Mirror),這些鏡像服務被稱為加速器。常見的有 阿里云加速器、DaoCloud 加速器 等。使用加速器會直接從國內的地址下載 Docker Hub 的鏡像,比直接從 Docker Hub 下載速度會提高很多。
國內加速器:
- 官方加速器:https://registry.docker-cn.com,建議使用
- 網易加速器::http://hub-mirror.c.163.com
- ustc加速器:https://docker.mirrors.ustc.edu.cn
- 阿里云加速器:https://yn4lv9tp.mirror.aliyuncs.com,需要注冊阿里云帳號登錄,據說比較麻煩;
- Daocloud加速器:http://f1361db2.m.daocloud.io,需要注冊帳號登錄,據說比較麻煩;
6.7.3 阿里云容器服務(插曲)
點擊https://cr.console.aliyun.com/#/imageList,進入阿里云容器鏡像服務頁面,里面有相關說明;
6.7.4 命令從加速器地址中拉取鏡像(可不用)
可以使用以下命令直接從該鏡像加速地址進行拉取。除非您修改了Docker守護進程的–registry-mirror參數,否則您將需要完整地指定官方鏡像的名稱。例如,library/ubuntu、library/redis、library/nginx。
# docker pull registry.docker-cn.com/library/ubuntu:16.04
6.7.5 配置加速器(Docker版本1.10.0以上)
新版的 Docker 針對linux版本使用 /etc/docker/daemon.json(Linux) 來配置 Daemon。
請在該配置文件中加入(沒有該文件的話,請先建一個):
使用命令:
# vi /etc/docker/daemon.json
輸入內容:使用國內官方加速器
"registry-mirrors": ["https://registry.docker-cn.com"]
然后使用命令重啟docker即可:
# systemctl daemon-reload
# systemctl restart docker
6.8 推送鏡像(創建鏡像后)
用戶也可以在登錄后通過 docker push 命令來將自己的鏡像推送到 Docker Hub。
以下命令中的 username 請替換為你的 Docker 賬號用戶名。
# docker tag ubuntu:17.10 username/ubuntu:17.10
# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 17.10 275d79972a86 6 days ago 94.6MB
username/ubuntu 17.10 275d79972a86 6 days ago 94.6MB
# docker push username/ubuntu:17.10
# docker search username
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
username/ubuntu
6.9 自動創建(暫沒有搞懂)
自動創建(Automated Builds)功能對于需要經常升級鏡像內程序來說,十分方便。
有時候,用戶創建了鏡像,安裝了某個軟件,如果軟件發布新版本則需要手動更新鏡像。
而自動創建允許用戶通過 Docker Hub 指定跟蹤一個目標網站(目前支持 GitHub 或 BitBucket)上的項目,一旦項目發生新的提交或者創建新的標簽(tag),Docker Hub 會自動構建鏡像并推送到 Docker Hub 中。
要配置自動創建,包括如下的步驟:
- 創建并登錄 Docker Hub,以及目標網站;
- 在目標網站中連接帳戶到 Docker Hub;
- 在 Docker Hub 中 配置一個自動創建;
- 選取一個目標網站中的項目(需要含 Dockerfile)和分支;
- 指定 Dockerfile 的位置,并提交創建。
之后,可以在 Docker Hub 的 自動創建頁面 中跟蹤每次創建的狀態。
七、鏡像文件(待續)
7.1 redis(官方)
7.2 nginx(官方)
7.3 其他
八、創建私有鏡像倉庫(待續)
8.1 使用Docker Registry
九、創建自定義鏡像(待續)
9.1 關于Dockerfile
9.2 創建鏡像
9.3 上傳鏡像
十、其他(待續)
10.1 docker常用命令
10.2 常見問題
10.2.1 非root用戶權限問題
可以看到非root用戶執行docker命令時,會報permission denied錯誤,docker手冊上可以找到原因以及解決方法,原文如下:
Manage Docker as a non-root user
The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user.
If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.
意思就是docker daemon使用的是Unix Socket,需要root權限才能訪問。有兩種解決辦法:要么用sudo命令,要么將當前用戶添加至docker用戶組。
添加docker用戶組的操作命令:
# sudo groupadd docker #添加docker用戶組
# sudo gpasswd -a $USER docker #將當期用戶加入docker用戶組
# newgrp docker #更新docker用戶組
# docker ps #測試docker命令是否可以使用
10.3 參考
https://blog.csdn.net/deng624796905/article/details/86493330
https://www.cnblogs.com/yhnet/p/11697576.html
https://www.jianshu.com/p/99b1a380a07e
https://blog.csdn.net/u013058742/article/details/80075633(好幾種安裝方式)
https://yeasy.gitbooks.io/docker_practice/content/(比較全面,一本電子書)
https://ieevee.com/tech/2016/09/28/docker-mirror.html(關于國內加速器的)
https://www.cnblogs.com/wushuaishuai/p/9984228.html#_label2(關于國內加速器的)