docker base

本贴最后更新于 2022 天前,其中的信息可能已经斗转星移

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] $ docker pull ubuntu:16.04 上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。而镜像名 称是 ubuntu:16.04 ,因此将会获取官方镜像 library/ubuntu 仓库中标签为 16.04 的镜 像。 stop all the docker container: docker stop `docker ps | grep -v 'IMAGE' | awk '{print $1}'` docker stop `docker container ls -q` d~~~~ocker start `docker ps -aq` 由于新旧镜像同名,旧镜像名称被取 消,从而出现仓库名、标签均为 <none> 的镜像。 $ docker image ls -f dangling=true remove the danging image: $ docker image prune 我们希望看到在 mongo:3.2 之后建立的镜像,可以用下面的命令: $ docker image ls -f since=mongo:3.2

docker image ls -q 因此当我们使用上面命令删除镜像的时候,实际上是在要求删除某个标签的镜像。所以首先 需要做的是将满足我们要求的所有镜像标签都取消,这就是我们看到的 Untagged 的信息。 因为一个镜像可以对应多个标签,因此当我们删除了所指定的标签后,可能还有别的标签指 向了这个镜像,如果是这种情况,那么 Delete 行为就不会发生。所以并非所有的 docker rmi 都会产生删除镜像的行为,有可能仅仅是取消了某个标签而已。 当该镜像所有的标签都被取消了,该镜像很可能会失去了存在的意义,因此会触发删除行 为。镜像是多层存储结构,因此在删除的时候也是从上层向基础层方向依次进行判断删除。 镜像的多层结构让镜像复用变动非常容易,因此很有可能某个其它镜像正依赖于当前镜像的 某一层。这种情况,依旧不会触发删除该层的行为。直到没有任何层依赖当前层时,才会真 实的删除当前层。这就是为什么,有时候会奇怪,为什么明明没有别的标签指向这个镜像, 但是它还是存在的原因,也是为什么有时候会发现所删除的层数和自己 docker pull 看到的 层数不一样的源。 比如,我们需要删除所有仓库名为 redis 的镜像: $ docker image rm $(docker image ls -q redis) 或者删除所有在 mongo:3.2 之前的镜像: $ docker image rm $(docker image ls -q -f before=mongo:3.2) Dockerfile 中每一个指令都会建立一层 每一个 RUN 的行为, 就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。

三、Dockerfile 指令

Dockerfile指令:CMD 在指令格式上,一般推荐使用 exec 格式,这类格式在解析时会被解析为 JSON 数组,因此 一定要使用双引号 " ,而不要使用单引号。 exec 格式: CMD ["可执行文件", "参数1", "参数2"...] ENTRYPOINT: 当指定了 ENTRYPOINT 后, CMD 的含义就发生了改变,不再是直接的运行其命令,而是将 CMD 的内容作为参数传给 ENTRYPOINT 指令,换句话说实际执行时,将变为: <ENTRYPOINT> "<CMD>" 之前我们说过,跟在镜像名后面的是 command ,运行时会替换 CMD 的默认值。因此这里的 -i 替换了原来的 CMD ,而不是添加在原来的 curl -s http://ip.cn 后面。而 -i 根本不是命令,所以自然~~~~找不到。 这是因为当存在 ENTRYPOINT 后, CMD 的内容将会作为参数传给 ENTRYPOINT ,而这里 -i 就是新的 CMD ,因此会作为参数传给 curl ,从而达到了我们预 期的效果。 之前说过每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更 USER 指令和 WORKDIR 相似,都是改变环境状态并影响以后的层。 WORKDIR 是改变工作目 录, USER 则是改变之后层的执行 RUN , CMD 以及 ENTRYPOINT 这类命令的身份。
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    494 引用 • 928 回帖

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...