Docker镜像管理基础(转载)

Docker镜像管理基础

Docker镜像启动方式

Docker镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动docker容器
    采用分层构建机制,最底层为bootfs,其之为rootfs
        bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节约内存资源;
        rootfs:位于bootfs之上,表现为docker容器的根文件系统; 
            传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂载为读写模式;
            docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载 ”技术额外挂载一个“可写”层;

Docker Image Layer

位于下层的镜像称为父镜像(parent image),最底层的称为基础镜像(base image)

最上层为“可读写”层,其下的均为“只读”层

Docker 文件系统

早期文件系统:Aufs (实现文件联合挂载机制)

- advanced multi-layered unification filesystem:高级多层统一文件系统
- 用于为Linux文件系统实现“联合挂载” v aufs是之前的UnionFS的重新实现,2006年由Junjiro Okajima开发;
- Docker最初使用aufs作为容器文件系统层,它目前仍作为存储后端之一来支持;
- aufs的竞争产品是overlayfs,后者自从3.18版本开始被合并到Linux内核;
- docker的分层镜像,除了aufs,docker还支持btrfs, devicemapper和vfs等
    在Ubuntu系统下,docker默认Ubuntu的 aufs;而在CentOS6上,用的是devicemapper;CentOS7上现在还有overlay2

Docker Registry

启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从Registry中下载该镜像并保存到本地

Docker Registry 分类

Registry用于保存docker镜像,包括镜像的层次结构和元数据
用户可自建Registry,也可使用官方的Docker Hub
分类
    Sponsor Registry:第三方的registry,供客户和Docker社区使用
    Mirror Registry:第三方的registry,只让客户使用 (第三方加速器)
    Vendor Registry:由发布Docker镜像的供应商提供的registry
    Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry

Docker Registry组成

Repository
    由某特定的docker镜像的所有迭代版本组成的镜像仓库
    一个 Registry中可以存在多个Repository
        Repository可分为“顶层仓库”和“用户仓库” 
        用户仓库名称格式为“用户名/仓库名” 
    每个仓库可以包含多个Tag(标签),每个标签对应一个镜像

Index
    维护用户帐户、镜像的校验以及公共命名空间的信息
    相当于为Registry提供了一个完成用户认证等功能的检索接口

Docker Registry中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry上保存,供其他人员使用,例如“部署”到生产环境;

Docker Hub

Image Repositories:镜像仓库
Automated Builds:自动构建
Webhooks:web钩子,github+dockerhub自动构建镜像
Organizations:工作组
GitHub and Bitbucket Integration

镜像的生成途径

Dockerfile
基于容器制作
Docker Hub automated builds

  • 基于容器制作
## 启动busybox,创建/data/html/index.html

# docker run --rm -it --name bbox1 busybox
# mkdir /data/httpd -pv
created directory: '/data/'
created directory: '/data/httpd/'
# echo "<h1>Test page</h1>" > /data/httpd/index.html

## 制作镜像

# docker commit -p b1 evescn/busybox/httpd:v1
    -p:暂停容器,进行镜像制作

# docker commit -a "evescn" -c 'CMD ["/bin/httpd","-f","-h","/data/html/index.html"]'' -c "EXPOSE 80" -p b1 evescn/busybox/httpd:v2
    -a 设置作者信息
    -c 修改原dockerfile中信息,比如修改启动命令
    -p 打镜像中暂停容器

## 推送镜像

# docker push evescn/busybox/httpd

docker tag

给容器打标签

基于 ID 打标
    # docker tag 9133dae37bd8 evescn/busybox/httpd:latest
基于名称和标签打标
    # docker tag evescn/busybox/httpd:v0.1 evescn/busybox/httpd:v0.2
为私有 Registry 打标
    # docker tag 9133dae37bd8 harbor.evescn.com/busybox/httpd:v0.1

docker push

推送镜像到仓库,如仓库为私有仓库,需要使用 docker login 先进行登陆,然后推送

推送镜像到 Docker Hub 的前提是于 Docker Hub有用户账号,且镜像标签格式为 “ $DOCKER_USER_ID/IMAGE ”

使用 docker login 命令登录成功后,即可使用 docker push命令进行推送
    # docker login --username=USERNAME --password=PASSWORD registry.cn-beijing.aliyuncs.com

示例:
    # docker push evescn/busybox/httpd:v0.1

docker sava 和 docker load

docker save -o xxx.gz Image1:v1 Image1:v2
doacker load -i XXX.gz
docker save
    Save one or more images to a tar archive (streamed to STDOUT by default)
    Usage:docker save [OPTIONS] IMAGE [IMAGE...]
        --output, -o:Write to a file, instead of STDOUT

docker load
    Load an image from a tar archive or STDIN
    Usage:docker load [OPTIONS]
        --input, -i:Read from tar archive file, instead of STDIN
        --quiet, -q:Suppress the load output
原文地址:https://www.cnblogs.com/evescn/p/12793950.html