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
上一篇:Android Container 系列:大概步骤


下一篇:Docker容器