docker - 镜像篇

理论

镜像的组成

  • docker 的镜像是由文件系统叠加而成
  • 最底层是引导文件系统 bootfs, 容器启动后, bootfs会被卸载, 留出更多的内存供 initrd 磁盘镜像使用
  • 第二层是 rootfs, 可以由一个或多个文件系统(如centos, ubuntu)组成, rootfs 永远只读
  • 再利用联合加载(union mount)在 rootfs 上加载 更多的只读文件系统, 最终的文件系统会包含所有底层的文件和目录
  • docker中将这样的文件系统称为镜像, 一个镜像可以放到另一个镜像的顶部, 位于下方的镜像称为父镜像, 最底端的镜像称为基础镜像, 当启动容器时, docker会在顶层加载一个读写文件系统, 我们的读写操作是在这个层执行的
    在这里插入图片描述

有关名词

  • 联合加载: 一次同时加载多个文件系统, 但在外部只能看到一个
  • 读写复制: docker启动容器时, 初始的读写层是空的, 当文件系统发生变化时, 变化都会应用到这一层. 修改文件时, 会先从下边的只读层复制到上边的读写层 该文件的只读版本依然存在, 但是已经被读写层中的副本隐藏

使用

修改镜像源

  • 修改 /etc/docker/daemon.json 文件
    {
    # "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
    # "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"] # 阿里的
    "registry-mirrors":["http://hub-mirror.c.163.com"] # 网易的
    }
    
  • 重启docker服务
    systemctl daemon-reload
    systemctl restart docker.service
    

基础命令

# 在线上查找镜像
docker search centos

# 从线上拉取镜像
docker pull centos
docker pull ansible/centos7-ansible

# 列出镜像
docker images

# 删除镜像
docker rmi [id|name]

# 查看指定镜像的创建历史
docker history centos

构建

dockerfile & build >> 推荐使用

  • 创建一个目录, 存放dockerfile, 这个目录就是我们的 构建环境(build environment)
  • docker 称此环境为上下文 (context), 或者构建上下文 (build context)
  • docker 会在构建镜像时, 将该目录内的文件和目录上传到 docker 的守护进程
  • 这样 docker 的守护进程就能直接访问你想在镜像中存储的任何代码、文件或其他数据
  • 每条 run/copy/add 指令执行时, 都会创建一个新的镜像层, 如果指令执行成功, 就会将镜像层提交, 继续执行下一条
  • 由于上一条的存在, dockerfile 中应该尽量减少 run/copy/add 等命令的次数, 缩减镜像大小

dockerfile

文件详解


使用docker build构建(创建镜像)

# 语法
#     docker built -t [registry]/[image][:tag] [path]
#     tag不填默认为latest
#     path为dockerfile所在目录, 也可以指定git仓库的dockerfile地址, 通常会被指定为当前目录"."

docker build -t centos/nginx .                           # tag不填, 版本为latest; .为根据当前目录创建镜像
docker build -t centos/nginx:0.0.2 git@github.com/xxx/xx # 可以指定git仓库的dockerfile地址

# 忽略构建缓存, --no-cache 关键字
docker build --no-cache -t centos/nginx:0.0.3 .

使用commit >> 不推荐

docker commit [容器名|容器id] 镜像名:版本号

查看镜像分层大小

docker history [IMAGENAME|IMAGEID]

# 执行结果如下
# 
# [root@iZ0jle533ii2r4nd36agbfZ nginx]# docker history op/nginx:v1
# IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
# c07ae2307022        3 minutes ago       /bin/sh -c #(nop)  EXPOSE 443/tcp 80/tcp        0 B                 
# aea2a3602117        3 minutes ago       /bin/sh -c #(nop) ADD file:411f7b29e4bc7ac...   21 B                
# 9c501de24b40        3 minutes ago       /bin/sh -c #(nop)  ENV htmldir=/usr/share/...   0 B                 
# 8f41e459edf2        3 minutes ago       /bin/sh -c #(nop)  MAINTAINER KAI 10928452...   0 B                 
# c39a868aad02        8 days ago          /bin/sh -c #(nop)  CMD ["nginx" "-g" "daem...   0 B                 
# ...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值