Docker 镜像的操作

  • 1. 拉取镜像
  • 2 查看本地镜像
  • 3 搜索镜像
  • 4 删除本地镜像
  • 5 镜像的导入和导出
  • 6 创建镜像
  • 6.1 已有镜像的容器创建
  • 6.2 基于本地模板导入
  • 7 导出和导入镜像


1. 拉取镜像

# 从docker hub中央仓库拉取镜像到本地
docker pull 镜像名称[:tag]

镜像名称: 	这个是仓库地址;url的地址一样
tag:	这个才是镜像,如果不指定那么就是latest

# 例如:
docker pull daocloud.io/library/tomcat:8.5.15-jre8

2 查看本地镜像

# 查看本地已经安装过的镜像信息,包含标识,名称,版本,更新时间,大小
docker images	# 列出所有镜像
docker image ls		# 列出所有镜像
docker images -q	# 只查看镜像ID
# 查看该镜像的详细信息
docker inspect [REPOSITORY][:latest] | [IMAGE ID]

# 可以格式化输出
docker inspect -f {{".Config.Image"}} hello-world


# 标签TAG区分发行版本
# docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag SOURCE_IMAGE_REPOSITORY[:TAG] TARGET_IMAGE_REPOSITORY[:TAG]

docker tag hello-world:latest hello-world:1.1.0

# 查看镜像内支持的环境变量
docker run [REPOSITORY][:TAG] | [IMAGE ID] env
例如:docker run b2cb11db9d3d env

3 搜索镜像

# docker search [关键字]
docker search mysql

4 删除本地镜像

# 镜像会占用磁盘空间,可以直接手动删除,标识通过查看获取
docker rmi [REPOSITORY][:tag] | [IMAGE ID]	# 可选择标识,如果不选,默认latest

docker rmi $(docker images -q)	# 删除所有镜像

# docker images 查看到IMAGE ID

# 删除之前镜像之前,需要先删依赖该镜像的所有容器
docker ps -a	# 查看所有容器
docker rm [CONTAINER ID]	# 删除容器


# 删除依赖某个镜像的所有容器,并删除该镜像
docker ps -qa -f ancestor=nginx:1.9.5	# 查看"nginx:1.9.5"镜像ID的所有容器
docker stop $(docker ps -qa -f ancestor=nginx:1.9.5)	# 停止以"nginx:1.9.5"镜像ID的所有容器
docker rm $(docker ps -qa -f ancestor=nginx:1.9.5) # 删除以"nginx:1.9.5"镜像ID的所有容器
docker rmi nginx:1.9.5

# 查找出所有以 image 之后创建的 image 的父 image,并删除子镜像,然后删除父镜像
docker rmi $(docker image ls -q --filter since=ba6acccedd29)
docker rmi ba6acccedd29

5 镜像的导入和导出

# 如果因为网络原因可以通过硬盘的方式传输镜像,虽然不规范,但是有效,但是这种方式导出的镜像名称和版本都是null,需要手动修改
# 注意: 导入的镜像ID一样的,则将会合并一个

# 1. 将本地的镜像导出
docker save -o 导出的路径/自定义名字 镜像id
# 例如:
docker save -o /root/tomcat.image b8dfe9ade316		# b8dfe9ade316为镜像ID,可通过docker images查询

# 2. 加载本地的镜像文件【导出的镜像名称和版本都是null】,并需要重新命名镜像名称和版本
docker load -i 镜像文件
# 例如:
docker load -i tomcat.image

#重新命名镜像名称和版本
docker tag 镜像id 新镜像名称:版本
# 例如:
docker tag b8dfe9ade316 tomcat:8.5		# b8dfe9ade316镜像ID ,可通过docker images查询

6 创建镜像

6.1 已有镜像的容器创建

# 运行中的容器ID:1dae1e42ed1d
# -m 提交信息
# -a 作者
docker commit -m "Add a new file" -a "huzhike" 1dae1e42ed1d test:1.1.0

6.2 基于本地模板导入

cat xxx.tar.gz | docker import - ubuntu:14.04

7 导出和导入镜像

# 导出
# docker save -o xxx.tar REPOSITORY[:TAG] | IMAGE ID

docker save -o ubuntu_14.04.tar ubuntu:latest
docker save -o ubuntu_14.04.tar ba6acccedd29


# 导入
docker load --input ubuntu_14.04.tar
或者
docker load < ubuntu_14.04.tar