前言
從 2017 年 3 月開始 docker 在原來的基礎上分為兩個分支版本: Docker CE 和 Docker EE。
Docker CE 即社區免費版,Docker EE 即企業版,強調安全,但需付費使用。
Docker 官方建議要 CentOS7.0 及以上系統版本,本文介紹 Docker CE 在CentOS下的安裝使用。
1.前提條件
1.1.內核
Docker運行對內核要求比較高,因此一般建議直接在Ubuntu這樣的平台運行。但作為一個容器標准,Docker也是支持其他如CentOS, Mac OS X, Windows等平台。目前Docker支持以下版本CentOS:
- CentOS 7(64位)
- CentOS 6.5(64位)及以后
在運行CentOS 6.5及以后版本時,需要內核版本>=2.6.32-431,因為這些內核包含了運行Docker的一些特定修改。
$ uname -r 2.6.32-431.17.1.el6.x86_64
注:網上很多教程說CentOS6.5必須要升級內核到3.10才能使用docker,其實是【可選】升級,但最好升級。
1.2.Device Mapper
Docker默認使用AUFS作為存儲驅動,但是AUFS並沒有被包括在Linux的主線內核中。CentOS中可以使用Device Mapper作為存儲驅動,這是在2.6.9內核版本引入的新功能。我們需要先確認是否啟用該功能:
$ ls -l /sys/class/misc/device-mapper lrwxrwxrwx 1 root root 0 May 1 20:55 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper
如果沒有檢測到Device Mapper,需要安裝device-mapper軟件包:
$ sudo yum install -y device-mapper
然后重新加載dm_mod內核模塊:
$ sudo modprobe dm_mod
2.安裝
2.1.CentOS 7
2.2.1.准備
-
CentOS7能上外網
-
yum -y install gcc
-
yum -y install gcc-c++
-
卸載舊版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
如果 yum 報告未安裝任何這些軟件包,這表示情況正常。
2.2.2.安裝
-
安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
-
設置stable鏡像倉庫
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
或
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新yum軟件包索引
yum makecache fast
如果這是自添加 Docker 鏡像倉庫以來您首次刷新軟件包索引,系統將提示您接受 GPG 密鑰,並且將顯示此密鑰的指紋。驗證指紋是否正確,並且在正確的情況下接受此密鑰。指紋應匹配 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35。
-
安裝docker
1、安裝指定版本:
yum list docker-ce.x86_64 --showduplicates | sort -r #從高到低列出Docker-ce的版本
該軟件包名稱是軟件包名稱(docker-ce)加上版本字符串(第二列),從第一個冒號(:)一直到第一個連字符,並用連字符(-)分隔。
例如:指定版本(docker-ce-18.09.9)進行安裝:
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
# 例如:
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
2、安裝最新版本:
yum -y install docker-ce
-
啟動docker
執行以下命令啟動docker:
systemctl start docker
-
測試docker
2.2.CentOS 6.5
2.2.1.准備
-
禁用selinux [可選]
由於Selinux和LXC有沖突,所以需要禁用selinux.編輯/etc/selinux/config,設置兩個關鍵變量.
SELINUX=disabled
SELINUXTYPE=targeted
注:網上有教程說要設置,但我建議不要設置,因為會影響安全性
-
安裝Fedora EPEL源
yum install http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
-
添加hop5.repo源
cd /etc/yum.repos.d wget http://www.hop5.in/yum/el6/hop5.repo
2.2.2.yum安裝
-
升級帶aufs模塊的3.10內核【可選】
yum install kernel-ml-aufs kernel-ml-aufs-devel
修改grub的主配置文件/etc/grub.conf,設置default=0,表示第一個title下的內容為默認啟動的kernel(一般新安裝的內核在第一個位置):
重啟系統 reboot now,
然后執行以下命令查看是否已經是3.10內核:
查看內核是否支持aufs:
-
安裝docker
安裝依賴:
yum install redhat-lsb yum install device-mapper-libs yum install libcgroup*
如出現以下錯誤:
解決辦法是編輯/etc/yum.repos.d/epel.repo,把基礎的恢復(baseurl),鏡像(mirrorlist)的地址注釋掉:
安裝docker:
yum install docker-io
如出現以下報錯:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
解決辦法是編輯/etc/yum.repos.d/epel.repo,把基礎的恢復(baseurl),鏡像(mirrorlist)的地址注釋掉:
如出現如下錯誤:
原因是:網絡問題,下載失敗。解決辦法:則執行多幾次yum install docker-io命令,直至下載並安裝成功(我這里耗時1個多小時)。
繼續安裝,如出現以下信息,則說明能正常安裝:
-
啟動docker
執行以下命令啟動docker:
service docker start
如出現以上提示則說明安裝並啟動成功。
如出現以下提示則說明安裝失敗:
解決方法:執行以下命令刪除docker-io
sudo yum remove docker-io
執行以下命令手工安裝docker:
rpm -ivh ./docker-engine-1.7.1-1.el6.x86_64.rpm
注:安裝包下載地址:https://yum.dockerproject.org/repo/main/centos/6/Packages/
再次執行以下命令啟動docker:
service docker start
【可選】設置在服務器啟動時啟動:
chkconfig docker on
3.使用
- 查看docker版本
docker version
- 查看docker日志
cat /var/log/docker
- 搜索鏡像
docker search tomcat
注:start代表受歡迎程度。OFFICIAL代表官方版本
- 查看當前所有鏡像
docker images
- 下載鏡像
docker pull centos
- 運行容器
docker run centos echo "hello word"
- 運行容器 hello word
docker run hello-world
輸出這段提示以后,hello world 就會停止運行,容器自動終止。
4.刪除
可以使用yum來刪除docker
-
查詢刪除docker
1.列出docker包的具體的名字
$ sudo yum list installed | grep docker containerd.io.x86_64 1.2.4-3.1.el7 docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-cli.x86_64 1:18.09.3-3.el7
2.刪除docker
$ sudo yum -y remove containerd.io.x86_64 \ docker-ce.x86_64 \ docker-ce-cli.x86_64
-
直接刪除docker
sudo yum remove docker \ docker-io \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
備注:以上命令只會刪除docker運行環境,並不會刪除鏡像,容器,卷文件,以及用戶創建的配置文件。
清除鏡像和容器文件:
sudo rm -rf /var/lib/docker
手動查找並刪除用戶創建的配置文件。
5.注意
5.1.手動掛載cgroup
低版本的Redhat(6.3)可能要手動掛載cgroup,具體操作方法如下:
- 首選禁用cgroup對應服務cgconfig
service cgconfig stop # 關閉服務
chkconfig cgconfig off # 取消開機啟動
- 然后掛載cgroup,可以命令行掛載
mount -t cgroup none /cgroup #僅本次有效
- 或者修改配置文件,編輯
/etc/fstab
,加入
none /cgroup cgroup defaults 0 0
5.2.以非root用戶管理docker
Docker守護程序綁定到Unix socket而不是TCP端口。默認情況下,Unix socke是root用戶才有,而其他用戶只能通過使用sudo使用它。Docker守護程序始終以root用戶身份運行。
如果您不想在docker命令前加上sudo
,請創建一個名為docker的Unix組
並向其添加用戶。當Docker守護程序啟動時,它會創建一個可由該docker
組成員訪問的Unix socket。
- 1.創建docker組
sudo groupadd docker
- 2.添加user到docker組
sudo usermod -aG docker $USER
請將$USER替換為系統中你的除root外的某個用戶。
- 3.注銷並重新登錄,以便重新評估您的組成員身份。
如果在虛擬機上進行測試,則可能需要重新啟動虛擬機才能使更改生效。
- 4.驗證是否可以通過不使用sudo運行docker命令。
docker run hello-world
如果最初在添加用戶到docker組之前,使用的是sudo的Dokcer CLI命令。你可能會出現如下錯誤,表明你的~/.docker目錄由於sudo命令而創建的權限不正確。
WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied
要解決此問題,請刪除~/.docker/目錄(它會自動重新創建,但任何自定義設置都會丟失),或使用以下命令更改其所有權和權限:
$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R $ sudo chmod g+rwx "$HOME/.docker" -R
5.3.鏡像加速
鑒於國內網絡問題,后續拉取 Docker 鏡像十分緩慢,我們可以需要配置加速器來解決。
Docker國內鏡像:
- 網易加速器:http://hub-mirror.c.163.com
- 官方中國加速器:https://registry.docker-cn.com
- ustc的鏡像:https://docker.mirrors.ustc.edu.cn
也可使用私人鏡像加速器地址,如使用阿里雲的鏡像加速器:登錄阿里雲->產品->搜索"容器鏡像服務"->鏡像庫->鏡像加速器。
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 來配置 Daemon。
請在該配置文件中加入(沒有該文件的話,請先建一個):
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://hub-mirror.c.163.com"]
}
配置成功后,CentOS6.5重啟:
service docker restart
配置成功后,CentOS7重啟:
systemctl daemon-reload #重啟加速配置文件
systemctl restart docker #重啟docker后台服務