docker:实例演示妙用export让容器和数据分离

news2024/9/28 15:18:38

简介:docker-export用于将容器打包成基础镜像,主要作用就是制作基础镜像,特别是在容器非常大的情况下,拉取了一个空白系统镜像,创建容器后安装了一堆自己需要的环境,就可以使用 export 命令打包成自己的基础镜像,作为后续使用。export 打包的镜像,使用 import 命令进行导入,导入时可以指定新的镜像名称,本地如有相同名称的镜像,则原有镜像的名称会被拿掉,赋予给新导入的镜像,原镜像变成只能通过镜像 ID 进行管理。export 导出的镜像不会保留历史记录。通过export制作的基础镜像可以压缩到很小例如几十Mb的存储空间,避免了多次提交后镜像越来越大的弊端,一定程度上实现了数据和容器相对高耦合,低内聚的目标。

历史攻略:

docker:容器打包成镜像

gin:通过dockerfile部署

docker:上传镜像到dockerhub

场景假设:你通过gin框架写了一套平台,并且内容很大可能有400G,并且都是存在于容器内,现在开发完成了,你希望将比较大的内容抽离出来,以挂载的方式分离到容器外,即分离到宿主机。这个时候,如果使用常规的docker-commit很可能造成新增到500G的更大的镜像。从简化思路出发,更推荐直接使用docker-export。

操作思路:

1、docker exec -it 容器id /bin/bash  # 进入容器
2、env # 主要记录容器内程序的运行环境变量,dockerfile构建时利用。
3、将需要的分离的内容cp到宿主机,删除容器内已经cp完成的内容。
4、docker export 你的当前容器id  > mygin-min.tar   #
5、docker import mygin-min.tar  # 会输出一个镜像id
6、docker tag 镜像id mygin-min:1.0.1
7、mkdir dockerbuild && cd dockerbuild/
8、nano Dockerfile
9、docker build -t mygin-min:1.0.2 .
10、docker save mygin-min:1.0.2 > mygin-env-min.tar
11、docker run xxxxxxx -v 步骤3的cp到宿主机的内容:容器内路径 xxxxx

案例实践:

1、拉取镜像并运行:(实际场景下,看项目情况而定,将tom-gin:1.0.0当成是已经写好的平台,并且内容很大,需要抽离数据),当前镜像:1.11GB

docker run --name test-gin -p 8889:8888 -d tomrunrunrun888/tom-gin:1.0.0

2、docker exec -it test-gin /bin/bash

3、env # 主要记录容器内程序的运行环境变量,dockerfile构建时利用。

HOSTNAME=34e0ae1a7b9f
PWD=/home/workspace
HOME=/root
GOLANG_VERSION=1.17.13
TERM=xterm
SHLVL=1
PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
GOPATH=/go
_=/usr/bin/env

4、将需要的分离的内容cp到宿主机,删除容器内已经cp完成的内容。

(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export# docker cp test-gin:/go ./
(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export# docker cp test-gin:/usr ./
(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export# ll
total 16
drwxr-xr-x  4 root root 4096 Feb 10 01:37 ./
drwxr-xr-x 15 root root 4096 Feb 10 00:56 ../
drwxrwxrwx  5 root root 4096 Nov 19 23:08 go/
drwxr-xr-x 11 root root 4096 Jul 11  2022 usr/

docker exec -it test-gin /bin/bash
root@c0054afcd7d3:/# rm -rf go/
root@c0054afcd7d3:/# rm -rf /usr/*

5、docker export 你的当前容器id > mygin-min.tar

(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export# docker export c0054afcd7d3  > mygin-min.tar 
(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export# ls -lh
total 69M
drwxrwxrwx  5 root root 4.0K Nov 19 23:08 go
-rw-r--r--  1 root root  69M Feb 10 01:39 mygin-min.tar
drwxr-xr-x 11 root root 4.0K Jul 11  2022 usr

经过操作,此时导出的tar包只剩余69M了。只要肯copy到宿主机,你甚至可以压缩到只有几M的tar包。

6、docker import mygin-min.tar # 会输出一个镜像id

(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export# docker import mygin-min.tar
sha256:273156792ebc223753e8f56a32eb06de0c2f1c55994e741533bfdd91a5f152c8
(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export# docker images
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
<none>                         <none>    273156792ebc   7 seconds ago   69.6MB

7、docker tag 镜像id mygin-min:1.0.1

8、mkdir dockerbuild && cd dockerbuild/

9、vim Dockerfile

FROM mygin-min:1.0.1
MAINTAINER "公众号: 玩转测试开发"

ENV HOSTNAME=34e0ae1a7b9f
ENV PWD=/home/workspace
ENV HOME=/root
ENV GOLANG_VERSION=1.17.13
ENV TERM=xterm
ENV SHLVL=1
ENV PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV GOPATH=/go
ENV _=/usr/bin/env
WORKDIR /home/workspace
EXPOSE 8888

ENTRYPOINT ["./main"]

10、docker build -t mygin-min:1.0.2 . 这一步会把环境变量重新加载回去。但是数据还没有。

(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export/dockerbuild# docker build -t mygin-min:1.0.2 .
Sending build context to Docker daemon  2.048kB
Step 1/14 : FROM mygin-min:1.0.1
 ---> 273156792ebc
Step 2/14 : MAINTAINER "公众号: 玩转测试开发"
 ---> Running in 822bc97e7890
Removing intermediate container 822bc97e7890
 ---> 9f623423bc0d
Step 3/14 : ENV HOSTNAME=34e0ae1a7b9f
 ---> Running in 04031a989016
Removing intermediate container 04031a989016
 ---> 241e6f5824c2
Step 4/14 : ENV PWD=/home/workspace
 ---> Running in 287d99725e30
Removing intermediate container 287d99725e30
 ---> 338e19249b5e
Step 5/14 : ENV HOME=/root
 ---> Running in ff68307a2696
Removing intermediate container ff68307a2696
 ---> 6bc22b29dce6
Step 6/14 : ENV GOLANG_VERSION=1.17.13
 ---> Running in d0250776e7a7
Removing intermediate container d0250776e7a7
 ---> d47be35f2db6
Step 7/14 : ENV TERM=xterm
 ---> Running in d9fad97cd5f7
Removing intermediate container d9fad97cd5f7
 ---> cb0b395ad653
Step 8/14 : ENV SHLVL=1
 ---> Running in 2a5941b59ab8
Removing intermediate container 2a5941b59ab8
 ---> bf19524455e5
Step 9/14 : ENV PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 ---> Running in 224cf673e46f
Removing intermediate container 224cf673e46f
 ---> 0d147b94e8fa
Step 10/14 : ENV GOPATH=/go
 ---> Running in 333359b0a016
Removing intermediate container 333359b0a016
 ---> 91eba633e064
Step 11/14 : ENV _=/usr/bin/env
 ---> Running in 5483e35eb198
Removing intermediate container 5483e35eb198
 ---> e6119392ecd3
Step 12/14 : WORKDIR /home/workspace
 ---> Running in 66cb64c574c8
Removing intermediate container 66cb64c574c8
 ---> ae1249005f75
Step 13/14 : EXPOSE 8888
 ---> Running in ad6667d35597
Removing intermediate container ad6667d35597
 ---> 248807df5de6
Step 14/14 : ENTRYPOINT ["./main"]
 ---> Running in 7d26cd2aa11f
Removing intermediate container 7d26cd2aa11f
 ---> 1bf36511411f
Successfully built 1bf36511411f
Successfully tagged mygin-min:1.0.2

11、docker save mygin-min:1.0.2 > mygin-env-min.tar

(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export/dockerbuild# docker save mygin-min:1.0.2 > mygin-env-min.tar
(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export/dockerbuild# ls -lh
total 69M
-rw-r--r-- 1 root root 373 Feb 10 01:42 Dockerfile
-rw-r--r-- 1 root root 69M Feb 10 01:42 mygin-env-min.tar

12、docker run xxxxxxx -v 步骤3的cp到宿主机的内容:容器内路径 xxxxx

(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export# docker run -p 8866:8888 --name test-gin-new -v /home/write-pro/docker-export/go:/go -v /home/write-pro/docker-export/usr/:/usr -d mygin-min:1.0.2
9af7c34b7f94c96d5eede05b7fc44fd47160209073aff553294e78b0ecf2cc4c
(base) root@ci4vyvxi572ysx2s:/home/write-pro/docker-export# docker ps -a
CONTAINER ID   IMAGE                                COMMAND                  CREATED         STATUS         PORTS                                       NAMES
9af7c34b7f94   mygin-min:1.0.2                      "./main"                 4 seconds ago   Up 3 seconds   0.0.0.0:8866->8888/tcp, :::8866->8888/tcp   test-gin-new

13、访问页面检查结果:

https://mmbiz.qpic.cn/mmbiz_png/g5foreJ2Epp9kW8pg3OsDcQB4AEzvBJNnfl8oNyVoqDryFlEqIvOSkEOnl0KufKJDS0s3G4EbibqqyXmbj5hzqw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

至此,妙用export让容器和数据分离的基本流程和演示完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2005-2022中国企业对外直接投资、OFDI海外投资明细、中国全球投资追踪数据CGIT(含非建筑施工类问题投资)

中国全球投资跟踪”&#xff08;China Global Investment Tracker&#xff09;&#xff0c;数据库&#xff0c;美国企业研究所于1月28日发布。数据库显示&#xff0c;2005年以来&#xff0c;中国对外投资和建设总额已接近2万亿美元。该数据库是唯一一套涵盖中国全球投资和建设的…

概率和似然

在日常生活中&#xff0c;我们经常使用这些术语。但是在统计学和机器学习上下文中使用时&#xff0c;有一个本质的区别。本文将用理论和例子来解释概率和似然之间的关键区别。 概率与似然 假设在一场棒球比赛中&#xff0c;两队的队长都被召集到场上掷硬币。获胜的队长将根据掷…

Linux 监测服务心跳、服务重启策略

文章目录前言背景一、curl服务可用验证二、服务探测脚本三、配置系统定时任务四、Linux特殊字符转义总结前言 请各大网友尊重本人原创知识分享&#xff0c;谨记本人博客&#xff1a;南国以南i、 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 背景 当…

【飞桨AI-Python小白逆袭大神课程】作业1-python基础练习

链接&#xff1a;飞桨AI Studio - 人工智能学习与实训社区 作业一&#xff1a;输出 9*9 乘法口诀表(注意格式) 注意&#xff1a;提交作业时要有代码执行输出结果。 def table():#在这里写下您的乘法口诀表代码吧&#xff01;if __name__ __main__:table() 思路&#xff1a…

基础篇—CSS padding(填充\内边距)解析

CSS padding(填充) CSS padding(填充)是一个简写属性,定义元素边框与元素内容之间的空间,即上下左右的内边距。 属性说明padding使用简写属性设置在一个声明中的所有填充属性padding-bottom设置元素的底部填充padding-left设置元素的左部填充padding-right设置元素的右部…

win11下WSL环境安装

微软官方wsl手册 微软官方wsl手册pdf 一、wsl中镜像安装 在启用或关闭Windows功能勾选一下两个选项 打开powershell&#xff0c;输入wsl, 可以根据wsl的命令来安装镜像。也可以在软件商店中进行安装ubuntu 安装完成后&#xff0c;打开ubuntu,会自动完成初始化。提示安装成功…

【RabbitMQ六】——RabbitMQ主题模式(Topic)

RabbitMQ主题模式&#xff08;通配符模式&#xff09;前言什么是Topic模式使用Topic模式的要点通配符规则示例代码示例Pom文件引入RabbtiMQ依赖RabbitMQ工具类生产者消费者1消费者2效果总结前言 通过本篇博客能够简单使用RabbitMQ的主题模式。 本篇博客主要是博主通过官网总结…

K8s集群部署(kubeadm安装部署详细手册)

1、简介 K8s部署主要有两种方式&#xff1a;1、Kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 2、二进制 从github下载发行版的二进制包&#xff0c;手动部署每个组件&#xff0c;组成Kubernetes集群。…

【C++进阶】二、多态详解(总)

目录 一、多态的概念 二、多态的定义及实现 2.1 多态的构成条件 2.2 虚函数 2.3 虚函数的重写 2.4 虚函数重写的两个例外 2.4.1 协变 2.4.2 析构函数的重写 2.5 C11 override 和 final 2.5.1 final 2.5.2 override 2.6 重载、覆盖(重写)、隐藏(重定义)的对比 三、…

【C++】类与对象 (四)初始化列表 static成员 友元 内部类 匿名对象 拷贝对象时的一些编译器优化

前言 本章就是我们C中类与对象的终章了&#xff0c;不过本章的难度不大&#xff0c;都是类中一些边边角角的知识&#xff0c;记忆理解就行了&#xff0c;相信经过这么长时间的学习类与对象&#xff0c;你对面向对象也有了更加深的理解&#xff0c;最后我们学习完边边角角的一些…

2022黑马Redis跟学笔记.实战篇(五)

2022黑马Redis跟学笔记.实战篇 五4.5 Redis实现秒杀优化4.5.1 基于Redis实现秒杀减库存6.1 秒杀优化-异步秒杀思路4.5.2 基于Redis的一人一单限制4.5.3 基于阻塞队列的异步下单4.6 秒杀的异步优化4.6.1.基于消息队列的异步下单思路4.6.2.基于List结构的消息队列4.6.3.基于PubSu…

[答疑]经营困难时期谈建模和伪创新-长点心和长点良心

leonll 2022-11-26 9:53 我们今年真是太难了……&#xff08;此处删除若干字&#xff09;……去年底就想着邀请您来给我们讲课&#xff0c;现在也没有实行。我想再和我们老大提&#xff0c;您觉得怎么说个关键理由&#xff0c;这样的形势合适引进UML开发流程&#xff1f; UML…

ESXi Args勒索病毒来袭,VMware ESXi用户需提高警惕

近日&#xff0c;多国通报了一项名为“ESXi Args”的勒索软件活动。ESXi Args主要针对VMware ESXi服务器进行攻击&#xff0c;利用ESXi 服务器中的已知漏洞&#xff0c;获取访问权限并部署勒索软件&#xff0c;对ESXi服务器内配置文件进行加密并发送赎金票据。 当前&#xff0…

从零到1构建可发布的npm包

本文将介绍通过 rollup, 从零开始构建一个简易的可发布的npm包。本文可实现的目标如下&#xff1a; 通过 rollup进行构建支持 Typescript支持 npm 方式安装支持 cdn 方式&#xff0c;在页面中引入支持本地调试可发布到npm 一、从 package 开始项目分析 首先&#xff0c;在终…

港科夜闻|香港科大与香港科大(广州)两校交流开启新篇章

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大与香港科大(广州)两校交流开启新篇章。2月10日&#xff0c;香港科技大学校董会主席廖长城先生、校董会副主席杨佳锠先生、校长叶玉如院士一行到访香港科大(广州)&#xff0c;共商“香港科大一体、双校互补”框架下的…

go gin学习记录3

环境 环境&#xff1a;mac m1&#xff0c;go version 1.17.2&#xff0c; goland&#xff0c; mysql 安装gorm 第二节学习了在gin中使用go的原生SQL进行操作&#xff0c;这节学习一下使用orm。 go的orm包有很多&#xff0c;gorm是使用较多较广的&#xff0c;所以我们就用gor…

车辆逆行识别检测预警算法 yolov5

车辆逆行识别检测预警算法通过Pythonyolov5网络模型计算机算法技术&#xff0c;车辆逆行识别检测预警算法对道路来往行驶车辆出现逆行行为及时预警存档。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得非常流行&#xff0c;主要是因为它的简单性和…

大数据之-Nifi-监控nifi数据流信息_监控数据来源_bub轻松复现---大数据之Nifi工作笔记0011

通过数据流功能可以轻松复现,数据的流向在某个时间点数据是怎么流动的,出现了什么问题,太强大了.. 真的是,可以看到通过右键,处理器,打开view data province就可以看到, 上面是处理器处理数据的详细信息 点击左侧的详情图标可以查看详情信息,details是这个事件处理的内容详情,…

【计算机网络】运输层

文章目录运输层概述运输层端口号、复用与分用的概念UDP和TCP的对比TCP的流量控制TCP的拥塞控制TCP超时重传时间的选择TCP可靠传输的实现TCP的运输连接管理TCP的连接建立(3次握手)TCP的连接释放(4次挥手)TCP报文段的首部格式运输层概述 这里我们对运输层进行概述&#xff0c;之…

【双指针问题】LeetCode 925. 长按键入

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…