获取镜像
格式
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
。
NAME 是镜像仓库名称(用来区分镜像),TAG 是镜像的标签(往往用来表示版本信息)。若不指定 TAG 则默认选择 latest
,即最新版本。
在获取镜像前可以查询是否存在对应的镜像。
# docker search [OPTIONS] TERM
docker search ubuntu
镜像信息
1. 所有镜像概览
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v2 c7e8f4f26fef About an hour ago 132MB
nginx latest 0901fa9da894 9 days ago 132MB
# `REPOSITORY` 来自于哪个仓库,比如ubuntu表示ubuntu系列的基础镜像
# `TAG` 镜像的标签信息,比如18.04、latest表示不同的版本信息。标签只是标记,并不能标识镜像内容
# `IMAGE ID` 镜像的ID(唯一标识镜像),如果两个镜像的ID相同,说明它们实际上指向了同一个镜像,只是具有不同标签名称而已
# `CREATED` 创建时间,说明镜像最后的更新时间
# `SIZE` 镜像大小,优秀的镜像往往体积都较小
2. 指定镜像详细
# docker inspect [OPTIONS] NAME|ID [NAME|ID...]
docker inspect ubuntu:latest
3. 镜像历史
镜像文件是由多个层组成,可查看每个层的创建信息。
# docker history [OPTIONS] IMAGE
docker history ubuntu:latest
创建镜像
创建镜像的方法主要有三种:基于已有镜像的内容创建(commit)、基于本地模板导入(import)、基于 Dockerfile 创建(build)。
1. 已有容器
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# 对一个镜像进行修改后
docker commit -m "修改了默认首页" webserver nginx:new
# 验证
docker images
2. 本地模板
# docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
docker import http://example.com/exampleimage.tgz
docker import /path/to/exampleimage.tgz
# 还可以利用 `STDIN`
cat exampleimage.tgz | docker import - exampleimagelocal:new
# 验证
docker images
3. Dockerfile
Dockerfile
是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
# docker build [OPTIONS] PATH | URL | -
docker build https://github.com/creack/docker-firefox
docker build -t nginx:ttt
修改镜像
1. 添加镜像标签
仅添加镜像标签,实际 IMAGE ID
指向同一个。
docker tag ubuntu:latest myubuntu:latest
2. 删除镜像
需注意 docker rmi
才是删除镜像,而 docker rm
是删除容器。
# docker rmi [OPTIONS] IMAGE [IMAGE...]
docker rmi ubuntu:latest
# Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - container b0f36e5ede8d is using its referenced image adafef2e596e
# 正在使用中,需要先解除容器
docker rm b0f36e5ede8d
# 解除后再删除镜像,删除镜像还可以使用 `IMAGE ID`
docker rmi adafef2e596e
3. 清理镜像
系统中可能会遗留一些临时的镜像文件。
docker image prune [OPTIONS]
分享镜像
1. save
docker images # 列出镜像
# docker save [OPTIONS] IMAGE [IMAGE...]
docker save -o ubuntu_18.04.tar ubuntu:18.04
2. load
# docker load [OPTIONS]
docker load -i ubuntu_18.04.tar
3. Hub
还可以直接分享到 Docker Hub 公共仓库,这需要在官网注册帐号。
# 模拟 nginx 打个新 tag
docker tag nginx:latest username/nginx:latest
# push
docker push username/nginx:latest