前言
接著上回,要部署NextCloud服務,那么如何安裝這個服務呢?在Ubuntu 18.04下,根據官方文檔,我們可以使用Snap
部署,也可以使用docker
部署。(其實Snap
更簡單...)
言歸正傳,Docker是一個非常方便的應用容器的引擎,相當于把應用的相關運行環境都打包成盒,直接部署,開箱即用,幾乎無需再進行配置,懶人必備。
這次我們選擇Docker部署,那么首先就需要安裝并配置Docker在我們的Ubuntu上。這次安裝的是Docker Communtiy也就是一般說的Docker CE(即社區免費版)。
- 安裝準備工作
1.1 確認當前系統版本
1.2 卸載舊版Docker - 正式安裝
2.1 使用Repository安裝 - 安裝后的相關配置
3.1 令docker無需root權限
3.2 令docker服務開機自動啟動 - 參考
注:本文主要參考自Docker官方文檔,英語好的可以直接看這個。
1. 安裝準備工作
1.1 確認當前系統版本
需要安裝Docker的話,你需要確認你的Ubuntu是64位的,并且是以下4個版本號其中之一:
- Disco 19.04
- Cosmic 18.10
- Bionic 18.04(LTS)
- Xenial 16.04(LTS)
如果你不知道自己的版本號,可以輸入:
lsb_release -c
通過上面的指令來查看Ubuntu的codename,看一下是否是上面4個版本號其中之一。
另外,Docker支持x86-64(amd64)
,armhf
, arm64
, s390x(IBM Z)
, ppc64le(IBM Power)
硬件架構。通常我們遇到比較多都是X86芯片的機器。
1.2 卸載舊版Docker
舊版的Docker有很多叫法,有docker
, docker.io
, 或是docker-engine
。為了確保安裝順利,我們應該先把這些老舊的docker卸載,輸入以下指令:
sudo apt-get remove docker docker-engine docker.io containerd runc
如果順利,那么會輸出none of these packages are installed。
2. 正式安裝
2.1 使用Repository安裝
第一種安裝方法是通過Repository安裝。我們需要先設置一個Repository軟件倉庫,然后我們從這樣一個倉庫來安裝或更新。(在官方文檔中另有兩種安裝方式:從.deb包文件安裝;從官方簡易腳本安裝,這里不做詳細介紹)
首先更新apt
包管理器的源:
sudo apt-get update
然后通過設置apt
來允許通過https傳輸的一個倉庫:(這里輸入了 \
后,直接按下回車,會出現一個>
符號,可以繼續進行下一行的輸入)
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
隨后我們添加Docker官方的GPG密鑰:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
然后我們輸入:
sudo apt-key fingerprint 0EBFCD88
來驗證密鑰是否正確,如果正確的話,應該是和下面這樣的輸出一致:
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
現在我們來設置repository,你需要輸入:
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
注意:如果你想要使用nightly或test版本(新穎卻不穩定)的版本,只需要在
stable
字段后面,增加nightly
或test
或者兩個都加進去。
好了,現在倉庫已經設置完畢了,我們可以通過它來安裝Docker了,再刷新一下apt
的源:
sudo apt-get update
然后,如果需要安裝最新的docker的話,輸入下面的指令即可:
sudo apt-get install docker-ce docker-ce-cli containerd.io
現在你已經安裝完成docker了!
當然,用 apt
安裝的是最新版,但是出于穩定考慮你可能需要某個具體版本,那么你可以通過
apt-cache madison docker-ce
獲取倉庫中的docker版本,你可能會收到以下提示:
docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.1~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.0~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
...
而后通過:
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
其中 VERSION_STRING
字段,輸入剛才通過中間的那部分,例如可以是5:18.09.1~3-0~ubuntu-xenial
安裝具體某一個剛才列舉出的docker。
3. 安裝后的相關配置
安裝完成docker之后,我們還需要對它進行一定的配置,來方便我們后期的使用。
3.1 令docker無需root權限
Docker daemon(Docker守護進程,可以理解是整個Docker的后臺)是綁定了Unix Socket(Unix套接字,一種通訊方式),而不是TCP端口來進行通訊。而對于Unix Socket而言,它默認是屬于root
用戶的,其他用戶要使用的話,必須在每句命令前加sudo
,這樣的話Docker daemon就一直是運行在root
用戶上了。
這樣比較麻煩,我們并不想每句命令都加sudo
,再一遍遍地輸入密碼,那應該怎么辦呢?
根據前文,Unix Socket默認歸屬于root
用戶,那么我們調整用戶就可以了。
換句話說,我們新建一個Unix用戶組,名叫docker
(當然你可以叫它別的名字),然后在這個用戶組中,添加一個用戶,這樣使得daemon啟動的時候,使用的Unix Socket是屬于這個用戶的,而不是root
,那么就不需要sudo
了。
注:這樣的做法可能會引起安全問題,具體可參考Docker Daemon Attack Surface這篇文檔。
- 建立docker用戶組,并添加用戶:
sudo groupadd docker
sudo usermod -aG docker $USER
- 注銷你的賬戶,重新登陸,使得用戶組設置變動生效:
若你使用的是虛擬機,那么你最好重啟虛擬機使得設置改動生效
若你是用的桌面操作系統比如Linux某個發行版;MacOS;Windows等,完全注銷你的賬戶,然后再重新登陸使得設置改動生效。
如果你用Linux,你也可以用這樣一條指令,來使得改動生效:
newgrp docker
- 檢驗一下,是否無需
sudo
:
docker run hello-world
這條指令就會下載一個測試docker用例,并且會提示各種測試的結果,如果提示結果正確,那么就配置正常!
3.2 令docker開機自動啟動
docker服務部署之后,我們通常想讓它進行自動化工作,隨著宿主機開機自動開啟這個服務。
在許多Linux發行版中,如RHEL, CentOS, Fedora, Ubuntu 16.04或更高版本,是使用systemd
來管理哪個服務會開機自動啟動。需要注意的是,Ubuntu 14.10或更低版本是使用upstart
的。
我這里用的是Ubuntu 18.04 LTS server,所以用systemd
來完成添加:
sudo systemctl enable docker
如果你不要讓docker開機啟動,可以輸入:
sudo systemctl disable docker
這樣我們的docker服務就可以開機啟動,非常方便了。
至此,安裝后的配置操作就完成了。我們從docker的安裝,到簡單配置,現在,你可以開始使用它了。
還有許多其他安裝后操作,具體大家可以參考Post-installation steps for Linux。