📢身为新时代的网络工程师,传统的路由交换已经满足不了日常。SDN、网络自动化、虚拟化、容器化的出现已经慢慢的代替了传统的数据通信。NetDevOps更是要求现代的网络工程师让编程和自动化成为日常的口袋技能。这个趋势下,我们不得不让自己有闪光点,不然迟早会被淘汰!🤪
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢未来很长,值得我们全力奔赴更美好美好的生活✨
1️⃣Docker 架构
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
2️⃣整体概述:
主要由images、Container和Registry组成,图示如下:
3️⃣images:
1.概述:
由Linux Kernel、Base Image、自定义Image组成。
Image是分层的,并且每一层都可以添加改变删除文件,成为一个新的image。不同的image可以共享相同的layer。image本身是read-only的。
图示:
2.Linux Kernel(bootfs):
这个必须是Linux内核,大概10多M,是不可以定义的。
3.Base Image(rootfs):
基础镜像,一般不需要自己构建。只需要在dockerfile上配置FROM xxx,例如FROM CENTOS:8,及可以让容器的基础环境为CENTOS,但此CENTOS相比于虚拟机中运行的CENTOS大小会小很多,无图形化界面。
4.image:
我们一般在基础镜像上进行自定义的镜像配置,镜像是分层的,每一层对应dockerfile的一行的操作。对比图中,可以看到13行dockerfile,生成镜像时,有13层:
这样的好处是当一个镜像下载时,如果本地已经有相同的层了,就不必再pull下来了,直接用本地的层即可,层是共享的。因此,在进行相关命令时,例如上图的yum install xxx和yum update可以写在一行而不是两行,这样仅会产生一层数据。
4️⃣Container:
由image创建,并在image layer上创建一可读写的Container layer(R/W层)。Writeble Container层的读写操作仅是记录,并不会对下面的read-only Image产生影响。
图示:
5️⃣Registry:
仓库,用于存放镜像的地方(分为公有和私有仓库)。可以直接使用docker pull命令将仓库中的镜像拉到本地,默认的仓库Docker的官方仓库Docker Hub Registry。
因为墙的缘故,官方仓库的速度会比较慢,可以配一个官方的中国加速镜像,具体做法:阿里云->登陆账号->找到镜像服务->镜像中心->根据操作信息找到对应的文档,并复制粘贴到需要加速的设备上。