
一、基础知识
1、容器技术是什么?
-
1.1 是什么?
容器技术,指的是一种轻量级的虚拟化技术,而docker容器技术是现在比较主流的容器技术,容器的目的和虚拟机一样,都是为了创造“隔离环境”。但是它不像虚拟机那样采用操作系统级的资源隔离,容器采用的是进程级的系统隔离,当然也不像虚拟机那样受中间层的管理,它是直接运行在操作系统内核之上,并开辟出一个个的用户空间供给不同的用户使用的,所以说操作系统级别的虚拟化,它其实利用的是内核的 Cgroup 和 Namespace 特性,此功能完全通过软件实现。
-
1.2 如何理解?
这里我们可以将一个个的容器,简单的理解为港口上的一个个的“集装箱”,我们将不同的货物都封装到不同的集装箱里,由于是密封的,所以货物间不会受影响。而“容器封装”的过程我们也就可以想想成“集装箱打包”的过程了,是不是这样就不难理解了呢?

-
1.3 早期的容器技术
-
UNIX Chroot是一套“UNIX操作系统” 旨在将其root目录及其他子目录变更至文件系统内的新位置,且只接受特定进程的访问。
-
FreeBSD Jails是最早的容器技术之一,它由R&D Associates公司的Derrick T. Woolworth在2000年为FreeBSD引入。
-
Linux VServer是另外一种jail机制,它用于对计算机系统上的资源(如文件系统、CPU处理时间、网络地址和内存等)进行安全的划分。
-
Solaris容器相当于将系统资源控制与由分区提供的边界加以结合。
-
LXC是指LinuX Containers,它是第一个最完善的Linux容器管理器的实现方案,是通过cgroups和Linux命名空间实现的。
-
2、Docker技术实现?
-
Docker提供了一种可移植的标准化部署过程,使得规模化、自动化、异构化的部署成为可能,甚至是轻松简单的事情;而对于开发者来说,Docker提供了一种开发环境的管理方法,包括映像、构建、共享等功能。
-
Docker引入了整个管理容器的生态系统,这包括高效、分层的容器镜像模型、全局和本地的容器注册库、清晰的 REST API、命令行等。稍后的阶段,Docker推动实现了一个叫作Docker Swarm的容器集群管理方案。
-
Docker基于Linux的多项开源技术提供了高效、敏捷和轻量级的容器方案,并且支持在多种主流平台(PaaS)和本地系统上部署。
3、Docker的特点?
- 简单快捷
- 逻辑分类
- 快速高效
- 面向服务

4、Docker容器与虚拟机?

-
(1)与虚拟机相比,docker容器有什么优势?
-
更快速的交付和部署
-
更高的资源利用
-
更轻松的迁移和扩展
-
更简单的更新管理
-
-
(2)与虚拟机的区别与联系?
与虚拟机相比:
-
docker容器更快 --->不跟虚拟机那样启动至少需要1、2分钟,docker容器的启动和停止几乎是秒级实现的
-
docker容器对系统资源(systematic resources)的需求很少
比如说:“虚拟机安装,怎么说也得20个GB,而我们的docker容器是微量级的只需要几MB就行”并且“docker是没有中间层的资源占用”相对来说docker对资源的需求相对较少
同样的在PC上若是安装虚拟机只能安装10来个就不错了,但是如果是安装docker容器的话,上百个是完全没有问题的,要是PC的性能比较强的话,上千个也是可以实现的~
-
学习成本非常低 --->安装docker时不跟虚拟机的安装过程那么繁琐,不管用得着用不着配这配那的,所以学习成本非常低。
-
自动化创建和部署机制 --->docker通过dockerfile配置文件来灵活的自动化创建和部署机制,大大的提高了效率,同样的我们的虚拟机也可以实现,自动化创建和部署
-
-
(3)如何选择?
-
"docker" or "虚拟机"如何选?
通过上图的对比我们不难发现其实docker与虚拟机最大的区别点在于“隔离性”上
有人说过这么一段话:“世界其实是公平的,它不会偏袒任何不劳而获的人,也不会辜负任何执着.......“同样docker容器之所以它的启动速度、性能......等方面,正是容器是直接运行在操作系统的内核上的操作系统级别的虚拟化,不可避免的是容器与容器之间再怎么隔离也是无法做到绝对的隔离,它是”安全隔离”。
怎么理解安全隔离呢?形象的说也就是我们的容器遭到破坏的时候,并不是说docker容器之间,绝对隔离,其他容器不受一点的影响,它的安全机制是只保护我们docker容器中比较核心的部分,其他的容器还是会收到影响的。
而我们的虚拟机却不同,它是着重于实现虚拟机与虚拟机、虚拟机与主机之间绝对的隔离,这里的绝对隔离是指完全意义上的隔离,对于虚拟机来说,每一个VM都是一个个独立的主体,都有自己的网络,自己的声卡......因此,这就使得它的磁盘占用,对硬件资源的性能要求是比较高的......
因此,各有各的优势,docker与虚拟机之间并无优劣之分,只是对于同样的一个问题的两种不同的解决方案,docker还是虚拟机,如何选择?关键是看用户对隔离性有何要求。
-
以下便是docker的适用场景
-
使用Docker容器开发、测试、部署服务。由于Docker容器非常轻量化,所以本地开发人员可以构建、运行并分享Docker容器,容器可以在开发环境中创建,然后测试,最终进入生产环境。
-
创建隔离的运行环境。在很多企业应用中,同一服务的不同版本服务于不同用户,使用 Docker可以很容易地创建不同的生产环境来运行不同服务。
-
搭建测试环境。由于Docker的轻量化,开发者很容易利用Docker在本地搭建测试环境用来测试程序在不同系统上的兼容性,甚至是搭建集群部署测试。
-
构建多用户的平台及服务基础设施。
-
提供软件及服务应用程序。
-
高性能、超大规模的宿主机部署。
-
二、Docker的安装及部署
-
检查Centos的内核版本
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) -
添加内核转发参数
-
编辑配置文件/etc/sysctl.conf 并添加以下内容
[root@localhost ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0 -
重新加载sysctl.conf
[root@localhost ~]# sysctl -p net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.all.rp_filter = 0
-
-
清除本地防火墙规则
[root@localhost ~]# iptables -F [root@localhost ~]# iptables -X [root@localhost ~]# iptables -Z [root@localhost ~]# /usr/sbin/iptables-save # Generated by iptables-save v1.4.21 on Wed Nov 16 10:53:43 2022 *nat :PREROUTING ACCEPT [32:3659] :INPUT ACCEPT [1:52] :OUTPUT ACCEPT [28:2061] :POSTROUTING ACCEPT [28:2061] :OUTPUT_direct - [0:0] :POSTROUTING_ZONES - [0:0] :POSTROUTING_ZONES_SOURCE - [0:0] :POSTROUTING_direct - [0:0] :POST_public - [0:0] :POST_public_allow - [0:0] :POST_public_deny - [0:0] :POST_public_log - [0:0] :PREROUTING_ZONES - [0:0] :PREROUTING_ZONES_SOURCE - [0:0] :PREROUTING_direct - [0:0] :PRE_public - [0:0] :PRE_public_allow - [0:0] :PRE_public_deny - [0:0] :PRE_public_log - [0:0] -A PREROUTING -j PREROUTING_direct -A PREROUTING -j PREROUTING_ZONES_SOURCE -A PREROUTING -j PREROUTING_ZONES -A OUTPUT -j OUTPUT_direct -A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN -A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535 -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535 -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE -A POSTROUTING -j POSTROUTING_direct -A POSTROUTING -j POSTROUTING_ZONES_SOURCE -A POSTROUTING -j POSTROUTING_ZONES -A POSTROUTING_ZONES -o ens33 -g POST_public -A POSTROUTING_ZONES -g POST_public -A POST_public -j POST_public_log -A POST_public -j POST_public_deny -A POST_public -j POST_public_allow -A PREROUTING_ZONES -i ens33 -g PRE_public -A PREROUTING_ZONES -g PRE_public -A PRE_public -j PRE_public_log -A PRE_public -j PRE_public_deny -A PRE_public -j PRE_public_allow COMMIT # Completed on Wed Nov 16 10:53:43 2022 # Generated by iptables-save v1.4.21 on Wed Nov 16 10:53:43 2022 *mangle :PREROUTING ACCEPT [756:77619] :INPUT ACCEPT [756:77619] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [493:65988] :POSTROUTING ACCEPT [529:70244] :FORWARD_direct - [0:0] :INPUT_direct - [0:0] :OUTPUT_direct - [0:0] :POSTROUTING_direct - [0:0] :PREROUTING_ZONES - [0:0] :PREROUTING_ZONES_SOURCE - [0:0] :PREROUTING_direct - [0:0] :PRE_public - [0:0] :PRE_public_allow - [0:0] :PRE_public_deny - [0:0] :PRE_public_log - [0:0] -A PREROUTING -j PREROUTING_direct -A PREROUTING -j PREROUTING_ZONES_SOURCE -A PREROUTING -j PREROUTING_ZONES -A INPUT -j INPUT_direct -A FORWARD -j FORWARD_direct -A OUTPUT -j OUTPUT_direct -A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill -A POSTROUTING -j POSTROUTING_direct -A PREROUTING_ZONES -i ens33 -g PRE_public -A PREROUTING_ZONES -g PRE_public -A PRE_public -j PRE_public_log -A PRE_public -j PRE_public_deny -A PRE_public -j PRE_public_allow COMMIT # Completed on Wed Nov 16 10:53:43 2022 # Generated by iptables-save v1.4.21 on Wed Nov 16 10:53:43 2022 *security :INPUT ACCEPT [706:71434] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT

本文介绍了Docker的基础知识,包括容器技术的概念、Docker的实现方式、特点以及与虚拟机的区别。Docker提供了高效的容器管理,简化了部署和更新流程。文章还探讨了Docker与虚拟机的隔离性和资源利用率,并分享了Docker的安装和部署步骤。
最低0.47元/天 解锁文章
692

被折叠的 条评论
为什么被折叠?



