防走丟
轉載自:https://www.cnblogs.com/caoweixiong/p/12186736.html
前言
從 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後臺服務