docker 深入学习

学习资料:https://blog.csdn.net/hcljava/article/details/78588623

一、docker 导学
        docker swarm  容器编排(不同的宿主机上运行docker)技术    kuburenetes(k8s)也是一种容器编排技术

二、docker 技术概述

       1、产生的原因
             devops  开发和运维   开发环境和运维人员的环境不一样,我们从事开发最主要的问题就是环境问题,虚拟化技术和docker技术就解决了我们的这个痛点。

docker 深入学习
       2.  区别    
            虚拟技术(虚拟机)      缺点:虚拟化一整个操作系统,占用资源大
            docker (集装箱)     虚拟化所需要虚拟的  ,共用一个linux kernel(bootfs),linux 的内核版本(linux的发行版本都是linux 的版本分类,在我的linus 系统学习里面可以看到)。下面会谈到docker的文件系统          分层所以共用一个linux kernel

三、docker 的安装
       ce  社区版本   ee 企业版本

       建议学习docker 在虚机中使用,不要直接在windows 里面下载docker 或者是mac 系统里面直接安装docker使用,因为会产生 很多的镜像,不好管理,如果在虚机里面的话直接把虚机删掉就可以了。

      在windows 里面装有3个条件,1.win10系统,              2.  64 位操作系统               3.开启虚拟化功能    docker官网可以看到
      如何在windows 里面安装linux虚机,如下:

      1. vmware 虚拟机。(vmware 是收费的,所以说推荐 vmware+vargrant 的组合)

      2.安装virtualbox (虚拟盒子可以管理很多的虚拟机),安装vagreant来安装(一款快速安装虚拟机的软件,原理是通过vagratfil文件来安装的,在他的clond 平台可以看到这个file文件 ),当然通过virtualbox 也可以来安装但是比较麻烦。

       vagreant安装完成之后只需要两个命令:1.vagreant nit  centos/7      2.vagreant       up  (如果本地存在就在本地加载镜像,如果不存在就会从云下载)

       3. 或者直接购买服务器
       4. docker playground  添加一个服务器的实例就可以使用,但是有时间限制。

     docker 深入学习

   

三、docker正式入手

1.docker 架构和底层技术的实现(开发,打包 镜像的工作,运行容器的工作)
       docker 深入学习docker 深入学习docker 深入学习      2. docker images

docker的文件系统分为两层:bootfs和rootfs

bootfs包含了bootloader和linux内核。用户是不能对这层作任何修改的。在内核启动之后,bootfs实际上会unmount掉。

rootfs则包含了一般系统上的常见目录结构,类似于/dev, /proc, /bin等等以及一些基本的文件和命令。

    docker 深入学习

image 的生成
        1.  build dockerfile 文件                    2.   从register  pull   下来                  3.   容器  commit

3.  container

      docker 深入学习

4. dockerfile(通过关键字构建dockerfile)
     1.关键字   
          docker 深入学习

from  scratch  scratch 应该是一个空镜像    an explicitly empty image, especially for building images "FROM scratch" 官网描述
   docker 深入学习

run  每执行一层 产生一个新的层 。(因为镜像是只可以读的,不能写,run之后产生一个可以写的层)docker 深入学习

docker 深入学习docker 深入学习

 

  workdir 指的是成了容器后,容器内的目录。

docker 深入学习

docker 深入学习

docker 深入学习

docker 深入学习

docker 深入学习

docker 深入学习

docker 深入学习

volume  关键字,指定持久化存储的本地系统的目录。下面会讲到

4.   镜像的发布
      1.  容器直接push(不安全,因为别人在用的时候看不到dockerfile ,万一有病毒怎么办)              、

      2.   dockerhub  和github 关联,dockerhub  会自动build github 的dockerfile 文件,别人在 用的时候也可以看的到dockerfile 的文件。
      3.  dockerhub 是一个共享的仓库,如果想要有一个私有的,可以查看dockerhub regittry 的这个镜像,这个相当于是在本地搭建 了 一个私有的共享仓库。 

5. 命令图
docker 深入学习

四、深入知识
      4.3 网络命名空间
       1)在我们生成容器的时候就自动创建了一个网络命名空间(一个会还口,以一个通讯口ip)
       2)利用linux 也可以创建网络命名空间,步骤如下
             1.利用veth(网络接口)技术创建接口(通讯口ip)(因为创建的网络命名空间只有会还口)
             2.给这个接口配置ip 就可以进行通讯了。
       docker 深入学习

4.4 上面产生的两个问题引出的docker bridge 详解
       1)容器之间到底是怎么通讯的,原理是什么。(上面是linux 两个网络命名空间的通讯就是分配2个接口和ip)
             容器有自己的网络命名空间,linux docker0 也有也有自己的网络命名空间,其原理也是分配两个接口进行通讯的。

             docker network ls 里面的bridge 其实就是linux 里面的ip a 里面的docker
       2)为什么容器内可以ping 通外网地址
               docker 深入学习

4.5 容器之间的link

     需求描述:后台代码连接数据库,后台代码都数据库都是连个容器。如果在后台代码的容器内能够ping通,数据库容器就说明连接成功,但是数据库的地址是不一样的(本地,沙箱,正式),ping 数据库ip:3306。所以希望就是我不管你的数据库的地址如何变化,我只要知道你的容器的名字,我能够ping通你的名字就行了,你内部自己处理ip。这就是link。在启动的后台代码容器的时候加入link 数据库容器的名字就可以解决,但是link是单向的 。在以后也不常用,常用的是一样的方法
  

     用自己生成的birdge 

      如果容器不指定bridge的话,默认的是docker0  这个bridge,但是这个bridge 如果想ping通的话,必须得加入link,link 又是单向的,比较麻烦。但是自己生成的bridge 就很好的解决了这个问题,容器之间直接ping 容器名字可以ping通。不需要加link。 

4.5 容器端口的映射  port
4.6 容器网络之host 和none  
     docker network ls
     bridge 上面已经说过了

     host 的话就是和宿主机用 一套网络空间(多个端口可能冲突)

     none 就是*会还口,没有ip

4.7 单机多容器复杂应用的部署
      利用link 或者是 自定义network           (其实利用docker compose 的技术比较方便,但是要精通dockerfile,docker compose 下面 会讲到,现在都是对单个容器的管理)

4.8 双机容器通讯

      docker 深入学习

       这就用到了vxlan技术  
       其原理就是在underlay (205.10   和 205.11)的基础上天界overlay(0.2 和0.3)
       因为0.2和0.3 在eth0的时候不认识这个玩意,但是10和11是可以ping通的,因为把0.2和0.3 的数据 包放到这里携带过去

docker 深入学习

五、docker的持久化存储和数据共享
        1. 我们创建容器的时候写到东西在container layer层,所以在容器销毁的时候数据会丢失(最典型的的就是数据库)
         docker 深入学习2. 解决方法
 docker 深入学习

两种方案:

docker 深入学习

docker 深入学习

5.3  持久化存储之 data volume 
       docker 深入学习

5.4 持久化存储之 bind mounting 
docker 深入学习

   那么到底有啥区别呢 :https://blog.csdn.net/m0_37904728/article/details/78635499  这篇文章讲的很详细。截图如下
   docker 深入学习

六、docker compose 
       产生:像之前的worldpress (包括mysql) 等,如果一个项目多一个容器的话,每个容器都有自己的镜像,配置又不一样,管理起来就比较麻烦了 。所以docker compose 就产生了。对容器进行批量处理。

docker 深入学习

docker 深入学习

 docker compose 的版本        2 和 3的区别在于,3和可以在多个机器之间进行管理,2只是单机,docker enging 和docker compose是对应的,现在docker enging 是按照年季度发行的,一个季度一个版本,现在相对应的docker compose是3.几

docker 深入学习

docker 深入学习

其实上面的说法有误,不是一个sesrvice一个容器,service 里面都是容器,也可能有好几个

docker 深入学习

docker 深入学习

docker 深入学习

七、容器编排 docker swarm

      对不同宿主的容器进行管理,swarm 节点有两个角色,manege和worker  
      mannage 节点的主要工作就是运行服务生成容器,放到哪个work节点运行,当然manage节点也可以工作

docker 深入学习

docker 深入学习docker 深入学习

八、docker cloud 和 devops
       1.docker 的收费模式(docker 不是一个公益机构,也有投资人要盈利给与的压力)

          (1.)我们用的是ce,ee (企业版是收费的)
          (2.)培训

          (3.)培训完的认证(给的证书)

           (4.)docker store (类似于苹果 的商店)  分类ce 和ee ,ee 是收费的,经过docker 官方认证的,类似苹果商店
           (5.)docker cloud  初步理解是,不需要明令行去搭建docker swarm,用的是网页版,下面会具体谈到docker cloud

       2. docker cloud 简介  

           caas 不是 saas

           docker 深入学习

docker 深入学习

docker 深入学习

docker 深入学习

         本章要实现的devops(常用的ci工具  jenkins,gitlab ci,travis ci)

         docker 深入学习

8.3 docker cloud 之自动build docker image
      1. 在github 创建 组织

       2. 在docker cloud 创建组织

       3. 进行关联,授权docker cloud 访问jithub 的组织

       4. 配置自动构建,并且制定构建规则,最好两个规则,一个是自动构建github 的哪个分支的规则,另外一个是打tag 的规则。打tag 的话直接在github  的releas 直接打tag 就可以了。配置好之后生成的镜像也是这个tag