03 docker容器镜像基础

  本章内容html

    一、docker镜像基础docker

    二、docker环境下使用的文件系统apache

    三、registry(仓库)后端

    四、获取镜像安全

    五、制做(生成)并上传镜像服务器

---------------------------------------网络

  镜像是做为docker环境的核心内容,一帮状况下,咱们都须要根据工做环境来定制镜像文件,这就对于运维人员提出了很高的要求;app

 

一、docker镜像基础运维

  docker镜像含有启动容器所须要的文件系统及其内容,所以,其用于建立并启动docker容器采用分层构建机制,最底层的bootfs,其之为rootfs;ssh

  docker镜像的分层结构,以下:

  首先,咱们须要了解bootfs ,它是用于引导文件系统的,包含有bootloader和kernel,容器启动以后就会将其卸载下来;(这里就是为了去加载内核,内核加载完成就能够卸载,以节约资源)

  其次,rootfs 位于bootfs之上,它就是docker容器的根文件件系统,是每一个容器的根;

    一、在传统系统模式中,系统启动时,内存挂载在rootfs“只读”模式,完整性自检完成后将其从新挂载为读写模式;(系统启动知识)

    二、docker中,rootfs由内核挂载为“只读”模式,然后经过”联合挂载“技术额外挂载一个”可写”层;

  最后再在rootfs上面去挂载编译环境(编辑器emacs),以及应用程序,而这两层都是“只读”层,若是须要修改,咱们再在最上层挂载writable读写层。也就是咱们的container;

【这里咱们须要知道,下层是能够屡次使用的,能够同时关联于多个writable层上,这样的话,下层能够重复利用】

  

  如上图:

  Apache 运行在一个纯净的 debian上面运行,在系统上使用一个编辑器 - emacs;
  bootfs在内存中挂载后,以后被移除掉;
  debian-emacs-apache 这三层用来启动服务,而且一块儿挂载--这就叫作 联合挂载;这三层是能够多个用户同时共享使用的;
  可是,若是想写入文件,则不能再接写在这三层中,而是再加一层 writable ,专门用来提供给各个用户来进行写入数据;

 

二、docker环境下使用的文件系统

  此时,基于docker镜像的工做原理,咱们使用原有传统的数据组织方式(文件系统)是不适用的,因此咱们使用了新的文件系统来知足docker容器技术;

  其中包括三种技术:aufs  overlayfs  devicemapper(dm)

  其中,devicemapper使用的是dm的模块来实现,而并非修改了文件系统,在生产环境下,咱们建议使用overlayfs的文件系统来实现docker技术;

 

  Aufs

    用于为Linux文件系统实现“联合挂载”,aufs是以前UnionFS的从新实现,2006年由Junjiro Okajima开发;docker使用之初是用aufs做为文件系统层,它目前仍然做为存储后端之一来支持;

    它的竞争产品overlayfs,后来从3.18版本开始被合并到Linux内核;docker;

    而aufs一直不是内核中自有的文件系统。它由于代码太乱了,3万行太多,没有写入内核;若是须要,则必须打补丁升级;而Ubuntu则是将aufs写入内核了;

  overlayfs

    相对于aufs,overlayfs则要优秀的多,它已经被写入到Linux内核,默认启动docker,只要支持overlayfs,则就回使用这种方式来建立docker环境;

  devicemapper

    在没有使用上面两种文件系统的系统程序中,去启动docker进程,则是使用该方式来实现的;它是借助 dm 模块(和lvm技术是同一个模块)来实现,而不是依靠文件系统;

    因此这种方式很是的不稳定,不建议使用;可是在3.18内核以前的版本,redhat系列的Linux操做系统不支持aufs和overlayfs,就会使用该方式来实现docker环境;

 

  查看个人docker环境:

docker info

 

三、registry(仓库)

  镜像文件是从registry(仓库)中获取;

  在启动容器时(run),docker daemon会同时从本地获取相关的镜像文件,若是本地没有这个镜像文件,服务器就回直接去对应的公网仓库中去下载;

  仓库的分类:

    sponsor Registry  第三方仓库,供客户和docker社区使用

    mirror Registry  第三方仓库,只让客户使用

    vendor Registry  由发布docker镜像的供应商提供的registry

    private Registry  经过设有防火墙和额外的安全层的私有实体提供的registry

  tag标签:

    对于仓库,能够定义标签tag,每一个仓库能够有多个标签,可是,一个标签是不能属于多个仓库的;

  index索引:

    维护用户帐号、镜像的校验以及公共命名空间的信息;

    至关于为registry(仓库)提供了一个完成用户认证等功能的检索接口;

 

四、获取镜像

  咱们获取镜像,经过 docker 命令的子命令 pull 来实现;

  用法以下:

    docker pull registry[:<port>]/[namespace/]<name>:<tag>

  

  示例:下载一个镜像文件;

  咱们经过第三方的仓库来下载咱们所须要的镜像文件: https://quay.io

  搜索 flannel ;这是云环境下最经常使用的一个网络部署系统镜像文件;

  点击“coreos/flannel”进入下载界面: 在右下角能够复制镜像地址,进入镜像下载界面

  这里,咱们必定要指定tag,以下图查看tag:

  下载镜像:

docker pull quay.io/coreos/flannel:v0.11.0-arm

  查看镜像:

docker images

 

五、制做(生成)并上传镜像

  镜像生成途径有两种:一、dockerfile 二、基于容器制做

  其中dockerfile是咱们最经常使用的镜像制做方式,并且是docker容器的核心,咱们须要经过dockerfile本身定义镜像,本身定义仓库;

 

  这里咱们先经过容器技术来配置:

    咱们经过子命令commit来经过容器制做镜像;

     docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

      -a --author 指定做者

      -c --change  应用dockerfile的指令来建立镜像

      -m --message 添加消息信息

      -p --pause  建立镜像的时候,须要暂停容器

 

  a\首先咱们运行一个容器

    咱们这里首先经过 pull 命令下载一个busybox的容器,启动这个容器

docker run --name b1 -it busybox

  b\启动busybox的http服务

/ # mkdir -p /data/html
/ # vi /data/html/index.html
<h1>Busybox httpd server</h1>
/ # busybox httpd server

  查看busybox地址:

  重新开启一个 ssh 远程接口,查看http服务:

curl 172.17.0.2

 

  c\保存镜像

docker commit -p b1  //制做新的镜像

docker images //查看制做的镜像

  咱们能够为新的镜像文件添加标签:

    经过子命令 tag 来实现

docker tag 6l6b37df33a7 test/httpd:v0.1  //添加标签须要指定镜像id

  删除镜像,咱们能够经过 images 子命令来实现

docker images rm test/httpd:v0.1

  咱们这里就不删除了

 

  d\咱们能够运行这个镜像

  操做以下: 这里,我新添加一个容器--b1.1,使用的就是咱们建立的镜像,同时,咱们能够 cat /data/html/index.html 文件,这样,咱们就可以看到以前编辑的文件;

 

  e\指定默认容器启动的服务

  这里咱们启动的容器后,还须要指定启动httpd服务,可是,若是咱们默认就须要镜像启动httpd的服务,这里,咱们也能够经过commit子命令来实现;

docker commit -a "test <test@admin.com>" -c 'CMD ["/bin/httpd","-f","-h","data/html"]' -p b1 test/httpd:v0.2

  此时,则建立了一个新的镜像,咱们再启动这个镜像:

docker run --name b1.2 -it test/httpd:v0.2
docker inspect b1.2 //查看地址

  查看服务:

  查看容器:

    在这里,咱们能够看到,咱们指定的默认启动命令;

 

  f\上传镜像到公网仓库

  根据上面的内容,咱们已经为本身制做了对应的镜像文件;咱们能够将本身制做的镜像文件上传到公网仓库,提供给别人下载;

  首先,咱们须要去dockerhub.com上面注册帐号:

  注册完成之后,登陆dockerhub.com网站

  在该界面下,去建立本身的仓库;

    一、指定仓库名称 二、指定仓库描述 三、指定镜像是否公开

  

  最后建立便可:

  有了本身的公有仓库,这时候,咱们就能够将本身的镜像文件上传到仓库中:

    pull 子命令为下载镜像,一样的 push 命令就是上传进项;

    在上传以前,咱们须要登陆到本身的公网仓库,这个操做经过 login 操做来完成;

docker login -u burnov

    提示登陆成功后,咱们就能够上传镜像了

   注意:这里有个问题--上传镜像咱们必定要让仓库名称,登陆名称对应上:

    上图是咱们仓库的名称,因此,咱们的镜像名称也须要修改过来

docker tag test/httpd:v0.2 burnov/httpd:v0.2

    这里,burnov/httpd 中 burnov为用户名,而httpd为仓库名;v0.2为tag标记;

 

  再次上传镜像

docker push burnov/httpd:v0.2

  这样就能上传镜像到仓库;

  查看仓库:刷新一下便可

相关文章
相关标签/搜索