前言
Docker是一个非常方便的应用容器的引擎,相当于把应用的相关运行环境都打包成盒,直接部署,开箱即用,几乎无需再进行配置,懒人必备。
这次我们选择Docker部署,那么首先就需要安装并配置Docker在我们的Ubuntu上。这次安装的是Docker Communtiy也就是一般说的Docker CE(即社区免费版)。

安装准备工作
1.1 确认当前系统版本
1.2 卸载旧版Docker
正式安装
2.1 使用Repository安装
安装后的相关配置
3.1 令docker无需root权限
3.2 令docker服务开机自动启动
4.1 参考

注:本文主要参考自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"

注意:如果你想要使用nightlytest版本(新颖却不稳定)的版本,只需要在stable字段后面,增加nightlytest或者两个都加进去。

好了,现在仓库已经设置完毕了,我们可以通过它来安装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.13-0ubuntu-xenial |
https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:18.09.03-0ubuntu-xenial |
https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.1ce3-0~ubuntu |
https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.0ce3-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.13-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。

作者:氧化钙CCCCaO
链接:https://www.jianshu.com/p/98095bd65a0e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐