docker 构建镜像
文章目录
docker 构建镜像
获取镜像
Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像
从 Docker 镜像仓库获取镜像的命令是
docker pull
格式
docker pull [选项] [Docker Registry 地址[:端口号]/] 仓库名[:标签]
# 默认官方镜像库拉取,latest 标签
$ docker pull ubuntu
# 指定版本标签
$ docker pull ubuntu:18.04
# 指定仓库域名(默认官方仓库)
$ docker pull library/ubuntu
# 第三方服务商或私有镜像仓库
$ docker pull daocloud.io/library/ubuntu:latest
运行镜像
有了镜像后,就能够以该镜像为基础启动并运行容器。如果打算启动后在容器内运行 bash 进行交互操作的话,可以执行下面的命令
$ docker run -it --rm <image-name> bash
-i:交互式操作
-t:终端
--rm:容器退出后随之删除(一般不需要,这里是展示需求)
<image-name>:指定启动容器的镜像名称(全称)
bash:放在镜像名后的是命令 启动后执行容器内命令行
查看镜像信息
# 先查询需要查看的详细信息的镜像 ID
$ docker images
# 查看详细的镜像信息
$ docker inspect <iamge-id>
# 查看镜像的某一个详细信息(.Os 是其中一个属性)
$ docker inspect -f {{.Os}} <image-id>
查看镜像列表
$ docker images
列表包含了 仓库名、标签、镜像 ID、创建时间 以及所占用的空间
镜像 ID 是镜像的唯一标识,一个镜像可以对应多个标签
系统占用空间
docker system off
查看镜像、容器、数据卷所占用系统空间
虚悬镜像
在镜像列表中,有一些特殊的镜像,这个镜像既没有仓库名,也没有标签,均为
。
这些镜像原本是有镜像名和标签的,但随着官方镜像维护,发布了新版本后,docker pull 后原来的镜像名称将会被转移到新下载的镜像身上,而旧的镜像上这个名称则被取消,从而成为了
由于新旧镜像重名,旧镜像名称被取消,从而出现仓库名、标签名均为
# 显示所有 虚悬镜像
$ docker image ls -f dangling=true
# 一般虚悬镜像已经失去存在的价值,可以随意删除
$ docker image prune
查看中间层镜像:
$ docker image ls -a
中间层镜像与虚悬镜像虽有类似,但是这些镜像为其他镜像所依赖,因此这些无标签镜像不应该被删除,否则会导致上层镜像因为依赖丢失而出错。
删除镜像
删除本地的镜像,删除前确保镜像未被正在运行的容器所引用。
# 格式
$ docker rmi [选项] <image-id> <image-id> ...
示例
$ docker rmi 8413cc636d5f
其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要
制作镜像
定制镜像
-t 指定镜像名称和标签,格式为 name:tag
,最后的点代表当前目录,也可以换成其他的路径
$ docker build -t <image-name>:v1 .
压缩包导入镜像
除了标准的使用 Dockerfile 生成镜像的方法外,由于各种特殊需求和历史原因,还提供了一些其它方法用以生成镜像。
$ docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]
压缩包可以是本地文件、远程 Web 文件,甚至是从标准输入中得到。压缩包将会在镜像 / 目录展开,并直接作为镜像第一层提交。
# 导入镜像
$ docker import \
# 查看导入的导入的镜像
$ docker image ls <image-name>
# 查看其构建历史
$ docker history <image-name>
命令导入
Docker 还提供了 docker save 和 docker load 命令,用以将镜像保存为一个文件,然后传输到另一个位置上,再加载进来。这是在没有 Docker Registry 时的做法,现在已经不推荐,镜像迁移应该直接使用 Docker Registry,无论是直接使用 Docker Hub 还是使用内网私有 Registry 都可以。
# 保存镜像(将镜像保存为归档文件)
$ docker image ls <image-name>
# 保存镜像
$ docker save <image-name> -o filename
导出镜像
# 查询官方镜像
$ docker search java
# 获取镜像
$ docker pull java
# 导入镜像
$ docker save java > /home/java.tar.gz
# 导出镜像
$ docker load < /home/java.tar.gz
# 移除镜像
$ docker rmi java
上传镜像
先到 https://hub.docker.com/ 注册账号,保存账户密码
控制台登录 dockerhub 账户
$ docker login
# 查看镜像
$ docker images
# 选择需要上传的镜像,重命名为指定的格式
# name 为镜像名称 new-name 为自己镜像起的名称 v1 为任意设置的版本号
$ docker tag <name> username/<new-name>:v1
# 提交镜像到自己的仓库
$ docker push username/<new-name>:v1
出自:docker 构建镜像