近期在学习 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 的官方镜像源服务在国外,因此经常出现访问超时的情况。我们可以通过设置国内镜像源代理进行访问加速。
当你的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 组即可.
1、创建 docker 组
sudo groupadd docker
复制
2、将当前用户加入到 docker 组
sudo usermod -aG docker ${USER}
复制
3、刷新用户的用户组信息
你需要先登出再重新登录一次,这样当前系统会重新刷新你的身份信息。或者,使用下列方式不用退出即可刷新当前进程的用户身份信息:
exec su -l ${USER}
复制
此时再运行docker info
应该就正常打印信息了!
-END-
由于近期主要目的还是记录 Golang 的学习,所以 Docker 的栏目后面慢慢再补一下。单纯使用的话基本就几个简单的命令即可,上网稍微查一下即可。