栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker容器基础入门

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker容器基础入门

文章目录
  • 容器相关概念
  • CGroups
    • CGroups简介
    • CGroups功能介绍
  • LXC
    • LXC简介
    • LXC的安装
    • LXC的使用
  • docker
    • docker工具简介
    • docker工作原理
    • docker工具的改进
    • docker工作方式

容器相关概念
  • 基本概念
    容器是一种基础工具;泛指任何可以用于容纳其他物品的工具,被用于容纳、储存、运输物品,人类使用容器的历史悠久,容器的表现形式也很多,例如:集装箱,背包,瓶罐,箱篮等。

    而我们业务中实际使用的容器也是可以实现容纳,存储,运输等功能的。

  • 传统虚拟化与容器的区别

    传统虚拟化指的就是虚拟机,系统的运行本身就需要占用资源,当需要管理多项进程与应用时,可能需要用到多台虚拟机,随着业务量的增加,虚拟机系统占用的资源会越来越多,负载也会越来越大。

    而容器就可以很好的解决这一点,容器占用的资源类似于一项服务,通过服务来管理进程与应用,相对于系统所占用的资源,容器的资源占用消耗会少很多,一台服务器可以运行成千上百个容器,而传统虚拟化很难做到这一点。

  • 虚拟化相关概念
    主机级虚拟化 :利用虚拟机来运行应用服务。主机级虚拟化又分为全虚拟化和半虚拟化,全虚拟化在真机安装虚拟化软件并安装系统,半虚拟化是指在系统上装一个虚拟机软件,而后在软件内再装一个虚拟机。

  • 容器分离开的资源有:
    主机名域名,用户(user),文件系统树(mount)和进程树(pid),共享(ipc),进程(pid),网络(tcp/ip协议栈,ip地址)

  • 容器技术的溯源
    最早的容器技术可追溯至1982年Unix系列的chroot工具,此工具至今依然存在且被支持。

  • Namespaces命名空间

    命名空间是Linux内核特性,每个容器都拥有自己的命名空间,运行其中的应用都像是在独立的操作系统中运行一样。命名空间相互分离,保证了容器间彼此互不影响。

namespaces系统调用参数隔离内容内核版本
UTSCLONE_NEWUTS主机名和域名2.6.19
IPCCLONE_NEWIPC信号量、消息队列和共享内存2.6.19
PIDCLONE_NEWPID进程编号2.6.24
NetworkCLONE_NEWNET网络设备、网络栈、端口等2.6.29
MountCLONE_NEWNS挂载点(文件系统)2.4.19
UserCLONE_NEWUSER用户和用户组3.8

centos7及以上系统均可支持上述功能。

[root@rookie ~]# uname -r
4.18.0-365.el8.x86_64

CGroups CGroups简介

控制组(CGroups)同样也是Linux内核特性,前面讲到的名称空间,也是CGroups创建出来的。CGroups通过控制多个容器的资源分配,避免容器们同时运行时竞争系统资源,保证系统稳定。控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制。

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

CGroups功能介绍

具体来看,控制组提供如下功能:

①资源限制(Resource Limitting)——可以设定进程组内存限制的上限。一旦进程组使用内存达到上限,再申请内存,就会发出Out of Memory(内存溢出)警告;

②优先级设定(Prioritization)——通过设定优先级让一些组优先得到更多的CPU等资源的分配;

③资源审计(Accounting)——用来统计系统实际上把多少资源用到合适的目的上,可以使用cpuacct子系统记录某个进程组CPU的累计使用时间;

④隔离(Isolation)——为组隔离命名空间,这样一个组不会看到另一个组的进程、网络连接和文件系统;

⑤控制(Control)——组的挂起、恢复和重启等操作。

  • 安装Docker后,我们可以在/sys/fs/cgroup/memory/docker/目录下看到对Docker组应用的各种限制项。我们可以通过写入limit限制文件值修改Docker限制的应用资源。
LXC LXC简介

LXC(LinuX Container)把容器技术做得更加简单易用,将一系列容器功能整合为工具包,从而降低容器技术的使用难度。

LXC虽然极大地简化了容器技术的使用,但我们必须要学会LXC的一组命令工具。就复杂程度来说,比起直接通过内核调用来使用容器也没降低多少;且由于内核的创建都是通过命令来实现的,通过批量命令实现数据迁移并不容易。其隔离性也没有虚拟机那么强大。

后来就出现了docker,所以从一定程度上来说,docker就是LXC的增强版

LXC的安装
  1. LXC的安装包在CentOS的epel源有提供的,使用官网的epel源需要安装一个软件包
[root@rookie ~]#yum -y install epel-release        #这个软件包里包含epelyum源和GPG的配置

2.安装LXC软件包和依赖包

[root@rookie ~]#yum -y install lxc lxc-templates bridge-utils lxc-libs libcgroup libvirt
lxc           #主程序包
lxc-templates #lxc的配置模板
bridge-utils  #网桥管理工具
lxc-libs      #lxc所需的库文件
libcgroup     #cgroup是为Linux内核提供任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。
libvirt       #管理Linux的虚拟化功能所需的服务器端守护程序。 需要针对特定驱动程序的管理程序。

  1. 服务启动与检查
[root@rookie ~]# systemctl start lxc
[root@rookie ~]# systemctl start libvirtd
[root@rookie ~]# systemctl status lxc
● lxc.service - LXC Container Initialization and Autoboot Code
   Loaded: loaded (/usr/lib/systemd/system/lxc.service; disabled; vendor preset: disab>
   Active: active (exited) since Sat 2022-04-23 16:41:50 CST; 9min ago
     Docs: man:lxc-autostart
           man:lxc

  //检查配置
[root@rookie ~]# lxc-checkconfig 
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-4.18.0-365.el8.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Warning: newuidmap is not setuid-root
Warning: newgidmap is not setuid-root
Network namespace: enabled

--- Control groups ---
Cgroups: enabled

Cgroup v1 mount points: 
/sys/fs/cgroup/systemd
/sys/fs/cgroup/memory
/sys/fs/cgroup/perf_event
/sys/fs/cgroup/devices
/sys/fs/cgroup/blkio
/sys/fs/cgroup/net_cls,net_prio
/sys/fs/cgroup/freezer
/sys/fs/cgroup/rdma
/sys/fs/cgroup/cpuset
/sys/fs/cgroup/cpu,cpuacct
/sys/fs/cgroup/pids
/sys/fs/cgroup/hugetlb

Cgroup v2 mount points: 


Cgroup v1 clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled, not loaded
Macvlan: enabled, not loaded
Vlan: enabled, not loaded
Bridges: enabled, loaded
Advanced netfilter: enabled, loaded
CONFIG_NF_NAT_IPV4: missing
CONFIG_NF_NAT_IPV6: missing
CONFIG_IP_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, loaded
CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded
FUSE (for use with lxcfs): enabled, loaded

--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities: 

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig


LXC的使用
  1. 创建虚拟机
// 查看当前系统中可用的LXC模板容器
[root@rookie ~]# ls /usr/share/lxc/templates/
lxc-busybox  lxc-download  lxc-local  lxc-oci
  1. 创建LXC主机
[root@rookie ~]# lxc-create -t centos -n xieyanxin01
lxc-create: xieyanxin01: utils.c: get_template_path: 943 No such file or directory - bad template: centos
lxc-create: xieyanxin01: lxccontainer.c: do_lxcapi_create: 1794 Unknown template "centos"
lxc-create: xieyanxin01: tools/lxc_create.c: main: 331 Failed to create container xieyanxin01
//配置文件 没写好 卡壳了

docker docker工具简介

docker并不是容器,而是容器技术的一个前端工具,容器作为内核技术,docker把这项技术的使用得以简化,使之普及。

docker工作原理

LXC的不便之处在于:①很难进行大规模创建容器,②很难在另一台主机上复刻一个完全相同的容器,而docker就是从这方面着手去找解决方案。
所以docker的早期版本,核心就是一个LXC,通过对LXC进行二次封装,做一个容器管理引擎,但docker在创建容器时,不再是像LXC一样用模板去现场安装,而是事先通过一种类似镜像技术,就像KVM,将一个操作系统打包成一个镜像文件,然后将这个镜像拷贝到目标主机上直接部署启动。

那么什么是镜像文件呢?docker把一个操作系统用户空间需要用到的所有组件,事先准备、编排好,然后整体打包成一个文件,这个文件我们称其为镜像文件(image)。

docker的镜像文件是放在一个集中统一的互联网仓库中的,把一些人们常用的镜像文件放在互联网仓库中。比如最小化的centos系统,有时我们需要在操作系统上安装一些应用,比如nginx,我们就可以在一个最小化的centos系统中安装一个nginx,然后将其打包成镜像,将其放在互联网仓库中,当人们想启动一个容器的时候,docker会到这个互联网仓库中去下载我们需要的镜像到本地,并基于镜像来启动容器。

docker工具的改进

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

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

docker工作方式

为了更好管理容器的使用,docker采取一个用户空间只跑一个业务进程的方式,在一个容器内只运行一个进程。比如我们要在一台主机上安装一个nginx和一个tomcat,那么nginx就运行在nginx的容器中,tomcat运行在tomcat的容器中,二者用容器间的通信逻辑来进行通信。

  • docker的优劣
    ①管理便捷——因为容器之间相互独立,删除一个容器不会影响其他容器;
    ②分发容易 ——真正意义上一次编写到处运行,比java的跨平台更彻底;
    ③部署简单——无论底层系统是什么,只要有docker,直接run就可以了;
    ④层级清晰——分层构建,联合挂载;

  • 相对于LXC的优势
    LXC是把一个容器当一个用户空间使用,当虚拟机一样使用,里面可以运行N个进程,这就使得我们在容器内去管理时极为不便,而docker用这种限制性的方式,在一个容器中只运行一个进程的方式,使得容器的管理更加方便。

  • docker存在的的劣势

资源占用较高——无论什么规模的容器数量,每个容器中都必须自带调试工具,比如ps命令。

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/830526.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号