Commit 镜像

docker commit 从容器创建一个新的镜像。提交容器副本使之成为一个新的镜像!

语法

docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]

测试

下载运行 Tomcat

从Docker Hub 下载 tomcat 镜像到本地并运行

  • -it:交互终端
  • -p:端口映射
docker run -it -p 3344:8080 --name tomcat9 tomcat

注意:

docker启动官方tomcat镜像的容器,发现404是因为使用了加速器,而加速器里的 tomcat的webapps下没有root等文件!

下载tomcat官方镜像,就是这个镜像(阿里云里的tomcat的webapps下没有任何文件)

进入tomcat查看cd到webapps下发现全部空的,反而有个webapps.dist里有对应文件,cp -r 到webapps下!

[root@xiaoyequ ~]# docker exec -it tomcat9 /bin/bash
root@6ba1137fc95f:/usr/local/tomcat# ls
BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
root@6ba1137fc95f:/usr/local/tomcat# cp -r webapps.dist/* webapps    # 复制文件到 webapps
root@6ba1137fc95f:/usr/local/tomcat# cd webapps
root@6ba1137fc95f:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager

删除上一步镜像产生的 tomcat 容器的文档

[root@xiaoyequ ~]# docker ps                                              # 查看容器id
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
01e8d5cae8f8        tomcat              "catalina.sh run"   10 minutes ago      Up 10 minutes       0.0.0.0:3344->8080/tcp   tomcat9         
[root@xiaoyequ ~]# docker exec -it tomcat9 /bin/bash                      # 进入容器
root@01e8d5cae8f8:/usr/local/tomcat# cd webapps
root@01e8d5cae8f8:/usr/local/tomcat/webapps# ls                           # 查看是否存在 docs文件夹
ROOT  docs  examples  host-manager  manager
root@01e8d5cae8f8:/usr/local/tomcat/webapps# curl localhost:8080/docs     # 可以看到 docs 返回的内容

root@01e8d5cae8f8:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
root@01e8d5cae8f8:/usr/local/tomcat/webapps# rm -rf docs                  # 删除它
root@01e8d5cae8f8:/usr/local/tomcat/webapps# curl localhost:8080/docs     # 再次访问返回404

创建一个新的镜像

当前运行的 tomcat 实例就是一个没有docs的容器,我们使用它为模板 commit 一个没有docs的 tomcat 新镜像, tomcat02

[root@xiaoyequ ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
01e8d5cae8f8        tomcat              "catalina.sh run"   22 minutes ago      Up 22 minutes       0.0.0.0:3344->8080/tcp   tomcat9

commit的时候,容器的名字不能有大写,否则报错:invalid reference format

[root@xiaoyequ ~]# docker commit -a="xiaoyequ" -m="no tomcat docs" 01e8d5cae8f8 tomcat02:1.0
sha256:57d6e3382b24e2d221958c2b2104024dc01b174ec1aec2dcfdde57cb43567055

查看,我们自己提交的镜像已经OK了!

[root@xiaoyequ ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
tomcat02              1.0                 57d6e3382b24        39 seconds ago      649MB
redis                 latest              235592615444        3 days ago          104MB
tomcat                latest              2eb5a120304e        3 days ago          647MB
nginx                 latest              4392e5dad77d        10 days ago         132MB
portainer/portainer   latest              cd645f5a4769        11 days ago         79.1MB
elasticsearch         7.6.2               f29a1ee41030        2 months ago        791MB
centos                latest              470671670cac        4 months ago        237MB

测试运行 tomcat02

这个时候,我们的镜像都是可以使用的,大家可以启动原来的tomcat,和我们新的tomcat02来 测试看看!

docker run -it -p 3344:8080 tomcat02:1.0
[root@xiaoyequ ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                    NAMES
c04be653acdf        tomcat02:1.0        "catalina.sh run"   About a minute ago   Up About a minute   0.0.0.0:3344->8080/tcp   magical_davinci
[root@xiaoyequ ~]# docker exec -it c04be653acdf /bin/bash
root@c04be653acdf:/usr/local/tomcat# cd webapps
root@c04be653acdf:/usr/local/tomcat/webapps# ls
ROOT  examples	host-manager  manager

如果你想要保存你当前的状态,可以通过commit,来提交镜像,方便使用,类似于 VM 中的快照

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章