前言
接着上回,要部署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)
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= docker-ce-cli= 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。
参考
- Unix domain socket和IP(tcp/ip) socket的区别
- Get Docker Engine - Community for Ubuntu
- Optional Linux Post-installation steps
- 浅析 Linux 初始化 init 系统,第 3 部分:Systemd
- Docker 源码分析(三):Docker Daemon 启动