【Docker】4. Docker Image

文章目录

    • Dokcer Image
      • Docker Image Command
      • Docker Image Operator

Dokcer Image

Docker Image 简介

Docker Image 本质上是一个只读文件,这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行application(应用)所必须的文件。可以将其理解成一个模板,可以实例化出很多容器

本质是一个联合文件系统(Union FS),每一层文件系统我们叫做一层,联合文件系统可以对每一层文件系统设置三种权限,只读,读写,写出。但是Docker Image中的每一层文件系统都是只读的

Docker Image 作用

部署应用时,常常会出现云端和本地环境不一致的问题,用户为每个应用打包过程非常繁琐,Docker Image就是为了解决这个打包功能

Docker Image把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样的,很好解决了Paas时代云端和本地一致性问题

Docker 最大的贡献就是定义了容器镜像的分层存储格式,镜像技术的基础时联合文件系统(Union FS)其文件系统是分层的,这样既可以充分利用共享层,又可以减少存储空间占用


Docker Image Command

命令 别名 功能
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 rmi [option] image [image…] 删除本地镜像

# 拉去busybox:1.35.0
[root@VM-20-6-centos ~]# docker pull busybox:1.35.0
1.35.0: Pulling from library/busybox
1.35.0: Pulling from library/busybox
c15cbdab5f8e: Pull complete 
Digest: sha256:b4e4a06de46acc0958cd93e2eeb769077d255f06a7c3a91196509c16b7bc989e
Status: Downloaded newer image for busybox:1.35.0
docker.io/library/busybox:1.35.0
[root@VM-20-6-centos ~]# docker images busybox
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
busybox      1.36      8135583d97fe   9 days ago    4.86MB
busybox      1.35.0    dddc7578369a   2 weeks ago   4.85MB
# 删除本地安装的镜像
[root@VM-20-6-centos ~]# docker image remove dddc7578369a
Untagged: busybox:1.35.0
Untagged: busybox@sha256:b4e4a06de46acc0958cd93e2eeb769077d255f06a7c3a91196509c16b7bc989e
Deleted: sha256:dddc7578369a0eb6d94c6eb359fb15cc807e2874fbd7e40614ed0b348c45fd2c
Deleted: sha256:42ef21f45b9a2f44c8235aebe71f7bf716cc464fc45d0a302ef48469040a87da

# 注意:如果一个容器已经被启用了,那么容器运行时无法删除其镜像
# 运行惊醒busybox:1.35.0 创建容器后退出
[root@VM-20-6-centos ~]# docker run -it --name mybusybox6 busybox:1.35.0 sh
/ # ls
bin    dev    etc    home   lib    lib64  proc   root   sys    tmp    usr    var
/ # exit

# 可以看到该容器正在停用
[root@VM-20-6-centos ~]# docker ps -a | grep busybox:1.35.0
cce740c20464   busybox:1.35.0   "sh"                     About a minute ago   Exited (0) About a minute ago                                             mybusybox6
acdc9b399f32   busybox:1.35.0   "bash"                   2 minutes ago        Created                                                                   mybusybox

# 删除busybox:1.35.0 镜像
[root@VM-20-6-centos ~]# docker image remove busybox:1.35.0
Untagged: busybox:1.35.0

# 发现无法删除
[root@VM-20-6-centos ~]# docker image remove busybox:1.35
Error response from daemon: conflict: unable to remove repository reference "busybox:1.35" (must force) - container acdc9b399f32 is using its referenced image dddc7578369a

# 使用-f选项强制删除
[root@VM-20-6-centos ~]# docker image remove -f busybox:1.35
Untagged: busybox:1.35
Untagged: busybox@sha256:b4e4a06de46acc0958cd93e2eeb769077d255f06a7c3a91196509c16b7bc989e
Deleted: sha256:dddc7578369a0eb6d94c6eb359fb15cc807e2874fbd7e40614ed0b348c45fd2c

# 强制删除成功
[root@VM-20-6-centos ~]# docker ps -a | grep busybox:1.35
[root@VM-20-6-centos ~]# docker ps -a | grep busybox:1.35.0

docker save [options] image [image…] 将指定镜像保存成tar归档文件

docker save [options] image [image...] 
options: -o 输出到指定文件
[root@VM-20-6-centos maxxin]# ll
total 0
[root@VM-20-6-centos maxxin]# docker images busybox
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
busybox      1.36.0    af2c3e96bcf1   2 weeks ago     4.86MB
busybox      1.34.0    8336f9f1d094   20 months ago   1.24MB

# 保存一个镜像到mybusybox1.tar
[root@VM-20-6-centos maxxin]# docker save -o mybusybox1.tar busybox:1.36.0
[root@VM-20-6-centos maxxin]# ll
total 4980
-rw------- 1 root root 5097472 May 29 19:05 mybusybox1.tar
[root@VM-20-6-centos maxxin]# ll
total 4980
-rw------- 1 root root 5097472 May 29 19:05 mybusybox1.tar

# 保存多个镜像到mybusybox2.tar 
[root@VM-20-6-centos maxxin]# docker save -o mybusybox2.tar busybox:1.36.0 busybox:1.34.0
[root@VM-20-6-centos maxxin]# ll
total 11396
-rw------- 1 root root 5097472 May 29 19:05 mybusybox1.tar
-rw------- 1 root root 6566912 May 29 19:06 mybusybox2.tar

docker load (写入,载入) 导入使用docker save 命令生成的.tar包

docker load [options]
--input, -i 指定导入文件,代替STDIN
--quiet, -q 精简输入信息


[root@VM-20-6-centos maxxin]# docker images;
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

# 加载.tar包内部镜像, 加-q 选项输出信息会变少
[root@VM-20-6-centos maxxin]# docker load -i mybusybox2.tar
1f1d08b81bbe: Loading layer [==================================================>]  5.088MB/5.088MB
Loaded image: busybox:1.36.0
f6cb480bb44e: Loading layer [==================================================>]  1.463MB/1.463MB
Loaded image: busybox:1.34.0

[root@VM-20-6-centos maxxin]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
busybox      1.36.0    af2c3e96bcf1   2 weeks ago     4.86MB
busybox      1.34.0    8336f9f1d094   20 months ago   1.24MB

docker history 显示镜像历史

docker history [options] image
-H --human : 大小和日期采用人易读的格式展现
--no-trunc : 显示全部信息
-q --quit: 只显示id

[root@VM-20-6-centos maxxin]# docker history -H busybox:1.36.0
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
af2c3e96bcf1   2 weeks ago   /bin/sh -c #(nop)  CMD ["sh"]                   0B        
<missing>      2 weeks ago   /bin/sh -c #(nop) ADD file:c22c6617fa9a85e0d…   4.86MB  

docker image prune 删除不使用镜像

docker image prune [options]
-a, --all # 删除全部不使用的镜像(容器不使用即被定义) --该选项非常危险
--filter  # filter(过滤器) 
-f --force # 不提示是否删除

Docker Image Operator

# docker 信息存储地址 /data/var/lib/docker
[root@VM-20-6-centos docker]# ll
total 44
drwx--x--x 4 root root 4096 May 29 19:01 buildkit
drwx--x--- 2 root root 4096 May 29 19:01 containers
-rw------- 1 root root   36 May 29 19:01 engine-id
drwx------ 3 root root 4096 May 29 19:01 image
drwxr-x--- 3 root root 4096 May 29 19:01 network
drwx--x--- 5 root root 4096 May 29 19:12 overlay2
drwx------ 4 root root 4096 May 29 19:01 plugins
drwx------ 2 root root 4096 May 29 19:01 runtimes
drwx------ 2 root root 4096 May 29 19:01 swarm
drwx------ 2 root root 4096 May 29 19:14 tmp
drwx-----x 2 root root 4096 May 29 19:01 volumes

[root@VM-20-6-centos docker]# cd image
[root@VM-20-6-centos image]# ll
total 4
drwx------ 5 root root 4096 May 29 19:12 overlay2   # overlay2 是docker 的存储驱动

scp mybusybox.tar root@IP:/data/maxxin


你可能感兴趣的:(Docker,docker,容器,运维)