获取镜像
命令:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]默认地址是
Docker Hub, 仓库由<用户名>/<仓库名>两段式命名,默认用户名library(官方仓库)
$ docker run -d -p 80:80 --name webserver nginxUnable to find image 'nginx:latest' locallylatest: Pulling from library/nginxf7e2b70d04ae: Pull complete08dd01e3f3ac: Pull completed9ef3a1eb792: Pull completeDigest: sha256:98efe605f61725fd817ea69521b0eeb32bef007af0e3d0aeb6258c6e6fe7fc1aStatus: Downloaded newer image for nginx:latest1136b11756c216eed732c948ba3ab0f263c11c480ea601c3b2251267c64198ae
运行
- 命令:
docker run
列出镜像
命令:
docker image ls默认列表包含了
仓库名、标签、镜像 ID、创建时间、所占用的空间镜像ID,是镜像的唯一标识,同一个镜像不同标签(即多个版本),镜像ID相同
由于镜像是多层构建的,不同的镜像可能依赖共同的基础层,故实际镜像所占空间会小于命令显示的镜像空间总和。
可使用
docker system df来查看镜像、容器、数据卷所占用的空间虚悬镜像,
docker pull和docker build命令,由于新旧镜像同名,从而出现<none> <none> 00285df0df87 5 days ago 342MB之类的无标签镜像。可使用docker image prune命令删除参数解析:
-a: 列出 中间层镜像(镜像共同依赖的基础层,不应删除)-f: 即过滤器(filter), 用于筛选显示所需部分dangling=true: 列出虚悬镜像since=mongo:3.2: 列出指定镜像之后创建的镜像
-format: 自定义输出格式。可参照 Go语法模板-q: 仅列出镜像ID--digests: 显示镜像摘要
删除镜像
命令:
docker image rm [选项] <镜像1> [<镜像2> ...]可使用 镜像ID、镜像名、镜像摘要 来删除镜像
若镜像存在正在运行的容器,则删除不成功
Untagged- 由于不同标签的镜像对应的
镜像ID与镜像摘要相同,故删除时,首先需要取消所有要删除的镜像的标签 - 使用删除命令时,实际上是在删除某个标签的镜像,但除要删除的指定标签外,可能仍旧存在其他标签指向该镜像,此时删除命令仅导致
untagged,未触发真正的deleted操作
- 由于不同标签的镜像对应的
配合
image ls,示例:docker image rm $(docker image ls -q redis)
docker commit
此命令用于将容器的存储层保存下来,成为新的镜像
慎用,黑箱操作不便于维护,应使用
Dockerfile构建镜像
# 以nginx镜像为基础启动容器,命名为 webserver1 (不能与已有容器重名)docker run --name webserver1 -d -p 80:80 nginx# 进入容器 bash ,并创造一个交互界面docker exec -it webserver1 bash# 覆盖默认欢迎页echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html# exit 退出后,查看容器存储层的改动docker diff webserver1# 保存这一改动docker commit --author 'xx' --message 'xx' webserver1 nginx:v2# 查看历史修改docker history nginx:v2# 基于v2版本运行容器,可访问本地81端口查看docker run --name web2 -d -p 81:80 nginx:v2
docker镜像导出导入
# 注意,file为 .tar 格式docker save image_id> filepath# 将镜像导入,运行docker image list 可查看镜像docker load --input filepath
