• docker容器基础入门


    传统服务部署方式

    手动部署-->脚本部署 (单服务机)

    新型自动化部署

    自动化部署(批量)

    1.容器

    容器:装东西的器皿

    特点:

    • 可完全封闭
    • 可移动
    • 可拆卸

    2.传统虚拟化和容器的区别

    虚拟化分类:

    • 主机级虚拟化
      • 全虚拟化
      • 半虚拟化
    • 容器级虚拟化

    容器分开的资源:

    • UTS主机名和域名
    • Mount文件系统挂载树
    • IPC
    • PID进程树
    • User
    • Network
    //查看内核
    [root@node0 ~]# uname -r
    4.18.0-193.el8.x86_64
    
    

    3.linux容器技术

    Linux容器其实并不是什么新概念。最早的容器技术可以追遡到1982年Unix系列操作系统上的chroot工具(直到今天,主流的Unix、Linux操作系统仍然支持和带有该工具)。

    4.Linux Namespaces

    命名空间(Namespaces)是Linux内核针对实现容器虚拟化而引入的一个强大特性。

    namespaces 系统调用参数 隔离内容 内核版本
    UTS CLONE_NEWUTS 主机名和域名 2.6.19
    IPC CLONE_NEWIPC 信号量、消息队列和共享内存 2.6.19
    PID CLONE_NEWPID 进程编号 2.6.24
    Network CLONE_NEWNET 网络设备、网络栈、端口等 2.6.29
    Mount CLONE_NEWNS 挂载点(文件系统) 2.4.19
    User CLONE_NEWUSER 用户和用户组 3.8

    5.CGroups(控制组)

    对共享资源进行隔离,限制,审计。

    CGroups限制资源有:

    • blkio:块设备IO
    • cpu:CPU
    • cpuacct:CPU资源使用报告
    • cpuset:多处理器平台上的CPU集合
    • devices:设备访问
    • freezer:挂起或恢复任务
    • memory:内存用量及报告
    • perf_event:对cgroup中的任务进行统一性能测试
    • net_cls:cgroup中的任务创建的数据报文的类别标识符

    控制组的功能有:

    • 资源限制
    • 优先级
    • 资源审计
    • 隔离
    • 控制

    安装docker后,通过修改该目录文件来限制docker应用资源

    [root@localhost ~]# ls /sys/fs/cgroup/memory/
    

    6.LXC(LinuXContainer)

    LXC(LinuX Container)把容器技术做得更加易用,把需要用到的容器功能做成一组工具,从而极大的简化用户使用容器技术的麻烦程度。

    由于需要学习LXC一系列的命令工具,且批量数据迁移困难隔离性差,普及难度也很大

    docker的出现则是优化版LXC

    7.docker基本概念

    容器技术的前端工具,docker将其简化并普及

    从操作系统功能上看,docker底层依赖的核心技术主要包括Linux操作系统的命名空间、控制组、联合文件系统和Linux虚拟网络支持。

    自docker 0.9版本起,docker除了继续支持LXC外,还开始引入自家的libcontainer,试图打造更通用的底层容器虚拟化库。如今的docker基本上都已经是使用libcontainer而非LXC了。

    项目封装镜像上传网络仓库-->下载本地-->基于镜像启动容器

    7.1docker工作方式

    docker采取在一个容器内只运行一个进程,比如我们要在一台主机上安装一个nginx和一个tomcat,那么nginx就运行在nginx的容器中,tomcat运行在tomcat的容器中,二者用容器间的通信逻辑来进行通信。

    docker的特点

    • 删除一个容器不会影响其他容器
    • 调试不便,占空间(每个容器中都必须自带调试工具,比如ps命令)
    • 分发容易,真正意义上一次编写到处运行,比java的跨平台更彻底
    • 部署容易,无论底层系统是什么,只要有docker,直接run就可以了
    • 分层构建,联合挂载

    ++在容器中有数据称作有状态,没有数据称作无状态。在容器的使用中,我们应以有状态为耻,以无状态为荣。数据不应该放在容器中,而应放置于外部存储中,通过挂载到容器中从而进行数据的存储。++

    8.docker容器编排

    为解决项目依赖关系安装顺序的问题,在docker基础上能将应用程序之间的依赖关系、从属关系、隶属关系等等反映在启动、关闭时的次序和管理逻辑中,这种功能被称为容器编排

    常见容器编排工具

    • machine+swarm(把N个docker主机当一个主机来管理)+compose(单机编排)
    • mesos(实现统一资源调度和分配)+marathon
    • kubernetes --> k8s
  • 相关阅读:
    oracle客户端服务端字符集-解决乱码
    ORA-04089: 无法对 SYS 拥有的对象创建触发器
    ORA-01109:数据库未打开(解决)
    系统重装
    mybatis实现多表联合查询
    hibernate实现多表联合查询
    GitHub搭建博客过程
    mybatis&Hibernate区别
    IDEA搭建ssm框架测试衍生出的问题The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:Developjdk7jdk1.7.0_79in;
    IDEA创建maven项目jar更新缓慢问题
  • 原文地址:https://www.cnblogs.com/fangxinxin/p/14446424.html
Copyright © 2020-2023  润新知