Docker
- Docker 镜像是什么
- 为什么需要镜像
- 镜像命令
- 总览
- docker images
- docker tag
- docker pull
- docker push
- docker rmi
- docker save
- docker load
- docker image inspect
- docker history
- docker import
- docker image prune
- docker build
 
Docker 镜像是什么
-  Docker image 本质上是一个 read-only只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件
-  我们可以把 Docker image 理解成一个模板, 可以通过这个模板实例化出来很多容器 
-  image 里面是一层层文件系统(Union File System), 可以将几层目录挂载到一起, 形成一个虚拟文件系统. 每一层文件系统我们叫做一层 layer, 联合文件系统可以对每一层文件系统设置三种权限, 只读(readonly)、读写(readwrite)和写出(whiteout-able) 
镜像相当于一个模板,可以很方便的构建出来不同的对象
🍂案例

为什么需要镜像
在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和修改等操作,非常费劲
然而,Docker 镜像就是为了解决这个小小的打包功能,突然一夜之间成名。那么,你可能说 Docker 镜像就是个压缩包,是的,你猜对了,它就像一个压缩包文件。它是如何解决 Paas 时代所面临的云端和本地一致性问题?很简单,它是把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样
Docker 最大的贡献就是定义了容器镜像的分层的存储格式,Docker 镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。Docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他 Docker 用户公开共享
镜像命令
总览
| command | alias | function | 
|---|---|---|
| docker images | docker image ls / docker image list | 列出本地镜像 | 
| docker tag | docker image tag | 给镜像打标签, 可用于推送至镜像仓库 | 
| docker pull | docker image pull | 从镜像仓库拉取镜像 | 
| docker push | docker image push | 推送镜像到仓库 | 
| docker rmi | docker image rm / docker image remove | 删除本地镜像 | 
| docker build | docker image build | 通过 dockerfile 制作镜像 | 
| docker save | docker image save | 将指定镜像保存成 tar 归档文件 | 
| docker load | docker image load | 导入使用 docker save 命令导出的镜像 | 
| docker image inspect | 查看镜像详细信息 | |
| docker history | docker image history | 查看镜像历史 | 
| docker import | docker image import | 从归档文件 docker export 中创建镜像 | 
| docker image prune | 删除不使用的镜像 | 
docker images
-  功能 列出本地镜像 
-  语法 docker images [OPTIONS] [REPOSITORY[:TAG]]
-  别名 docker image ls, docker image list
-  参数 - -a: 列出本地所有的镜像(含中间映像层, 默认情况下, 过滤掉中间映像层)
- --digests: 显示镜像的摘要信息
- -f: 显示满足条件的镜像
- --format: 指定返回值的模板文件
- --no-trunc: 显示完整的镜像信息
- -q: 只显示镜像 ID
 
🍂样例
# 列出本地全部镜像
docker images# 列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表
docker images ubuntu
docker tag
-  功能 标记本地镜像, 将其归入某一仓库 
-  语法 docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
-  别名 docker image tag
🍂样例
# 给 ubuntu:22.04 镜像打标签
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
docker pull
-  功能 从镜像仓库中拉取或者更新指定镜像 
-  语法 docker pull [OPTIONS] NAME[:TAG|@DIGEST]
-  别名 docker image pull
-  参数 - -a: 拉取所有 tagged 镜像
- --disable-content-trust: 忽略镜像的校验, 默认开启
 
🍂样例
# 拉取 nginx:1.23.3 镜像
docker pull nginx:1.23.3
docker push
-  功能 将本地的镜像上传到镜像仓库, 要先登录到镜像仓库 
-  语法 docker push [OPTIONS] NAME[:TAG]
-  别名 docker image push
-  参数 - -a: 推送所有 tagged 镜像
- --disable-content-trust: 忽略镜像的校验, 默认开启
 
🍂样例
# 推送 bibubibu/busybox:v1 镜像
docker push bibubibu/busybox:v1
docker rmi
-  功能 删除镜像 
-  语法 docker rmi [OPTIONS] IMAGE [IMAGE...]
-  别名 docker image rm, docker image remove
-  参数 - -f: 强制删除
- --no-prune: 不移除该镜像的过程镜像,默认移除
 
🍂样例
# 推送 bibubibu/busybox:v1 镜像
docker rmi nginx:stable
docker save
-  功能 将指定镜像保存成 tar 归档文件 
-  语法 docker save [OPTIONS] IMAGE [IMAGE...]
-  别名 docker image save
-  参数 - -o: 输出到的文件
 
🍂样例
# 将 myimage:latest 镜像保存成了 myimage.tar 文件
docker save -o myimage.tar myimage:latest
docker load
-  功能 导入使用 docker save 命令导出的镜像 
-  语法 docker load [OPTIONS]
-  别名 docker image load
-  参数 - --input, -i: 指定导入的文件, 代替 STDIN
- --quiet, -q: 精简输出信息
 
🍂样例
# 将 myimage.tar 文件导入到本地镜像
docker load -i myimage.tar
docker image inspect
-  功能 查看镜像详细信息 
-  语法 docker image inspect [OPTIONS] IMAGE [IMAGE...]
docker inspect 会自动检查是镜像还是容器然后显示相关信息
🍂样例
# 查看镜像详细信息
docker images inspect nginx:1.23.3
docker history
-  功能 显示镜像历史 
-  语法 docker history [OPTIONS] IMAGE
-  别名 docker image history
-  参数 - -H , --human: 大小和日期采用人容易读的格式展现
- --no-trunc: 显示全部信息, 不要隔断
- -q, --quiet: 只显示镜像 id 信息
 
🍂样例
# 显示 nginx:1.25.3 镜像历史
docker history -H nginx:1.25.3
docker import
-  功能 从归档文件中创建镜像 
-  语法 docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
-  别名 docker image import
-  参数 - -c: 应用 docker 指令创建镜像
- -m: 提交时的说明文字
 
🍂样例
# 从 my_ubuntu_v3.tar 文件中创建了一个名为 bibubibu/ubuntu:v4 的镜像
docker import my_ubuntu_v3.tar bibubibu/ubuntu:v4
docker image prune
-  功能 删除不使用的镜像 
-  语法 docker image prune [OPTIONS]
-  参数 - -a , --all: 删除全部不使用的镜像
- --filter: 指定过滤条件
- -f, --force: 不提示是否删除
 
🍂样例
# 删除所有没有被已有容器使用的镜像
docker image prune -a
docker build
-  功能 用于使用 Dockerfile 创建镜像 
-  语法 docker build [OPTIONS] PATH | URL | -
-  参数 - --build-arg=[]: 设置镜像创建时的变量
- -f: 指定要使用的 Dockerfile 路径
- --label=[]: 设置镜像使用的元数据
- --no-cache: 创建镜像的过程不使用缓存
- --pull: 尝试去更新镜像的新版本
- --quiet, -q: 安静模式, 成功后只输出镜像 ID
- --rm: 设置镜像成功后删除中间容器
- --tag, -t: 镜像的名字及标签, 通常为 name:tag 或者 name 格式; 可以在一次构建中为一个镜像设置多个标签
- --network: 默认 default. 在构建期间设置 RUN 指令的网络模式
 
🍂样例
# 使用 Dockerfile 创建了一个名为 myimage:tag 的镜像
docker build -t myimage:tag
