Docker与虚拟化的区别以及发展历程(一)

简介: docker容器基本概述1.什么是docker容器容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的文件系统、ip地址、主机名等。2.容器和虚拟化的区别Linux容器技术和虚拟化kvm的区别容器资源消耗少、更轻量、性能更高,只能运行在Linux环境

docker容器基本概述

1.什么是docker容器

容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的文件系统、ip地址、主机名等。

2.容器和虚拟化的区别Linux容器技术和虚拟化kvm的区别


容器资源消耗少、更轻量、性能更高,只能运行在Linux环境


kvm虚拟化:


需要硬件环境的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程:bios开机自检—根据bios设置的优先启动项启动—mbr引导–加载Linux内核—启动第一个进程)


容器虚拟化:


不需要硬件的支持依赖,不需要模拟硬件,公用宿主机内核,启动时间秒级(没有开机启动流程,像是运行一个Linux命令,秒级启动)

image.pngkvm解决了硬件和操作系统之间的依赖


kvm有独立的虚拟磁盘,xml配置文件


docker解决了软件和操作系统环境之间的依赖,能够让独立服务或应用程序在不同的环境中得到相同的运行结果


docker镜像有自己的文件系统,共同物理机磁盘空间


docker容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任务地方以相同的方式运行,开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能在生产系统的虚拟机上运行


总结:


1)与宿主机使用同一个内核,性能损耗小


2)不需要指令级模拟


3)容器可以在CPU核心的本地运行命令,不需要任何专门的解释机制


4)避免了虚拟化和系统之间调用替换的复杂性


5)轻量级隔离,在隔离的同时还共共享机制,以实现容器和宿主机的资源共享

3.容器技术的发展过程

3.1.chroot技术

chroot技术,新建一个子系统,拥有自己完整的系统文件

做一个简单的chroot技术

1.下载一个fedora的目录文件模拟一下
https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/fedora/32/amd64/default/20200613_20%3A33/rootfs.tar.xz
[root@nfs ~]# tar xf rootfs.tar.xz -C fedora/
[root@nfs ~]# chroot fedora/

3.2.Linux容器lxc


Linux容器(lxc)Linux container(namespace命名空间,环境隔离及cgroup)


**命名空间:**命名空间起到一个分类的作用,比如多个脚本一起使用时可能会存在相同的函数名,这时就可以用命名空间来区分,例如name1.aa() name2.aa()name就是命名空间


cgroups:限制一个进程能够使用的资源,比如内存、CPU、硬盘io

3.2.1安装lxc

[root@ansible ~]# yum  -y install lxc*
[root@ansible ~]# yum  -y install libcgroup*
[root@ansible ~]# yum  -y install bridge-utils*

3.2.2.配置lxc网络环境

桥接网卡

[root@ansible ~]# echo 'TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=virbr0' > /etc/sysconfig/network-scripts/ifcfg-ens33
[root@ansible ~]# echo 'TYPE=Bridge
BOOTPROTO=static
NAME=virbr0
DEVICE=virbr0
ONBOOT=yes
IPADDR=192.168.81.210
NETMASK=255.255.255.0
GATEWAY=192.168.81.2
DNS1=192.168.81.2
> /etc/sysconfig/network-scripts/ifcfg-virbr0

3.2.3.启动lxc

[root@ansible ~]# systemctl start cgconfig
[root@ansible ~]# systemctl start lxc

3.2.4.安装lxc容器

第一种方式

[root@ansible ~]# lxc-create -t download -n centos6 -- --server 
s -d centos -r 7 -a amd64
参数解释
-t  指定模板
-n  容器名称
--server  容器来源
-d  操作系统类型
-r  操作系统版本
-a  操作系统位数
也可以不加后面的参数进入交互式
[root@ansible ~]# lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images
Distribution: centos
Release: 7
Architecture: amd64

第二种方式

[root@ansible ~]# lxc-create -t centos -n centos-test
直接根据当前操作系统安装一个一摸一样的操作系统,默认最小安装

3.2.4.使用lxc容器

1)查看安装的容器
容器默认安装在/var/lib/lxc目录
[root@ansible ~]# ls /var/lib/lxc/
centos6  centos-test  my-container
2)修改密码
[root@ansible ~]# chroot /var/lib/lxc/centos6/rootfs/ passwd
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
3)启动容器
[root@ansible ~]# lxc-start -n centos6
4)后台启动
[root@ansible ~]# lxc-start -d -n centos6 
5)通过attach连接
[root@ansible ~]# lxc-attach -n centos6
[root@centos ~]# 
6)克隆
[root@ansible ~]# lxc-clone -o centos7 -n centos7_kl
[root@ansible ~]# ls /var/lib/lxc/
centos  centos6  centos7  centos7_kl  my-container
7)删除容器
[root@ansible ~]# lxc-stop -n centos6
[root@ansible ~]# lxc-destroy -n centos6
7)完整模式
[root@ansible ~]# lxc-start -d -n centos7 
[root@ansible ~]# lxc-attach -n centos7
[root@centos7 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fe:5c:f3:dc:f0:96 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.81.135/24 brd 192.168.81.255 scope global dynamic eth0
       valid_lft 1745sec preferred_lft 1745sec
    inet6 fe80::fc5c:f3ff:fedc:f096/64 scope link 
       valid_lft forever preferred_lft forever
目录
打赏
0
0
0
0
192
分享
相关文章
自学软硬件第755 docker容器虚拟化技术youtube视频下载工具
docker容器虚拟化技术有什么用?怎么使用?TubeTube 项目使用youtube视频下载工具
Kubernetes和Docker有什么区别
【10月更文挑战第18天】Kubernetes和Docker有什么区别
Docker、containerd、CRI-O 和 runc 之间的区别
通过理解这些组件的角色和功能,可以更好地选择和配置容器环境,以满足特定的需求和应用场景。
118 25
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
947 11
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
464 19
LXD如何使用,跟Docker的区别都有什么?优点和缺点都有什么?
【10月更文挑战第28天】LXD如何使用,跟Docker的区别都有什么?优点和缺点都有什么?
585 1
docker与containerd镜像获取及导出导入的区别与注意事项(报错信息:ctr: content digest sha256........ac47: not found)
docker与containerd镜像获取及导出导入的区别与注意事项(报错信息:ctr: content digest sha256........ac47: not found)
336 2
云计算和虚拟化有什么区别
云计算和虚拟化有什么区别
428 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等