暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

WSL 2 安装 Docker

李明双的身边 2021-08-11
1067

近期在学习 Golang 欢迎关注 一起学习


Docker 到底方便了谁?

容器的产生大大的减少了“产研测”当中“研发”和“测试”的痛点。但是作为开发,其实大多数对于环境问题都是有能力去快速解决的,因此我个人觉得:其实容器的诞生更是解决了测试的痛点。解放了测试人员因为各种开发-测试-生产环境不一而带来的各种损耗问题。

因此对于开发、测试来说熟悉使用 Docker/Podman 是一项必备的技能。

尴尬的 Docker for Windows

在 WSL 2 没有出现之前如果要在 Windows 上玩 Docker 很多人是不建议的。

首先:因为即使是使用 Docker 官方的提供的 Docker for Windows 也经常会出些奇奇怪怪的错误并迟迟得不到解决。

其次:通过虚拟机安装 boot2docker.iso,在虚拟出来的 Linux 系统下玩,但启动虚拟机是真慢。并且,随着 WSL 2 的推出 boot2docker 的作者也在 GitHub 宣布该项目不在维护建议大家转向 WSL 2。

因此:WSL 2 对于经常需要使用一些办公程序软件、又想玩 Docker、还没钱买 Mac 的用户来说,确实是一个福音。

Docker 一定要在 Linux 下玩吗?

因为 Docker 最初就是基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

Docker 最初实现是基于 LXC,从 0.7 版本以后 Docker 公司开始逐步去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。

但经过大家验证,还是 Linux 内核的操作系统运行 Docker 是最好的。下面将带大家结合 WSL 2 在 Windows 上使用最简单的方式来快速安装 Docker 服务。

安装 Docker CE

这里采用最简单的一键式进行安装。get.docker.com
是一份 Shell 安装脚本,可以自动识别不同的发行版然后自动安装最新版本的 Docker CE。

curl -fsSL get.docker.com -o tmp/get-docker.sh && sudo bin/sh tmp/get-docker.sh --mirror Aliyun && rm -f tmp/get-docker.sh

复制

上述自动安装脚本执行成功之后,可以执行下述命令进行验证 Docker CE 是否安装成功。

## 启动 docker 服务
# 注意:有的发行版是通过 systemctl start docker 启动
sudo service docker start 

## 打印docker系统详细信息
docker info

复制

看到以上信息证明已经安装完成并成功启动了服务,若有提示权限问题直接看文章末尾!

安装 Docker Compose

安装 Docker Compose 也可以通过官方文档(https://docs.docker.com/compose/install/#install-compose-on-linux-systems)提供的方式进行一键安装。

## 下载当前(2021/05/26)最新版本是:1.29.2

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o usr/local/bin/docker-compose

## 赋予 docker-compose 可执行权限
sudo chmod +x usr/local/bin/docker-compose

## 刷新当前进程信息
exec $SHELL -l

## 检查docker-compose是否安装成功
docker-compose --version

复制

Docker Server 镜像源加速

Docker 的官方镜像源服务在国外,因此经常出现访问超时的情况。我们可以通过设置国内镜像源代理进行访问加速。

1、Docker 官方中国区镜像地址:https://registry.docker-cn.com
2、七牛云镜像地址:https://reg-mirror.qiniu.com/
3、ustc 镜像地址:https://docker.mirrors.ustc.edu.cn
4、如果想使用阿里云镜像地址需要有阿里云账号,我在广州试用了各镜像地址,阿里云的镜像加速是效果最好。阿里云镜像地址设置参考文章底部:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

当你的docker版本较新(Docker Version >= 1.10)时,建议直接通过 /etc/docker/daemon.json
进行配置(若没有该文件则直接新建,写入下述配置即可)

{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

复制

修改完成后,执行sudo service docker restart
重启docker

踩坑预警

使用 docker info
打印信息时可能会遇到下述信息,提示 /var/run/docker.sock 权限不足

Client:
Debug Mode: false

Server:
ERROR: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info: dial unix /var/run/docker.sock: connect: permission denied
errors pretty printing info

复制

通过ls -al /var/run/docker.sock
查看该文件权限信息,发现文件是 root 用户或 docker 组用户才能进行读写

可以通过id
groups ${USER}
查看当前用户所在的组信息,发现当前用户的附加组信息里并没有 docker ,那么问题就好解决了:只需将当前用户加入到 docker 组即可.

id show ${USER} groups

1、创建  docker  组

sudo groupadd docker

复制

2、将当前用户加入到 docker 组

sudo usermod -aG docker ${USER}

复制

3、刷新用户的用户组信息

你需要先登出再重新登录一次,这样当前系统会重新刷新你的身份信息。或者,使用下列方式不用退出即可刷新当前进程的用户身份信息:

exec su -l ${USER}

复制

此时再运行docker info
应该就正常打印信息了!

-END-


由于近期主要目的还是记录 Golang 的学习,所以 Docker 的栏目后面慢慢再补一下。单纯使用的话基本就几个简单的命令即可,上网稍微查一下即可。

文章转载自李明双的身边,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论