Docker 提交镜像并导入导出

Docker提交镜像

​ 有时候我们从阿里云仓库或者是从dockerhub上面下载的官方镜像不能拿过来直接使用,这个时候该怎么办呢?

​ 比如,官方的tomcat里面的webapps里面是没有任何文件的,如果是在docker里面使用的话,那么这个时候直接访问8080端口是会报404错误的,只有把webapps.dist里面的所有文件cp到webapps里面才可以正常访问。但是我们每次使用官方镜像的时候都需要进行这个操作,会感觉比较麻烦。这个时候我们就可以cp一次之后,然后把之后的镜像提交为自己的镜像就可以了。

#先运行tomcat,映射8080端口
[root@localhost data]# docker run -d -p 8080:8080 --name tomcat01 tomcat
5df313c8fec1c60bec72f38fffae4ef3fb3309efe99b69988cc2b227edf183ca
#进入tomcat容器内部,把webapps.dist下面的文件拷贝到webapps里
[root@localhost data]# docker exec -it tomcat01 /bin/bash
root@5df313c8fec1:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@5df313c8fec1:/usr/local/tomcat# cp webapps.dist/* webapps
cp: -r not specified; omitting directory 'webapps.dist/ROOT'
cp: -r not specified; omitting directory 'webapps.dist/docs'
cp: -r not specified; omitting directory 'webapps.dist/examples'
cp: -r not specified; omitting directory 'webapps.dist/host-manager'
cp: -r not specified; omitting directory 'webapps.dist/manager'
#这里注意下 
root@5df313c8fec1:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@5df313c8fec1:/usr/local/tomcat# cd webapps
root@5df313c8fec1:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager

这个时候已经复制到webapps了,退出tomcat容器。

root@5df313c8fec1:/usr/local/tomcat/webapps# exit
exit
[root@localhost data]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED              STATUS              PORTS                                       NAMES
5df313c8fec1   tomcat    "catalina.sh run"   About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   tomcat01

然后我们使用commit命令,把目前的这个容器提交成一个镜像

# docker commit -a="fushuai" -m="cp webapps app" 5df313c8fec1 tomcatfs:1.0
#-a 作者名
#-m 镜像的描述
#容器的ID
#最后跟的是你这个镜像的名字加上版本号
[root@localhost data]# docker commit -a="fushuai" -m="cp webapps app" 5df313c8fec1 tomcatfs:1.0
sha256:5aef45d791b6506bb59d18bde82ae9c7ce2178691c4774ec03e081018ae71d10

docker images看一下

可以看到,自己本地的镜像中 已经有了tomcatfs 并且版本是1.0

然后我们在运行一下刚刚提交的tomcatfs

[root@localhost data]# docker run -d -p 8090:8080 --name tomcat88 tomcatfs:1.0
3f65f85a43820ad24fdeb7f4b62761cb0885d5a1de57e2f94d3fb6e76783690e
#然后进入容器内部查看一下webapps
[root@localhost data]# docker exec -it tomcat88 /bin/bash
root@3f65f85a4382:/usr/local/tomcat# cd webapps
root@3f65f85a4382:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
#这个时候进到webapps里面就可以看到之前复制过来的文件了 以后用的话就可以直接用tomcatfs:1.0了 

那我们提交了这个镜像如何把它保存到本地,然后导入到另外一个服务器里面使用呢

#首先我们要把他导出到本地
docker save -o /home/ceshi/tomcatfs.tar tomcatfs:1.0
#这句命令就是把tomcatfs1.0版本 导出到/home/ceshi文件夹下面 叫做tomcatfs.tar (自定义命名哈)

可以看到,已经导出来了,那么我们再测试一下把系统的镜像删除掉,然后再把这个导入进去

[root@localhost ceshi]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
tomcatfs      1.0       5aef45d791b6   2 days ago     684MB
[root@localhost ceshi]# docker rmi 5ae
Untagged: tomcatfs:1.0
Deleted: sha256:5aef45d791b6506bb59d18bde82ae9c7ce2178691c4774ec03e081018ae71d10
Deleted: sha256:197a1023fb73ec63ec6b16c52008353ff37397c5605d7cd43302ad7513567bc1
[root@localhost ceshi]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE

看的到我们进镜像已经被删除了 然后我们用刚才导出的文件再给他导入回去。命令如下

[root@localhost ceshi]#  docker load < /home/ceshi/tomcatfs.tar
465ff1db877f: Loading layer   4.94MB/4.94MB
Loaded image: tomcatfs:1.0
[root@localhost ceshi]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
tomcatfs      1.0       5aef45d791b6   3 days ago     684MB

# < 后面跟的是导出文件的绝对路径哦 

这样就可以更改自己的镜像并且提交,然后保存到本地,等到下次用的时候就可以直接进行使用了,贼拉简单。

最后初音~
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值