Docker简介
本文最后更新于113 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

1.什么是Docker

  • 0-1:创新新的技术
    1-1.5:在已有的技术基础上进行更新,补充
    1-2:重大变革

  • DOCKER是1-1.5的,是基于内核的一些技术用新的观念革新,形成了DOCKER,原技术可以追溯至Unix,当初为了测试内核稳定性而开发出来的技术

  • Docker 是一个 容器管理引擎 ,用于 创建 、 管理 和 编排容器 。

  • Docker可以作为 开发、测试、生产平台 。使用Docker 将程序与基础架构分离 同时, 创建、管理架构非常方便 ,我们可以通过Docker可以实现 PAAS的快速交付 , 以及代码的快速部署 。

file

  • 基于Linux container (LXC) 实现的
    共用一个内核,DOCKER也可以理解为一个进程
    golang是一门新型的编译型语言,在 08年以后才诞生,是谷歌内部开发出来的,08年有的CPU多核心技术,go语言从基础就支持多核心
    编译:c,c++ ,go等,直接和CPU沟通,CPU看得懂,直接编译
    解释:shell,PHP等,需要先解释成CPU能看懂的语言,然后才能进行编译(12306不崩溃的很大原因就是从PHP语言变成了go语言)

2.传统虚拟化以及Docker的区别

  • 设想现在有一个大仓库
    传统虚拟化:把每个环境(虚拟机)当做一个用户,然后用水泥打隔断,但是占地面积多,麻烦
    容器级虚拟化:拉窗帘,资源利用率高,方便快捷
    传统虚拟化:消耗资源高,安全性更好
    容器级虚拟化:消耗资源低,他只是一个进程,启动也快,但是相对来说安全性比较低

    file

  • 传统虚拟化操作系统:
    数组化操作系统——虚拟引擎——虚拟机操作系统——应用程序
    假如有十个G内存三个APP共用6个G
    DOCKER:让资源利用率进一步提升,没有独立的操作系统
    数组操作系统——文件运行环境(不消耗资源)——应用程序
    十个G,九个G运行5个APP

    file


3.Docker的发展历程

  • 1、Linux Container 是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源

  • 2、Docker 是 PAAS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于 go 语言并遵从 Apache2.0 协议开源

  • 3、Docker 设想是交付运行环境如同海运,OS 如同一个货轮,每一个在 OS 基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造

    file

4.Docker的构成

  • 容器——镜像——仓库
容器
    理解为虚拟机,VM
    一个镜像可以启动无限个容器,一个容器只能有一个镜像
镜像
    理解为ISO文件或者ESXI的ovf模板        mysql:5.6centos        mysql:5.6Ubuntu
        系统环境:容器里是共享内核,我们启动的每个容器都是没有内核的操作系统。把内核去掉就是生态了,把这些生态打包,就是系统环境    
        应用环境:可执行文件,依赖等等,展开就是一个应用
仓库
    理解为存储镜像的服务器,提供下载服务
    有本地和网络
  • 1、Docker 仓库:https://hub.docker.com
  • 2、Docker 自身组件

    Docker Client:Docker 的客户端:命令行管理工具 client和server是可以跨机器的
    Docker Server:Docker daemon 的主要组成部分,接受用户通过 Docker Client 发出的请求,并按照相应的路由规则实现路由分发:服务器端,通过http协议进行发送
    server端有自己的API接口,是一个识别动作的编程接口,只要你的client端符合它的规则,就可以链接,换取资源,创建容器,下载镜像等
    Docker 镜像:Docker 镜像运行之后变成容器(docker run)

    file


5.Docker化应用存在的方式

5.1每个应用都有对应的操作系统

file

5.2 共享操作系统(内核)

  • 一切皆文件,就有共享性,干脆就把操作系统共享,节约资源
    但是这样应用A崩了,B也不能用了
    file
  • 一个应用随着时间推移,访问量越来越多,功能越来越多。而且功能多了在一个进程里,七八个部门在一个目录里修改,那经常崩,所以有了微服务,把子功能分开,同样,这样也需要更多的设备支持

5.3内核与运行环境进行分离

  • 操作系统也是镜像文件,文件没有死活,何况还有只读等权限,就解决了依赖问题
    但是出现了新问题,兼容性问题,也就是A需要关闭IPforward,B需要打开
    file

5.4增加可写层,其他环境不变

  • 所以推出了可写层,可写层一下都是只读的,想写入的话就只能写在可写层之中
    上层优先级大于下层,也就是说如果冲突了,那就是按照可写层的来,比如镜像中是关闭IPforward,那就在A的可写层之中写开启
    file

5.5基础运行环境(镜像)与可写层分离(容器可写层),多个容器共用一个基础运行环境

假如我们需要安装LAMP,LNMP,Tomcat,那么我们需要
centos ISO    apache    mysql    php    tomcat    jdk
也就是需要装这些
apache
    apache
    centos
mysql
    mysql
    centos
php
    php
    centos
tomcat
    tomcat
    centos
由于很多重复文件,并且文件过大,所以镜像有了UFS,他可以叠放,把重复的去除
UnionsFS(Union File System,联合文件系统)是一个 可叠放的联合文件系统 
镜像也是分层的,需要什么,就在可写层中写,然后去镜像中调用就行

file

镜像分层的好处

  • 假如现在公司需要把PHP5.4变成PHP7.4.十倍提升,那么只需要把7.4迁移就好,其他的之前都有,不需要拷贝mysql,Apache,centos等等。
    哪怕是制作镜像的过程中也会节省资源,毕竟重新编译也很费资源

    file

    计算:
    docker images
    镜像名        版本号        镜像 ID         创建时间        大小
    nginx         v1            xxxxx                       500MB
    tomcat        v1         xxxx                          300MB
    centos        v2                                        200MB
    问,当前的镜像实际占用空间是多大:FGH
    A、150MB    B、200MB    C、255Mb    D、300MB    E、450Mb
    F、500MB    G、600MB    H、1000MB    I、1111MB
    按照极值来说,从500-1000都有可能,500的时候nginx中包含Tomcat和centos需要的所有东西,1000的时候都不包括

    6.安装相关

  • 网易yum
    http://mirrors.163.com/.help/centos.html
    网易DOCKER镜像仓库
    https://c.163yun.com/dashboard#/home
    docker官方镜像
    hub.docker.com
    道云,人少时候很快,人多时候很慢,小公司,带宽不大
    http://get.daocloud.io/

  • DOCKER-ce-selinux这个包就是如果你开启了selinux,他会帮你管控,放权给docker,让它正常工作
    docker会利用大量的防火墙规则,结合nat,filter表进行访问控制
    所以最好先enable,然后重启,重启可以让docker和防火墙规则紧密的结合

  • 对于go语言来说,他在编译成可执行文件的时候,就把所有的依赖都打包放在自己的执行库中,所以他源码安装是没有任何提升的,那就没必要了

代理加速器

  • DOCKER的仓库默认在美国,很慢很慢,也就几十kb,国内很多公司做了代理服务器,他帮你去下载,在本地也会做一些缓存,这样就会快一些,这种操作叫做镜像加速器

  • 目前国内绝大部分代理已被长城防火墙封禁

Docker简单应用

docker run --name db --env MYSQL_ROOT_PASSWORD=example -d mariadb
--name      起一个别名,不起别名的话默认名会非常复杂
--env    设置环境变量,理解为内部设置了一个模板,如果他发现有这个变量,就会把mysql的root密码设置为这个值example
-d          放在后台运行,不放后台他就放在前台了

docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
--link db:mysql     简单理解和db绑定一起
-p  8080:80           每个容器都是私有地址,这些就相当于DNAT转换,把原本访问8080的转到80
    8080是物理的地址,80是容器内部的端口
  • 容器运行的最低标准:必须具备一个前台进程
    应用启动运行有两种

    1.启动后就放入后台了,消失在前台了
    2.启动后放在前台,占用了。比如top,dd

  • 如果容器内部启动的进程是一个后台进程,容器会觉得没给他安排任务,容器就退出了,所以必须有一个放在前台的进程,不然一启动就自动退出

男孩子都是香香软软的小猪
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇