Docker使用笔记
安装
各种发行版都不一样,Arch直接sudo pacman -S docker
就行。
安装完毕后,输入sudo systemctl enable --now docker.service
启动Docker服务。
权限配置
想不用sudo
就用Docker,那就得配置用户组权限:
1 | sudo groupadd docker # ensure the usergroup docker exists |
镜像加速#
我使用的是阿里云镜像
安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce配置镜像加速器
1 | root@Ubuntu:~# vim /etc/docker/daemon.json |
最后使用docker info
就可以查看是否更换镜像成功。
使用指南
离线使用
最近国内docker镜像都歇菜之后,倒也该了解下这方面的知识了
假设目标设备已经安装docker,但是无法正常使用docker pull。那么找到一个有网络条件的设备,使用docker pull
命令从Docker Hub或其他仓库拉取所需的镜像。完成后,使用docker save
命令将镜像保存到文件中:
1 | docker save -o /path/to/image.tar imageName:tag |
完成后,将生成的.tar
文件复制到存储介质中。
在无网络设备上插上你的存储设备,使用docker load
命令从.tar
文件中加载镜像:
1 | docker load -i /path/to/image.tar |
后续用法就没啥区别了。
疑难杂症
tls: failed to verify certificate: x509: certificate signed by unknown authority
现象是,在容器内会发现https连接不可用,都会报上面的错误。但是容器的宿主机连接正常。
报错内容是证书由未知机构签署。原因是基于https的web连接基于tls机制来认证连接双方可信,并且不会存在中间人攻击(即,在你到服务器的通信中,第三方几乎不可能解密你们加密后的通信内容)。但是因为基于tls可信原理的条件进行推导,最终会得出必须存在一个可信根证书预先分发给客户端的结论。
x509是一个标准,它定义了公钥证书的格式,这些证书用于TLS和其他加密通信。
所以,上面的错误表示证书部分出现错误。未知证书表示客户端没有信任签发服务器证书的证书颁发机构(CA)。客户端的信任存储中没有包含该CA的证书,因此无法验证服务器证书的有效性。
因此鉴定为容器镜像里边缺tls证书了。
解决方案
- 在容器中执行
apt-get install ca-certificates
- 在映射中添加如下映射:
/etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt
- 在映射中添加如下映射:
/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
如果是ubuntu:latest
的话,那大概率已经安装ca-certificates
,执行2,3尝试即可。
参考文献
- Docker官方文档:https://docs.docker.com/