Docker的安装
##将非root用户加入本地 Docker Unix组中
最好通过非 root 用户来使用 Docker,这时需要添加非 root 用户到本地 Docker Unix 组当中。
如果你没有将用户放入到Docker Unix组中,你执行docker version等命令会报 Permission denied
把系统当前用户的用户添加到 Docker 组中,以及如何确认操作是否执行成功
$ who am i # 显示出自己在系统中的用户名,登录终端,登录时间
k8s-master01 pts/0 2021-09-24 23:35 (:0)
$ sudo usermod -aG docker k8s-master01 #加入Docker组
$ cat /etc/group | grep docker #确定操作是否执行成功
docker:x:982:k8s-master01
此时再去执行 docker version
如果当前登录用户就是要添加到 Docker 组中的用户的话,则需要重新登录,组权限设置才会生效
Docker存储引擎
每个 Docker 容器都有一个本地存储空间,用于保存层叠的镜像层(Image Layer)以及挂载的容器文件系统。
默认情况下,容器的所有读写操作都发生在其镜像层上或挂载的文件系统中,所以存储是每个容器的性能和稳定性不可或缺的一个环节。
存储驱动的选择是节点级别的。这意味着每个 Docker 主机只能选择一种存储驱动,而不能为每个容器选择不同的存储驱动。
在 Linux 上,读者可以通过修改 /etc/docker/daemon.json 文件来修改存储引擎配置,修改完成之后需要重启 Docker 才能够生效。
Docker 可选择的一些存储驱动包括 AUFS(最原始也是最老的)、Overlay2(可能是未来的最佳选择)、Device Mapper、Btrfs 和 ZFS。
下面的代码片段展示了如何将存储驱动设置为 overlay2。
{ "storage-driver": "overlay2" }
提示:如果配置所在行不是文件的最后一行,则需要在行尾处增加逗号。
如果读者修改了正在运行 Docker 主机的存储引擎类型,则现有的镜像和容器在重启之后将不可用,这是因为每种存储驱动在主机上存储镜像层的位置是不同的(通常在 /var/lib/docker//… 目录下)。
/etc/docker docker的认证目录
/var/lib/docker docker的应用目录,镜像存储的地址
Docker的组件
##客户端和服务端
当我们安装 Docker 的时候,会涉及两个主要组件:Docker 客户端和 Docker daemon(Docker 服务端)
使用 Linux 默认安装时,客户端与 daemon 之间的通信是通过本地 IPC/UNIX Socket 完成的(/var/run/docker.sock)
可以使用docker version
命令来检测客户端和服务端是否都已经成功运行,并且可以互相通信
如果不能正常运行,请将当前用户加入到docker的用户组中,或者在所有命令都加上sudo前缀
镜像
docker image ls:查看本地Docker主机上存储的镜像,可以通过 --digests 参数来查看镜像的 SHA256 签名
docker image pull ::拉取镜像
docker image rm ::删除镜像
docker image inspect ::该命令完美展示了镜像的细节,包括镜像层数据和元数据
容器
docker container run -it 镜像名称:latest /bin/bash:启动容器
docker container ls:查看系统内全部处于运行状态的容器
docker container ls -a:查看docker中的全部容器,包括停止状态的容器
docker container exec -it 容器名称/容器ID bash:进入一个容器终端
docker container stop 容器名称/容器ID:停止容器
docker container start 容器名称/容器ID:重启处于停止状态的容器
docker container rm 容器名称/容器ID:删除容器
docker container inspect 容器名称/容器ID:显示容器的配置细节和运行时信息
私有仓库的搭建
- 下载镜像
docker pull registry
- 配置私有仓库(/etc/docker/daemon.json)
{
"registry-mirrors": ["https://ei8e0qtm.mirror.aliyuncs.com"], #共有仓库
"insecure-registries": ["192.168.31.166:5000"] #私有仓库
}
如果daemon.json配置错误,在推送镜像的时候会报错:
Get https://xxx:5000/v2/: http: server gave HTTP response to HTTPS client
配置成功之后,重启registry即可
docker start 镜像名称/镜像id
- 重启docker
systemctl restart docker
- 创建register容器(关联私有仓库配置)
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/var/lib/docker/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。
docker run -d -v /var/lib/docker/registry:/var/lib/registry -p 5000:5000 --name registry registry:latest
访问:http://192.168.31.166:5000/v2/
- 修改镜像的名称
镜像的完整命名格式:[registry-host]:[port]/[username]/[imagename],当我们使用docker push的时候,docker会自动识别[registry-host]部分为容器镜像仓库地址。
docker pull nginx
docker tag nginx:latest 192.168.31.166:5000/nginx:latest
- 推送镜像到私有镜像中
docker push 192.168.31.166:5000/nginx:latest
- 拉取私有仓库镜像
docker pull 192.168.31.166:5000/nginx:latest
- 进入文件夹(/var/lib/docker/registry/docker/registry/v2/repositories),发现里面存在nginx镜像
访问:http://192.168.31.166:5000/v2/_catalog,即可查看本地仓库中的镜像