Docker Cli要点汇总
本文主要介绍一些docker命令行使用时的一些小要点,并不包括对docker基础理论的解释。
镜像管理
-
镜像名称
- 格式:
[Docker Registry地址:[端口号]/]仓库名[:标签]
。 - Docker 镜像仓库地址:地址的格式一般是
<域名/IP>[:端口号]
;默认地址是 Docker Hub。 - 仓库名是两段式名称,即
<用户名>/<软件名>
。对于 Docker Hub,如果不给出用户名,则默认为library,也就是官方镜像。
- 格式:
-
悬挂镜像 => 既没有仓库名也没有标签的镜像,此种情况一般在新旧镜像同名,旧镜像名被取消而导致。一般来说,悬挂镜像已经失去了存在价值,可以直接删除。
- 查看指令:
docker image ls -f dangling=true
- 删除指令:
docker image prune
- 查看指令:
-
Dockerfile定制镜像
- COPY => 复制文件,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。也可以通过
--chown=<user>:<group>
来改变文件的所属用户以及所属组。 - ADD => 更高级的复制文件,ADD和COPY基本一样,只是多了部分功能。比如,支持URL路径;如果 <源路径> 为一个tar压缩文件的话,压缩格式为gzip, bzip2 以及xz的情况下,ADD 指令将会自动解压缩这个压缩文件到<目标路径>去。
- CMD => 容器启动命令,有shell和exec两种格式,分别为
CMD <命令>
和CMD ["可执行文件", "参数1", "参数2"...]
,一般情况下推荐使用exec方式。 - ENTRYPOINT => 入口点,当指定
ENTRYPOINT
时,CMD
的含义也就发生了变化,不再是直接的运行其命令,而是将CMD
的内容作为参数传给ENTRYPOINT
指令。 - ENV => 设置环境变量,有两种格式为,
ENV <key> <value>
和ENV <key1>=<value1> <key2>=<value2>
。 - ARG => 构建参数,构建参数和ENV的效果一样,都是设置环境变量。所不同的是,ARG所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。但是不应该使用ARG保存密码之类的信息,因为docker history还是可以看到所有值。
- VOLUME => 定义匿名卷,有两种格式
VOLUME ["<路径1>", "<路径2>"...]
和VOLUME <路径>
。 - EXPOSE => 暴露端口,格式为
EXPOSE <端口1> [<端口2>...]
。EXPOSE指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在Dockerfile中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是docker run -P
时,会自动随机映射EXPOSE的端口。 - WORKDIR => 指定工作目录,格式
WORKDIR <工作目录路径>
。 - USER => 指定当前用户,格式
USER <用户名>[:<用户组>]
USER指令和WORKDIR相似,都是改变环境状态并影响以后的层。WORKDIR是改变工作目录,USER则是改变之后层的执行RUN, CMD以及ENTRYPOINT这类命令的身份。 - HEALTHCHECK => 健康检查,格式
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
和HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
。 - ONBUILD => 预执行,ONBUILD 是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。
- FROM => 指定基础镜像。
- RUN => 执行命令,shell格式
RUN <命令>
和exec格式RUN ["可执行文件", "参数1", "参数2"]
。
- COPY => 复制文件,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。也可以通过
其他
-
docker-machine和docker-engine的区别?
对于docker-machine和docker-engine可以简单的理解为,docker-machine是docker-engine的管理工具,例如可以安装一个或多个docker-engine至本机或虚拟机中,当然也可以是远程的。
-
docker-compose有什么用?
docker-compose负责对docker容器集群的快速编排,定位于定义和运行多个docker容器的应用。docker-compose可以通过一个
docker-compose.yml
实现一组相关联的容器的定义和执行。 -
docker swarm是什么?
docker swarm是docker集群管理和编排工具。