以jenkins举例
# jenkins的镜像:jenkins/jenkins:lts
# 在主机的挂载卷文件夹:/opt/jenkins-data

镜像和容器的区别/关系:

1.镜像 约等于 只读“光盘”

2.容器 约等于  用这张光盘启动起来的“正在运行的系统进程”

* 容器就是相当于没挂载卷的时候存储
* 我给别人镜像,对方还需要运行这个镜像,运行后才会出现容器;如果需要实现数据持久化的话需要自己挂载卷

1.镜像--负责“起跑”

1.如何把镜像给别人使用

1.你只给镜像-->对方得到的是空白的jenkins
2.对方第一次启动后,需要自己装所有的插件数据等,并且这些数据会挂载写到它当时挂载的主机
3.需要自己做持久化(-v 主机目录:/var/jenkins_home),后面删容换机器数据不会丢失     

2.对方怎么使用你的镜像

# 1.你压缩镜像传给对方
        docker images
        docker save -o jenkins.tar jenkins/jenkins:lts
             jenkins/jenkins:lts是查到的镜像名,后面就是scp到对方


# 2.对方将它放置任意目录--将镜像导入本地docker
        docker load -i jenkins.tar    
        dokcer images | grep jenkins   # 查看


# 3.如果已经挂载卷了直接
        docoker compose up -d
            # 没挂载卷:添加compose
            创建一个jenkins_app目录,写一个docker-compose.yml其中包含挂载卷的volumes

2.容器--“隔离版的进程”

容器一启动里面就在跑应用,就相当于进程一样,可以查看程序的状态

3.挂载卷--负责存储“持久化”

非常重要:

* 作用:数据的存储化,你所做的所有的配置和数据都在里面,如果删掉了就没有了

1.如果第一次没挂载卷-->数据写在容器可写层【抢救】

# 1. 把容器可写层拷出来
   * 旧容器还在跑或已经stop但没rm:
    # 在主机上建捡来要挂的目录
            mkdir -p /opt/jenkins-data
    # 把容器内的整个jenkins_home搬出来
            docker cp <旧容器>:/var/jenkins_home /opt/jenkins-data
            然后挂/opt/jenkins-data,重启数据就能回来


* <旧容器>:容器名或pid
    
# 2.旧容器已被 docker rm --> 可写层被docker删除,救不回来

   

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐