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
目录
相关文章
|
6月前
|
应用服务中间件 Linux nginx
直接部署nginx和在docker里面部署nginx性能上有区别吗
直接部署nginx和在docker里面部署nginx性能上有区别吗
195 0
|
7月前
|
Cloud Native 虚拟化 云计算
《Docker基础知识解析:容器与虚拟化的区别与优势,选择最佳方案优化云计算应用》
《Docker基础知识解析:容器与虚拟化的区别与优势,选择最佳方案优化云计算应用》
132 0
|
3天前
|
监控 测试技术 虚拟化
Docker的介绍及与传统虚拟化技术的区别
Docker是开源的容器化平台,用于构建、分发和运行容器化应用。它包含Docker镜像(只读模板)、容器(运行实例)和引擎(运行时环境)。Docker提供灵活性、轻量级、隔离性和可扩展性,便于应用在不同环境一致运行。其拥有活跃的开源生态系统和丰富的资源。
|
14天前
|
Docker 容器
docker build -t和docker build -f区别
参数用于指定要使用的Dockerfile的路径,允许你在不同的位置使用不同的Dockerfile来构建镜像。
26 0
|
17天前
|
虚拟化 Docker 容器
【Docker】Docker容器和虚拟机的区别是什么?
【4月更文挑战第20天】【Docker】Docker容器和虚拟机的区别是什么?
|
1月前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
34 0
|
7月前
|
存储 持续交付 虚拟化
Docker 基础知识解析:容器与虚拟化的区别与优势
Docker 基础知识解析:容器与虚拟化的区别与优势
346 0
|
7月前
|
Go 虚拟化 云计算
Docker 基础知识解析:容器与传统虚拟化对比:资源利用、启动时间、隔离性和部署效率
Docker 基础知识解析:容器与传统虚拟化对比:资源利用、启动时间、隔离性和部署效率
199 0
|
5月前
|
Docker 容器
Dockerfile 与 Docker Compose区别
用途: Dockerfile 用于定义单个容器的构建过程。它包含了一系列指令,每个指令都代表容器构建过程中的一个步骤。这些步骤包括从基础镜像中构建、安装依赖、拷贝文件、设置环境变量等操作。 语法: Dockerfile 是一个文本文件,其中包含一系列 Docker 指令。每个指令都会生成一个新的镜像层。常见的指令包括 FROM(指定基础镜像)、RUN(执行命令)、COPY(拷贝文件)、EXPOSE(暴露端口)、CMD(设置容器启动时执行的命令)等。 灵活性: Dockerfile 提供了灵活的方式来定义容器构建过程,允许用户精确地控制容器的组件和配置。 使用场景: Dockerfile 适用于
71 1