解散Docker Image为Dockerfile

解散Docker Image为Dockerfile

生产环境中,对于运维来说,可能不需要亲自去编写Dockerfile来构建镜像,大多数是研发部门来做这个事情,但我认为运维岗位有必要清楚Dockerfile的构建过程,再不济也应该知道运行这个image时,最后的进程是怎么样的,这会更有利于测试维护。

在我的公司来说,底层运维和研发是搭不上话的,更别说了解Dockerfile了,这就需要自己来研究。

Docker也很友好的,可以通过命令查看镜像构建过程。

docker image histroy [IMAGE]
如:
$ docker image history busybox:latest 
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
a9d583973f65   8 weeks ago   /bin/sh -c #(nop) CMD ["sh"] 0B 
<missing>      8 weeks ago   /bin/sh -c #(nop) ADD file:b49bf6359240618f2? 1.23MB 

学习过Dockerfile应该知道,正常结构 CMD 或者 ENTRYPOINT 应该在文件末尾,用来挂起前台进程,docker image history看到的是倒序的,故,我在网上扒了个脚本,如下: 参考站点

#!/bin/bash
case "$OSTYPE" in
    linux*)
        docker history --no-trunc --format "{
   {.CreatedBy}}" $1 | # extract information from layers
        tac                                                    | # reverse the file
        sed 's,^\(|3.*\)\?/bin/\(ba\)\?sh -c,RUN,'             | # change /bin/(ba)?sh calls to RUN
        sed 's,^RUN #(nop) *,,'                                | # remove RUN #(nop) calls for ENV,LABEL...
        sed 's, *&& *, \\\n \&\& ,g'                           # pretty print multi command lines following Docker best practices
    ;;
    darwin*)
        docker history --no-trunc --format "{
   {.CreatedBy}}" $1 | # extract information from layers
        tail -r                                                | # reverse the file
        sed -E 's,^(\|3.*)?/bin/(ba)?sh -c,RUN,'               | # change /bin/(ba)?sh calls to RUN
        sed 's,^RUN #(nop) *,,'                                | # remove RUN #(nop) calls for ENV,LABEL...
        sed $'s, *&& *, \\\ \\\n \&\& ,g'                      # pretty print multi command lines following Docker best practices
    ;;
    *)
        echo "unknown OSTYPE: $OSTYPE"
    ;;
esac

使用方法

./script.sh [IMAGE]
# ./script.sh nginx:latest

只能提供大致的构建过程,至于中间在构建本地copy了什么文件,解压了什么文件,还是无从之晓的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101763.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker(6)镜像的使用

    docker(6)镜像的使用前言Docker的三大核心概念:镜像、容器、仓库。初学者对镜像和容器往往分不清楚,学过面向对象的应该知道类和实例,这跟面向对象里面的概念很相似我们可以把镜像看作类,把容器看作类实例化后的对象。|

    2022年7月28日
    8
  • docker下修改mysql配置文件[通俗易懂]

    docker下修改mysql配置文件[通俗易懂]由于需要修改mysql的sql_mode,在命令行修改每次重启都会失效,因为修改docker下mysql的配置文件。操作系统:centos7docker版本:Dockerversion17.05.0-ce,build89658bemysql版本:5.7.181.拉取镜像dockerpullmysql:5.7.182.列出镜像[root@zk01~]#dockerimages

    2022年5月5日
    78
  • Docker镜像相关命令

    Docker镜像相关命令1、查看docker版本 docker version 2、列出本地主机上的镜像: docker images REPOSITORY:表示镜像的仓库源 TAG:镜像的标签 IMAGE ID:镜像ID CREATED:镜像创建时间 SIZE:镜像大小3、查询镜像 docker search 镜像名称…

    2022年6月13日
    28
  • centos7.4安装docker_pythondocker

    centos7.4安装docker_pythondocker前言当我们在一台电脑上搭建了python3.6的环境,下次换台电脑,又得重新搭建一次,设置环境变量等操作。好不容易安装好,一会提示pip不是内部或外部命令,一会又提示pip:commandno

    2022年7月31日
    8
  • CentOS部署基于flannel网络的docker

    CentOS部署基于flannel网络的docker

    2021年6月2日
    94
  • docker mysql日志查看_MySQL查看版本

    docker mysql日志查看_MySQL查看版本查询DockerMySQL的版本号1.查找到当前正在运行的容器#dockerps2.进入mysql容器(命令中不带小括号)#dockerexec-it(mysql的名字,或id)bash3.登录mysql,输入账号密码登录(命令中不带小括号)#mysql-u(root)-p(abcd)登录成功以后,会显示该mysql的详细信息,其中包含版本号…

    2022年9月28日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号