前言

最近在学习go语言,在社区里看到一篇用docker部署go语言的帖子,很是有趣,便想着自己折腾一下试试,刚好win下面有WSL,可以很方便的部署与测试,但是过程中还是踩坑了不少,所以来记录一下。

正文

(1)卸载老版本

1
sudo apt-get remove docker docker-engine docker.io containerd runc

如果是首次安装,请忽略。

(2)更新apt包索引

1
sudo apt-get update

(3)安装 apt 依赖包,用于通过HTTPS来获取仓库

1
2
3
4
5
6
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

(4)添加Docker的官方GPG密钥

1
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

排错

添加docker的GPG密钥之后,或者更新apt包索引,会出现一个警告:

这个警告大概的意思是我们把软件包的秘钥保存到了 /etc/apt/trusted.gpg 这个老版本系统的文件里。

这里系统提示只是告诉你新版系统不能把秘钥放在 /etc/apt/trusted.gpg 里,但是没告诉我们新版系统的秘钥究竟要放在那里。

其实答案很简单,就在 /etc/apt/trusted.gpg.d 目录下:

在执行完第4步添加密钥之后,可以看到上述目录中出现了一个 trusted.gpg 文件,这就是我们添加的密钥。

可以通过 sudo apt-key list 来查看当前系统中的密钥:

每个秘钥的第二行都有一串十六进制的编码,这个编码就是这个秘钥的 id

导出我们添加的docker的密钥:

1
apt-key export 0EBFCD88 | gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg

1、使用root用户执行, sudo 命令权限是不够的。

2、导出时的秘钥只需要后8位的 id 即可,而且 id 之间没有空格。

将秘钥导出后就可以把 /etc/apt 目录下 trusted.gpg 文件删除了。

继续正文

(5)验证密钥

1
sudo apt-key fingerprint 0EBFCD88

(6)设置稳定版仓库

1
2
3
4
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
$(lsb_release -cs) \
stable"

设置完之后请更新apt包索引: sudo apt-get update

(7)安装最新版本的Docker Engine-Community

1
sudo apt-get install docker-ce docker-ce-cli containerd.io

要安装特定版本的 Docker Engine-Community,请在仓库中列出可用版本,然后选择一种安装。列出您的仓库中可用的版本:

1
2
3
4
5
6
7
8
9
$ apt-cache madison docker-ce

  docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu  xenial/stable amd64 Packages
  docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu  xenial/stable amd64 Packages
  docker-ce | 18.06.1~ce~3-0~ubuntu       | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu  xenial/stable amd64 Packages
  docker-ce | 18.06.0~ce~3-0~ubuntu       | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu  xenial/stable amd64 Packages
  ...

$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

(8)测试是否安装成功

1
sudo docker run hello-world

请确保电脑联网,会自动下载该测试镜像。

(9)为普通用户增加权限

docker默认普通用户是没有权限的,可以通过下列命令为普通用户增加docker运行的权限。

1
2
3
4
5
6
#添加你的用户进docker用户组
sudo usermod -aG docker <username>
#更新docker用户组
newgrp docker
#测试普通用户权限
docker run hello-world