iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 3
3

前二天主要是在介紹 Docker 的一些基本概念,今天要介紹如何把 Docker 安裝並且執行起來。

一.安裝前準備

安裝 Docker 使用的作業系統是 CentOS 7.3, Kernel 使用預設的 3.10.0-514

這裡要注意的一點是 Docker 會呼叫到 Linux Kernel 的 Namespace 和 Cgroup 所以需要選擇正確版本的 Linux Kerenel,不然 Docker 的 service 會啟動不起來。像是之前我就用 CentOS 6.1 的作業系統,預設 Kerenel 版本是 2.6.32-131,安裝 Docker結果Docker 的 service一直都沒辦法啟動,後來換了 CentOS 7 才成功的把 Docker service執行起來。

  • 查看作業系統版本指令如下:
$ lsb_release -a

如果找不到 lsb_release 指令,就需要使用以下指令安裝套件

# yum install -y redhat-lsb-core
  • 查看 Kernel 版本指令如下:
$ uname -a

執行結果如下圖:
https://ithelp.ithome.com.tw/upload/images/20171206/20103456soarizkKHW.png

二. 安裝 Docker

方法一: 直接使用CentOS 7 預設的 yum 安裝

  • 使用的指令如下(需要切換到 root 權限的使用者):
# yum install -y docker
  • 啟動 docker 的 service 指令如下
# systemctl start docker

安裝完 docker 之後使用 docker version,確認安裝的版本
https://ithelp.ithome.com.tw/upload/images/20171206/20103456h0bobMnVfo.png

方法二: 如果要使用較新版本的Docker,就需要從網路上找 Docker rpm 安裝檔,來安裝

  • 還是一樣使用 yum 指令,如下
# yum install https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-17.05.0.ce-1.el7.centos.x86_64.rpm

可以到以下網站去選擇符合自已需求的 docker 版本:
https://yum.dockerproject.org/repo/main/centos/7/Packages/

  • 啟動 Docker 的 service 指令如下
# systemctl start docker
  • 使用 docker version查看版本,是否正確畫面如下
    https://ithelp.ithome.com.tw/upload/images/20171206/20103456TYo0eHhUOq.png

三. 如何把安裝完的 Docker 解安裝

  • 使用 rpm 查看安裝的 docker 有哪些東西,指令如下
# rpm -qa|grep docker

如下圖
https://ithelp.ithome.com.tw/upload/images/20171206/20103456Rv3ukRi9jc.png

  • 執行解安裝指令如下
# yum remove docker-client
# yum remove docker-common
# cd /etc
# rm –rf docker
# cd /var/lib
# rm –rf docker

四. 啟動 Docker service 指令如下

啟動 docker service 的指令上面已經有介紹到了,如下

# systemctl start docker

如果下次重新開機,需要能自動啟動 docker service,使用以下指令設定

# systemctl enable docker

五. 遇到的問題

在使用 root 使用者權限時可以順利的執行 docker images 指令,但是換到一般的使用者執行 docker images 指令時就會收到錯誤訊息,如下圖:
https://ithelp.ithome.com.tw/upload/images/20171206/20103456mBv3tya5UQ.png

這個問題主要是在執行 docker service 時,會有一個檔案 /var/run/docker.sock,它的權限不能給一般使用者執行,如下圖:
https://ithelp.ithome.com.tw/upload/images/20171206/20103456dVs7nmYacQ.png

要解決這個問題,主要有二個方法:
方法一: 使用偷吃步的方式,直接把 /var/run/docker.sock 檔案的權限開到最大,如下指令:

# chmod 777 /var/run/docker.sock

但是使用這種方式會有一種缺點,就是下一次重新啟動 docker service 時,這個檔案的權限要會被改回之前的狀態,所以還是會沒有把問題撤底解決。

方法二: 做以下幾個步驟的設定

  • 修改 /etc/docker/daemon.json 的檔案,如果沒有此檔案直接建立新的檔案,指令如下:
Vi /etc/docker/daemon.json

檔案內容如下:
{
"live-restore": true,
"group": "dockerroot"
}
JSON的逗號要記得加不然重新啟動 Docker Service 會啟動不起來

  • 使用 root 權限把 user1 指令加入到 dockerroot 的 group,指令如下
#  usermod -aG dockerroot user1
  • 重新啟動 docker service,指令如下
# systemctl restart docker
  • 再一次使用一般使用者(user1)執行 docker images 指令,確認是否解決了問題
    https://ithelp.ithome.com.tw/upload/images/20171206/20103456OARjS22IbP.png

之後我所介紹使用的 docker 版本如果沒有特別說明,都是使用 1.12.6。今天已經把docker 安裝完成了,明天就可以開始把 docker image pull 下來使用。

參考網站:

https://coderleaf.wordpress.com/2017/02/10/run-docker-as-user-on-centos7/


上一篇
Day2:認識 Docker 基本概念
下一篇
Day4:用簡單的例子來說明如何使用 Docker 指令
系列文
用30天來介紹和使用 Docker30

1 則留言

0
yangj26952
iT邦新手 4 級 ‧ 2018-01-24 17:34:30

加了 /etc/docker/daemon.json 之後,也重新啟動 docker service,如果還是發生了

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

那就整台 host 重新開機看看,應該可以解決這個問題。

我要留言

立即登入留言