笔者将本人在云原生开发中的 Kubernetes 工作教训写成了一个系列实战教程:
- 适宜 Kubernetes 初学者的一些实战练习 (一)
- 适宜 Kubernetes 初学者的一些实战练习 (二)
- 适宜 Kubernetes 初学者的一些实战练习 (三)
- 适宜 Kubernetes 初学者的一些实战练习 (四)
- 适宜 Kubernetes 初学者的一些实战练习 (五)
- 适宜 Kubernetes 初学者的一些实战练习 (六)
从本文开始,笔者将开启一个新的系列写作,主题是 Kubernetes 运行的基石之一:Docker 技术。
Docker 是一个开源的利用容器引擎,让开发者能够打包他们的利用以及依赖包到一个可移植的容器中,而后公布到任何风行的 Linux 机器上,也能够实现虚拟化。容器是齐全应用沙箱机制,相互之间不会有任何接口。
这个系列同下面提到的 Kubernetes 实战系列文章一样,分享若干笔者在理论我的项目中的 Docker 应用案例和教训。
练习 1:Ubuntu 零碎里 Docker 的装置步骤
因为 Ubuntu 里 apt 官网库里的 docker 版本比拟低,因而先用上面的命令行卸载旧版本(如果有的话)
sudo apt-get remove docker docker-engine docker-ce docker.io
更新 apt 包索引:
sudo apt-get update
执行下列命令行,使 apt 能够通过 HTTPS 协定去应用存储库:
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
增加 Docker 官网提供的 GPG 密钥:
curl -fsSL https://download.docker.com/l… | sudo apt-key add –
设置 stable 存储库:
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/l… $(lsb_release -cs) stable”
最初再次更新 apt 包索引:
装置最新版本的 docker-ce:
sudo apt-get install -y docker-ce
装置结束后,能够看到 Docker 服务曾经从 /lib/systemd/system/docker.service
启动了,dockerd 过程 id 为 4921:
命令行 ps -aux 查看过程 id 为 4921 的过程门路:/usr/bin/dockerd -H fd://
应用命令 sudo docker version
能够查看装置 docker
的版本:
应用命令 sudo docker run hello-world
,能察看到从近程下载这个测试用的容器:
Pulling from library/hello-world:
而后看到打印消息:Hello from Docker!
阐明 Docker 装置胜利。
练习 2:如何解决 Docker 谬误音讯 request canceled
在本地装置 Kubernetes 时,遇到谬误音讯:
request canceled while waiting for connection(Client.Timeout exceeded while awaiting headers)
这个起因是 Docker 利用没有正确设置代理。在 Mac 上设置代理十分不便:
在 Proxies 面板里,抉择 Manual proxy configuration
, 即手动设置。
设置完之后,点击按钮 Apply & Restart
:
之后在 shell 里应用命令行 docker pull gcr.io/google_containers/pause-amd64:3.1
能够胜利把 Docker 镜像下载到本地。
应用命令 docker images
,可能查看到胜利装置的镜像:pause-amd64
练习 3:如何解决 Docker 谬误音讯:please add——insecure-registry
本地装置 Kubernetes 时,遇到如下的谬误音讯:
pleade add –insecure-registry gcr.io to daemon’s arguments
解决方案:点击 Docker 的 Preference 菜单:
点击 Daemon 标签页,在 Insecure registries
里保护记录:
将错误信息里提到的 gcr.io 保护进 Insecure registries, 点击按钮 Apply & Restart
, 重新启动 Docker Daemon:
之后谬误音讯隐没。本解决方案在 Mac OS 上测试通过。
练习 4:从 Hello World 例子学习 Docker 镜像的目录存储设计
咱们胜利装置完 Docker 后,执行命令行 sudo docker run hello-world
, 如果是第一次执行,则会从近程拉取 hello-world
的镜像到本地,而后运行,显示 hello world
.
以 ubuntu 零碎为例,本地镜像存储于目录 /var/lib/docker
文件夹下:
相干目录介绍如下。
- /var/lib/docker/image/overlay2:存储镜像治理数据的目录,以应用的存储驱动命名,在我的 ubuntu 零碎上,应用的驱动为 overlay2。
其中 repositories.json 文件相当于 SAP UI5 里的 manifest.json, 以及 nodejs 我的项目中的 project.json:
- /var/lib/docker/image/overlay2/distribution$: 从远端拉到本地的镜像相干元数据。
- /var/lib/docker/image/overlay2/imagedb: 镜像数据库。
- /var/lib/docker/image/overlay2/imagedb/content:
每镜像档次的配置 digest, 也就是镜像 ID。content 文件夹里能看到一个 sha256 子文件夹。
进入该子文件夹,会看到一个以镜像 ID 命名的文件,咱们用命令行 docker images
看到的镜像 ID 的前 12 位就来自这个文件。
- /var/lib/docker/image/overlay2/layerdb: 镜像每个 layer 的元数据。
进入 sha256,会看到 layer 的 chain ID:
chain ID 内的内容:
总结
本文首先介绍了 Docker 在 Ubuntu 零碎上的装置步骤,而后通过本地装置 Kubernetes 时遇到的两个和 Docker 相干的谬误,分享了理论我的项目中 Docker Proxy 和 Insecure Registry 的设置步骤,最初从 Docker Hello World 级别的入门例子动手,介绍了 Docker 镜像存储目录的设计原理。