IBM dashDB Local 从入门到精通,第 7 部分: 为 dashDB Local 构建私有 docker 镜像仓库

2017-08-10 19:05:26 lyb211314

IBM dashDB Local 从入门到精通,第 7 部分

为 dashDB Local 构建私有 docker 镜像仓库

张光业

2017 年 8 月 08 日发布

系列内容:

此内容是该系列 8 部分中的第 # 部分: IBM dashDB Local 从入门到精通,第 7 部分

https://www.ibm.com/developerworks/cn/views/global/libraryview.jsp?sort_by=&show_abstract=true&show_all=&search_flag=&contentarea_by=%E6%89%80%E6%9C%89%E4%B8%93%E5%8C%BA&search_by=IBM+dashDB+Local+%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A&product_by=-1&topic_by=-1&type_by=%E6%89%80%E6%9C%89%E7%B1%BB%E5%88%AB&ibm-search=%E6%90%9C%E7%B4%A2

敬请期待该系列的后续内容。

此内容是该系列的一部分: IBM dashDB Local 从入门到精通,第 7 部分

敬请期待该系列的后续内容。

官方的 Docker hub 是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像,比如说,一些客户的数据中心不直接提供外网连接,主要使用内部网络,这时,我们就需要一个私有的镜像仓库来为内网用户提供服务。这个可以通过开源软件 Registry 来实现。

Registry 在 github 上有两份代码: 老代码库新代码库 。老代码是采用 python 编写的,存在 pull 和 push 的性能问题,出到 0.9.1 版本之后就标志为 deprecated,不再继续开发。从 2.0 版本开始就到在新代码库进行开发,新代码库是采用 go 语言编写,修改了镜像 id 的生成算法、registry 上镜像的保存结构,大大优化了 pull 和 push 镜像的效率。

官方在 Docker hub 上提供了 registry 的镜像,我们可以直接使用该 registry 镜像来构建一个容器,搭建我们自己的私有仓库服务。Tag 为 latest 的 registry 镜像是 0.9.1 版本的,本次实验,我们直接采用 2.1.1 版本。

Registry 的部署

1.我们可以运行下面命令获取 registry 镜像,如下所示:

[root@dashdb ~]# docker pull registry:2.1.1
2.1.1: Pulling from library/registry
9943fffae777: Pull complete
fb15e825cb68: Pull complete
b9583a207297: Pull complete
a3ed95caeb02: Pull complete 
87fee1c528e9: Pull complete
829473b2393f: Pull complete
2c1adb4b358c: Pull complete
Digest:sha256:4a9bc5424fa7cc4fafd88b5d8dfb102ceb339e8f418fdeca7f094c86db284f1c
Status:Downloaded newer image for registry:2.1.1
[root@dashdb ~]#

2.启动一个 registry 容器,如下所示:

[root@dashdb ~]#mkdir opt data registry
[root@dashdb ~]#docker run -d -v /opt/data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.1.1 
3b54f2643bfabc5d307ca34cc2cf6a01add6a82142bb3f1c7d72aed1801c6e17

Registry 服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/data/registry 目录挂载到该目录,即可实现将镜像保存到主机的/opt/data/registry 目录了。

3.运行 docker ps 命令查看 registry 容器运行情况,如下所示:

[root@dashdb ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b54f2643bfa registry:2.1.1 "/bin/registry /etc/d" 50 seconds ago Up 46 seconds 0.0.0.0:5000->5000/tcp registry
8ce6b3be54c5 ibmdashdb/local:latest-linux "/usr/sbin/init" 26 hours ago Up About an hour dashDB
[root@dashdb ~]#

我们可以看到,registry 容器已经正常工作。

4.检查 registry 服务运行是否正常

我们可以通过打开浏览器输入 http://127.0.0.1:5000/v2,检查 registry 服务运行是否正常。如果出现下面情况说明 registry 运行正常,如下图所示:

图 1. 检查 registry 服务运行是否正常

Push dashDB Local 到私有镜像仓库

本次实验,我们要将 IBM dashDB Local 镜像 push 到我们创建的私有镜像仓库中。

1.我们通过如下命令查看当前镜像信息,如下所示:

[root@dashdb ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ibmdashdb/local latest-linux 60529ca767cc 5 weeks ago 6.257 GB
hello-world latest c54a2cc56cbb 3 months ago 1.848 kB
registry 2.1.1 52bb991b482e 11 months ago 220.1 MB
[root@dashdb ~]#

我们可以看到,当前有一个 ibmdashdb/local:latest-linux 的镜像。

2.我们通过 docker tag 命令将 ibmdashdb/local:latest-linux 镜像打标记,如下所示:

[root@dashdb ~]# docker tag ibmdashdb/local:latest-linux 192.168.1.128:5000/ibmdashdb:v1

注意,tag image 的格式是:namespace/image:tag, 如果 namespace 为 192.168.1.128:5000,表明是要放入到私有镜像仓库,因为我们声明了 5000 端口。

3.查看当前本地镜像信息,如下所示:

[root@dashdb ~]# docker images
REPOSITORY TAG IMAGE ID
CREATED SIZE
192.168.1.128:5000/ibmdashdb v1 60529ca767cc 5 weeks ago 6.257 GB
ibmdashdb/local latest-linux 60529ca767cc 5 weeks ago 6.257 GB
hello-world latest
c54a2cc56cbb 3 months ago 1.848 kB
registry 2.1.1 52bb991b482e 11 months ago 220.1 MB

我们可以看到,现在增加了一个 192.168.1.128:5000/ibmdashdb:v1 本地镜像,其 IMAGE ID 和 ibmdashdb/local:latest-linux 镜像相同。

4.启用 insecure registry 服务

因为我们启动的 registry 服务不是安全可信赖的,可能会出现无法 push 镜像到私有仓库的问题。我们需要执行如下命令解决上述问题:

[root@dashdb docker]# vi/etc/docker/daemon.json
{ "insecure-registries":["192.168.1.128:5000"] }

然后重启 docker 后台进程:
[root@dashdb docker]# service docker restart

Redirecting to /bin/systemctl restart docker.service

5.运行 docker push 命令,将 192.168.1.128:5000/ ibmdashdb:v1 镜像 push 到我们的私有仓库中,如下所示:

[root@dashdb docker]# docker push 192.168.1.128:5000/ibmdashdb:v1
The push refers to a repository [192.168.1.128:5000/ibmdashdb]
5f70bf18a086: Preparing
5f70bf18a086: Preparing
81c5b3dd8180: Pushed
a17582c66db1: Pushed
f5f562b78761: Pushed
2613a97eb436: Pushed
45bbdab17cd6: Pushed
. . . . . .
v1: digest:sha256:418dd6a2f2ce29b0558e1ce1a7ff45b6c7d0e18d239aa344692137b6bfde3ff1 size:22813

6.查看本地/opt/data/registry 目录

我们查看本地/opt/data/registry 目录,可以看到,已经有了刚推送上来的 192.168.1.128:5000/ ibmdashdb:v1 镜像数据,如下所示:

[root@dashdb v2]# cd /opt/data/registry/docker/registry/v2
[root@dashdb v2]# ls
blobs repositories
[root@dashdb v2]#

7.我们也可以在浏览器中输入 http://127.0.0.1:5000/v2/_catalog,查看 push 的镜像信息,如下图所示:

图 2. 查看 push 的镜像信息

从私有镜像仓库 pull dashDB Local 镜像

本次实验,我们测试从私有镜像仓库 pull 192.168.1.128:5000/ ibmdashdb:v1 镜像到本地。

1.我们执行下述命令删除本地的 192.168.1.128:5000/ ibmdashdb:v1 和 ibmdashdb/local:latest-linux 镜像,如下所示:

[root@dashdb ~]# docker rm dashDB
dashDB

[root@dashdb ~]# docker rmi ibmdashdb/local:latest-linux
Untagged:ibmdashdb/local:latest-linux Untagged:ibmdashdb/local@sha256:44c2a86d69f75cf8edbbd2e9731ff2a4765c2ac6b445923261285c7e8f25306a

[root@dashdb ~]# docker rmi -f 192.168.1.128:5000/ibmdashdb:v1
Untagged: 192.168.1.128:5000/ibmdashdb:v1
Untagged: 192.168.1.128:5000/ibmdashdb@sha256:418dd6a2f2ce29b0558e1ce1a7ff45b6c7d0e18d239aa344692137b6bfde3ff1
Deleted: sha256:60529ca767cc20fec5662993084eb20306bd3de752f35170be937efe94e2c256
[root@dashdb ~]#

2.使用 docker pull 命令从我们的私有仓库中获取 192.168.1.128:5000/ ibmdashdb:v1 镜像,如下所示:

[root@dashdb ~]# docker pull 192.168.1.128:5000/ibmdashdb:v1
v1: Pulling from ibmdashdb
a3ed95caeb02: Pulling fs layer
da71393503ec: Pulling fs layer
6c10d4976ba0: Pull complete
726a72c3b3a4: Pull complete
eb1286efed60: Pull complete
4d4e82e01106: Pull complete
09e7c85fb5b9: Pull complete
. . . . . .
Digest:sha256:418dd6a2f2ce29b0558e1ce1a7ff45b6c7d0e18d239aa344692137b6bfde3ff1
Status:Downloaded newer image for 192.168.1.128:5000/ibmdashdb:v1
[root@dashdb~]#

3.执行 docker images 命令查看获取镜像操作是否成功,如下所示:

[root@dashdb ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.1.128:5000/ibmdashdb v1 60529ca767cc 5 weeks ago 6.257 GB
hello-world latest c54a2cc56cbb 3 months ago 1.848 kB
registry 2.1.1 52bb991b482e 11 months ago 220.1 MB
[root@dashdb ~]#

可以看到,192.168.1.128:5000/ibmdashdb: v1 镜像已经成功获取。

4.构建 dashDB 容器,如下所示:

[root@dashdb ~]# docker run -d -it --privileged=true --net=host--name=dashDB -v /mnt/clusterfs:/mnt/bludata0 -v /mnt/clusterfs:/mnt/blumeta0 192.168.1.128:5000/ibmdashdb:v1 50810d3b17e735628fc25244c3552a1e34dd8eec7ed5f57807e052b15478e75c

[root@dashdb ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50810d3b17e7 192.168.1.128:5000/ibmdashdb:v1 "/usr/sbin/init" 8 seconds ago Up 6 seconds dashDB
3b54f2643bfa registry:2.1.1 "/bin/registry /etc/d" About an hour ago Up About an hour 0.0.0.0:5000->5000/tcp registry
22ecd685ad6e hello-world "/hello" 30 hours ago Exited (0) 30 hours ago sleepy_ardinghelli

通过执行 docker ps 命令,我们可以看到,dashDB 容器已经成功启动。

5.我们也可以采用如下命令启动 dashDB 容器及 dashDB Local 服务,如下所示:

[root@dashdb ~]# docker start dashDB
dashDB
[root@dashdb ~]# docker exec -it dashDB start

结论

通过上述介绍,我们对 IBM dashDB Local 构建、使用私有镜像仓库的配置方法进行了比较详尽的介绍。dashDB Local 采用目前比较热门的 Docker 容器技术进行部署,安装简洁、灵活,既可以在自己的笔记本上部署,也可以在 Linux 集群环境下部署,大家可以自己部署一个 IBM dashDB Local 环境来更好的了解 IBM 云数据仓库解决方案。

参考资源

  • IBM dashDB 知识中心,获得更多 IBM dashDB 云数据仓库相关知识
相关帖子
用户评论
开源开发学习小组列表