docker容器基本概述
1.什么是docker容器
容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的文件系统、ip地址、主机名等。
2.容器和虚拟化的区别Linux容器技术和虚拟化kvm的区别
容器资源消耗少、更轻量、性能更高,只能运行在Linux环境
kvm虚拟化:
需要硬件环境的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程:bios开机自检—根据bios设置的优先启动项启动—mbr引导–加载Linux内核—启动第一个进程)
容器虚拟化:
不需要硬件的支持依赖,不需要模拟硬件,公用宿主机内核,启动时间秒级(没有开机启动流程,像是运行一个Linux命令,秒级启动)
kvm解决了硬件和操作系统之间的依赖
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