# 0x00 安裝熱身
- 針對CE版本
Docker 分為 CE 和 EE 版本, CE免費,EE收費,CE版以及能夠滿足我們所有需求
本文針對 CE 版本的安裝進行說明
- 系統說明
本文以 CentOS 7為例進行安裝, 不要使用 CentOS 7 的 Archived版 和 測試版,因為不支持
- 源說明
CentOS 的擴展源 (centos-extras) 必須啟用,默認也是啟用的,但是如果你之前關閉過它,需要重新啟用一下
建議使用overlay2存儲引擎
- 刪除舊版本的Docker
默認 yum 安裝的 docker 或 docker-engine 版本很久,我們先卸載掉
$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
備注: /var/lib/docker/ 下面的 容器,鏡像,網絡,磁盤卷 會被保留
新的 docker 改為 docker-ce 也就是免費版的 docker
# 0x01 開始安裝
有三種安裝方式:
1. 通過設置網絡源,然后yum安裝,方便日后維護和升級 (推薦)
2. 下載RPM包手動安裝和升級,如果沒有網絡這種方法很實用
3. 使用自動化腳本安裝,適合在開發和測試環境
- 使用yum安裝
開始安裝之前需要設置一下 Docker 源,后面直接通過源安裝和升級
1. 安裝 yum-utils , yum-config-manager, device-mapper-persistent-data lvm2 (被 devicemapper存儲引擎依賴)
$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
2. 設置官方 docker-ce.repo 源
$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
2.5 下面幾個可選步驟
默認是 stable版,如果先試試 nighty 或者 test 可以用下面的命令開啟或關閉
啟用 nightly版
$ sudo yum-config-manager --enable docker-ce-nightly
啟用 test版
$ sudo yum-config-manager --enable docker-ce-test
禁用 nightly
$ sudo yum-config-manager --disable docker-ce-nightly
3. 開始安裝
3.1 廢話了那么多,這一步才是關鍵,默認安裝的是最新的,或者使用后面的步驟安裝指定的版本
sudo yum install docker-ce docker-ce-cli containerd.io
這里可能會提示 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 密鑰是否匹配
如果和這里的一樣,可以選擇接受。注意最新的版本可能是不穩定的
Docker 這樣就安裝好了,但還沒啟用,默認創建了一個 docker 組,但沒有用戶在這個組上
3.2 指定具體版本的docker安裝
A. 可以使用下面的命令,列出可以從源里安裝的所有docker版本,並且高到低排序
$ yum list docker-ce --showduplicates | sort -r docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
每個人看到的列表可能不一樣,取決於你啟用的庫,和你CentOS 的具體版本
B. 選擇具體的版本進行安裝
選擇方式就是用 - 進行銜接你要的版本號,看如下格式
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
比如這里我安裝的是 18.09.5 版
$ sudo yum install docker-ce-18.09.5 docker-ce-cli-18.09.5 containerd.io
一樣執行完只是安裝了docker 還沒啟用,創建了暫時無用戶的 docker 組
4. 啟動docker
$ sudo systemctl start docker
5.驗證客戶端能正常使用,測試hello-world鏡像
$ sudo docker run hello-world
這步會從 docker-hub (類似github) 上面拉去 hello-world鏡像,然后通過這個鏡像創建容器並運行
打印一個hello world就退出,也代表docker-cli可以用
- 使用RPM安裝 (不推薦)
如果你的linux電腦沒有網絡(什么年代了?沒網?),可以用下載RPM包放到CentOS上手動安裝
1. 下載RPM包
並且想升級的話也需要重新到網上下載最新的安裝包
下載網址 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
如果不知道怎么選,可以參考下載下面三個包
docker-ce-cli-18.09.5-3.el7.x86_64.rpm
docker-ce-18.09.5-3.el7.x86_64.rpm
containerd.io-1.2.5-3.1.el7.x86_64.rpm
如果喜歡折騰想試試 nighty 的只要把 URL 里的 stable 改成 nighty 就行
2. 安裝RPM包
$ sudo yum install /path/to/package.rpm
執行完只是安裝了docker 還沒啟用,創建了暫時沒用戶的 docker 組
3. 啟動docker
$ sudo systemctl start docker
4. 驗證客戶端能正常使用,測試hello-world鏡像
$ sudo docker run hello-world
這步會從 docker-hub (類似github) 上面拉去 hello-world鏡像,然后通過這個鏡像創建容器並運行
打印一個hello world就退出,也代表docker-cli可以用
5.升級
記住想升級就要回到第1步網上重新下載最新安裝包,跟着步驟走,然后
$ sudo yum update /path/to/package.rpm
- 使用一鍵部署腳本安裝
官方提供了一鍵部署腳本 get.docker.com 和 test.docker.com
建議使用 get 開頭的,這種方式避免交互很適合新手,這是docker-install 的源碼 docker-install repository.
在生產環境中,使用這些腳本是不推薦的,你需要了解其中的風險( 說白了出事別找我 ),風險如下:
- The scripts require
rootorsudoprivileges to run. Therefore, you should carefully examine and audit the scripts before running them. - The scripts attempt to detect your Linux distribution and version and configure your package management system for you. In addition, the scripts do not allow you to customize any installation parameters. This may lead to an unsupported configuration, either from Docker’s point of view or from your own organization’s guidelines and standards.
- The scripts install all dependencies and recommendations of the package manager without asking for confirmation. This may install a large number of packages, depending on the current configuration of your host machine.
- The script does not provide options to specify which version of Docker to install, and installs the latest version that is released in the “edge” channel.
- Do not use the convenience script if Docker has already been installed on the host machine using another mechanism.
1. 腳本需要用 root身份運行,你認真最好審計一下代碼,不然刪庫跑路都不知道了
2. 腳本會嘗試探測你系統的版本,並改變相關的配置,此外沒法加上自定義的安裝參數,可能會導致配置支持性很差,甚至語言變成日語,讓你看不懂。。。。
3. 腳本會無腦的把所有推薦和依賴全安裝了,不經過你的確認,導致有大量的包,取決於你的系統配置
4. 腳本不給你選擇具體哪個版本,直接給你轉最新的
5. 如果你已經安過docker了,你用腳本的話又安裝一次的話,恭喜你,涼了,趕緊收拾一下那個啥吧
FBI Warning:
腳本運行之前檢查一下代碼,因為服務器上的腳本很有可能是給黑客替換的
看到這里仍然堅持要來一下的話,那就來吧
$ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh get-docker.sh <output truncated>
如果想要用非root用戶,需要執行下面的命令
sudo usermod -aG docker your-user
記得先退出,重新登陸才會生效
- 卸載 Docker
到這里你的 docker 應該通過前面三種方式中的一種安裝好了,你需要手動啟動一下,使用 systemctl 或者 service 命令
有言在先,默認情況下非root是運行不了docker命令的,下面是卸載的方法
1. 停止docker
$ sudo systemctl stop docker
2. 卸載包
$ sudo yum remove docker-ce
3. 刪除資源(容器 鏡像 網絡 卷映射)
$ sudo rm -rf /var/lib/docker
