Docker使用入门教程(2)

在这里插入图片描述
前面一篇教程里面,我们操练了一下如何在一台服务器上实际安装和使用docker。接下来我们来讨论一下和镜像有关的话题。

Docker镜像的分层结构

前面我们也提到过,docker在宿主机上面并不是以一个单独的文件保存一个镜像,而是有一套复杂的类似数据库的数据结构来保存所有的镜像。
这个数据结构,是一个分层的结构。借助网上找来的一张图来解说一下吧。
在这里插入图片描述
对于如图所示的这样一个镜像,在docker环境里面是以4个层来存储的。而这四个层,以构建这个镜像的dockerfile里面的操作一一对应。
也就是说,我们在build一个镜像的时候,在dockerfile里面写入的from某个基础镜像,在这个基础镜像的基础上做1,2,3几个操作。对应到这个构建好的镜像,就是分为基础镜像一层,123每个操作一层,一共四层存储。Dockerfile里面的每条命令都会添加一个数据层,最终的image是以若干层叠加存储在宿主机上。

如果另外有一个镜像,和之前的镜像只在最后一层不一样,那么docker系统只保存最后一层的数据,也就是其中的差值。

这样做的好处在于:

  1. docker images看到的镜像大小并不是实际占用的磁盘空间,实际空间占用要小得多
  2. 保存大量的image也不会占用大量的磁盘空间
  3. 拉取同一个镜像的不同版本的时候,除了第一次之外,不会占用大量的带宽

这都是因为同一个镜像的不同版本,甚至不同镜像,都有可能共享大量相同的数据层,因此在存储和数据传输时,大量的数据是可以复用的。

save/load镜像

一般来说我们的镜像的来源,要么是自己build,要么就是从镜像库里面拉取回来。但是总会有一些意外情况,我们需要能用文件传输的方式来操作镜像,docker也有提供类似的机制。

可以先在一台可以pull的服务器上pull image,然后使用命令sudo docker save -o 镜像名.tar 镜像ID予以导出成文件,将文件通过scp或ftp传输到Private Registry上,再使用命令sudo docker load 镜像名.tar进行导入。这也是用文件传输镜像的办法。

私有镜像库

docker安装了之后,默认就可以从docker公司提供的公共镜像库拉取镜像,也可以提交自己的镜像。这样方便是方便,但是有两个问题。首先docker镜像库在国外,虽然国内有不少公司也帮忙做了mirror,但是毕竟还是不方便。其次,如果是商业使用,没人愿意把自己的产品打包的镜像放在别人的服务器上。
私有镜像库就是用来解决这个问题的。这里也来实际操作一下私有镜像库的安装和使用。既然这个文章是介绍docker的,我们当然是用docker来安装私有镜像库。

安装

启动私有镜像库:docker run -d -p 5000:5000 -v /data/registry:/var/lib/registry --name registry --restart=always registry
5000端口是registry需要用到的端口,所以需要暴露出来。
数据文件夹照惯例我们也暴露出来,以便后期备份和数据迁移。

使用

假设我们已经build了一个自己的镜像,叫做testhelloworld。
上传之前需要把本地的镜像以及版本号和registry里面对应
docker tag testhelloworld:0.2 localhost:5000/testhelloworld:0.2

然后才可以上传
docker push localhost:5000/testhelloworld:0.2

扫描二维码关注公众号,回复: 5730904 查看本文章

上传了之后就可以下载了
docker pull localhost:5000/testhelloworld:0.2

在远端的服务器上下载

假设安装了docker registry的服务器ip是192.168.20.5,如果要在其他的服务器上下载,需要执行
docker pull 192.168.20.5:5000/testhelloworld:0.2

这里要注意一点,docker registry默认是https访问,所以正常情况下没有用域名+证书的方式访问是不行的。解决方法是申明这个registry为不安全的,方法是编辑docker的配置文件,CentOS下面配置文件在/etc/docker/daemon.json。斜粗体的是需要添加的内容:
{“registry-mirrors”: [“http://86d2a50b.m.daocloud.io”]***,“insecure-registries”: [“192.168.20.5:5000”]***}

介绍一下Portainer

通常使用Linux的人一般都习惯了用命令行操作,但还是有人觉得图形界面操作起来方便。实际上在一台安装好了docker环境的服务器上,日常我们要进行的操作也就查看容器运行状态,拉取镜像,运行容器等操作,如果可以图形化方式执行也挺方便的。Portainer就是这样的一个工具。
照惯例,用docker的方式来安装这个工具吧。
docker run --name yportainer -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /opt/portainer:/data portainer/portainer -H unix:///var/run/docker.sock
具体的使用方法网上到处都是,这里就不细说了。需要强调的是,Portainer只能做单机的docker环境管理,而docker的集群环境管理就是另一个很大的话题了。

如果这篇文章对你有一点帮助,请点击右上角的“赞同”。也欢迎留言和我交流。

猜你喜欢

转载自blog.csdn.net/s_swordman/article/details/88928613