获取镜像
获取
$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
列出镜像
虚悬镜像(dangling image)
docker image ls -f dangling=true
docker image prune
过滤
docker image ls -f since=mongo:3.2
docker image ls -f label=com.example.version=0.1
以特定格式显示
docker image ls -q
docker image ls --format "{{.ID}}: {{.Repository}}"
删除本地镜像
docker image rm [选项] <镜像1> [<镜像2> ...]
可以用镜像的完整 ID,也称为 长 ID,来删除镜像,也可以用短ID
使用 Dockerfile 定制镜像
FROM 指定基础镜像<br>
空白的镜像FROM scratch
RUN 执行命令
镜像构建上下文
直接用 Git repo 进行构建
docker build -t hello-world https://github.com/docker-library/hello-world.git#master:amd64/hello-world
用给定的 tar 压缩包构建
docker build http://server/context.tar.gz
从标准输入中读取 Dockerfile 进行构建
docker build - < Dockerfile
cat Dockerfile | docker build -
从标准输入中读取上下文压缩包进行构建
docker build - < context.tar.gz
Dockerfile 指令详解<br>
COPY 复制文件
COPY [--chown=<user>:<group>] <源路径>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
ADD 更高级的复制文件<br>
Docker 引擎会试图去下载这个链接的文件放到 <目标路径> 去。下载后的文件权限自动设置为 600
CMD 容器启动命令
CMD ["nginx", "-g", "daemon off;"]
CMD [ "sh", "-c", "echo $HOME" ]
ENTRYPOINT 入口点<br>
<ENTRYPOINT> "<CMD>"
场景一:让镜像变成像命令一样使用
场景二:应用运行前的准备工作<br>
ENV 设置环境变量<br>
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
ARG 构建参数
ARG <参数名>[=<默认值>]
VOLUME 定义匿名卷<br>
EXPOSE 暴露端口<br>
WORKDIR 指定工作目录
WORKDIR <工作目录路径>
USER 指定当前用户<br>
USER <用户名>[:<用户组>]
HEALTHCHECK 健康检查<br>
HEALTHCHECK [选项] CMD <命令>
HEALTHCHECK NONE
ONBUILD 为他人作嫁衣裳
ONBUILD <其它指令>
在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行
LABEL 为镜像添加元数据<br>
LABEL <key>=<value> <key>=<value> <key>=<value> ...
SHELL 指令
SHELL ["executable", "parameters"]
参考文档<br>
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
https://docs.docker.com/engine/reference/builder/
https://github.com/docker-library/docs