序言

    变更是运维的常用操作,而容器的变更和普通的变更不一样,从而会有不同的视角。

    

    笑起来很容易,但是想笑很难。。。。Emmm,就是这样的。。。

容器变更

    容器的运行都是通过一个镜像就能运行了,而镜像在使用的时候都是从registry中pull过来的,然后保存在本地之中,然后再利用这个image进行运行容器。


    当程序出现bug之后,总是喜欢直接修改容器中的内容,然后继续运行,但是这样会造成一个问题,当容器重新调度到另外一个物理机的时候,从而会导致配置丢失,毕竟在调度的时候,又重新从镜像中心拉取了相关的配置,从而。。。在不知不觉中还原了配置。


    在使用镜像中心的时候,默认是不能进行清空镜像中心的内容的,每次进行升级的时候,都是将镜像上传到镜像中心,从而镜像中心空间都是无限增大,需要手动清理空间。。。Emmm,手动清理?


    还有一种方法就是直接移除整个镜像中心的目录,然后重新上传所有最新镜像的版本,但是这种是有风险的,毕竟如果这个时候出现物理机宕机,然后容器需要重新进行调度,那么这个时候,就会影响服务了,不过不存在单点的情况下,还是能够忍受的。。。需要衡量整体镜像中心的大小,预估时间然后上传

容器变更,这是个坑_java

    修改配置文件,开启删除功能。

容器变更,这是个坑_java_02

    测试删除功能:

    curl -I -H "Accept: application/vnd.docker.distribution.manifest.v2+json" localhost:5000/v2/redis/manifests/latest获取sha

    curl -i -X DELETE 192.168.1.198:5000/v2/redis/manifests/sha256:dfeb


容器变更,这是个坑_java_03

    当未修改配置文件的时候:

容器变更,这是个坑_java_04

    完整删除整个镜像存储:

容器变更,这是个坑_java_05

    出现如下报错时:

容器变更,这是个坑_java_06

commit?

     在有的时候,总是喜欢commit来进行修改容器的内容,从而不会丢失相关的配置,然而commit只是提交到本地,并不是提交到镜像中心。

容器变更,这是个坑_java_07

    当使用commit的时候,只是提交到本地的镜像仓库,而不是push到镜像中心,而且,当未指定repository和tag的时候,提交的都会变成none,当没有设置tag的时候,那么会将原来的镜像的tag变成none。。。so,该push的还是要push的,否则容器重新调度,配置还是会丢失。

    

    也可以恢复本地的镜像:作为临时的测试,commit还是很好用的。

容器变更,这是个坑_java_08


    当需要从一个地方拿一个镜像过来玩玩的时候,save和load还是很好用的。

容器变更,这是个坑_java_09


    总结:当进行容器变更的时候,一定要修改镜像的版本,而不是随意修改本地仓库,本地是本地,镜像中心是中心。。。

容器变更,这是个坑_java_10

        一碗水端平,感觉是不可能的。。。公正?永远只是取舍的一种方式,这其中存在的强烈冲突。。。心如止水?


        随着时间,慢慢慢慢变成了自己讨厌的人,是因为环境?还是因为必须有所取舍。。。说好的初心呢?初心喂了狗。。。


    计较。。。哼。。。这是一个无解的题目,只能跳出这种思维的怪圈。。。做好一件事,其实也蛮难的。。。