关于容器和容器技术的发展简单了解
容器是什么
容器是一个基础工具,泛指任何可以用于容纳其它武平的工具,可以部分或者完全封闭,被用于容纳,储存,运输物品。无头可以被放置在容器中,而容器则可以保护内容物。
瓶、罐、箱、篮、桶、袋、等
it中为什么用容器
我们则是借助容器的这个思维来解决我们it工作中的实际问题。
比如:如下图,我有一个物理服务上面有一个init为1的主进程(大家都知道对linux服务而言pid为1的进程是init的进程),而以这个init为1的进程派生出了python、java、php三个进程器pid号分别是2.3.4 这也就意味着我们这个服务器上其实有三个业务程序,它们在同一台服务器下的同一个操作系统心下问下会遇到进程和进程之间相互影响的问题,因为没有做到隔离。
这时我们想想办法把三个进程放在三个容器里,让它们做到互不影响互不干扰,
为了完成上面的需求,
办法一:::
最早运用虚拟话的技术已经能够完美的解决了、如图2
有个物理服务器server和服务器的操作系统Host OS,上面在跑一个虚拟化的中间层Hypervisor,由中间层可以虚拟出上面的两个虚拟机即A 那个一半,和B那一半。。而在虚拟机A上面需要装一个Guest OS操作系统(来宾操作系统)在其上有程序依赖的Bins/Libs (Bins二进制应用,Libs所依赖的链接库,,如python你要装python环境)
办法二::
按照方法一方式,安装一个程序需要先安装操作系统,有点得不偿失
于是便想出了容器技术,如图三
运用docker engine 链接到server上不需要在安装为程序的系统了。
那么我们应该让应用A和B在哪些层次上隔离呢,看下面的表格,图 4
在操作系统上是通过名称空间namespace来实现的,下面的6个维度的隔离才说明应用A和B是隔离的
网络设备指的是网卡需要时相互独立的
端口是应用A监听80端口,那么应用B也能监听80端口
应用A调用的内存应该和B是隔离的不相同
应用AB都应该有自己独立的文件系统
AB应该有自己独立的主机名和主机域不一样
。玩容器centos的操作系统要在3.8以上
探索容器的发展史
下面是容器化的探索图
简史看上图或参考相关问题:https://zhuanlan.zhihu.com/p/358548091
https://www.cnblogs.com/alisystemsoftware/p/13826163.html
容器的哲学理念是:一次构建到处使用
docker容器的介绍
- Docker基于容器技术的轻量级虚拟化解决方案
- Docker是容器引擎,把LInux的cgroup、namespace等容器底层技术进行封装抽象为用户提供了创建和管理容器的便捷界面(包括命令行和API)
- Docker是一个开源项目,诞生于2013年初,基于Google公司推出的Go语言实现。
- 微软,红帽Linux,IBM,Oracle等主流IT厂商已经在自己的产品里增减对Docker的支持
- 相比其他早期的容器技术,Docker引入了一整套管理的生态系统,包括分层的镜像模型,荣琼注册库,友好的Rest API
如下图明显看到docker容器和虚拟机相比的图示。
对比容器和虚拟机的优略
运维最大的作用是能帮老板省下存利润。
docker的介绍安装方便
你若是有时间也可以去自己去写下引擎。
docker的安装
首先准备一台虚拟机
查看下虚拟机的内核版本完全可以安装docker
查看下它的版本
[root@hdss7-11 ~]# uname -a
Linux hdss7-11.host.com 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@hdss7-11 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@hdss7-11 ~]# systemctl stop firewalld
[root@hdss7-11 ~]# free -m
total used free shared buff/cache available
Mem: 3771 431 2880 18 458 3024
Swap: 3 0 3
[root@hdss7-11 ~]# mount /dev/cdrom /mnt
[root@hdss7-11 ~]# echo -e '[base]\nname=CentOS7.6\nbaseurl=file:///mnt\nenabled=1\ngpgcheck=0\n#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7'>/etc/yum.repos.d/local.repo
[root@hdss7-11 ~]#
安装一下bash源
[root@hdss7-11 ~]# cd /etc/yum.repos.d/
[root@hdss7-11 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/Centos-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2318 100 2318 0 0 9503 0 --:--:-- --:--:-- --:--:-- 9539
安装一下epel源
[root@hdss7-11 yum.repos.d]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/Centos-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2318 100 2318 0 0 14742 0 --:--:-- --:--:-- --:--:-- 14764
或者两个都用yum直接安装
下面查看下docker源
[root@hdss7-11 yum.repos.d]# yum list docker --show-duplicates
已加载插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
可安装的软件包
docker.x86_64 2:1.13.1-102.git7f2769b.el7.centos extras
docker.x86_64 2:1.13.1-103.git7f2769b.el7.centos extras
docker.x86_64 2:1.13.1-108.git4ef4b30.el7.centos extras
docker.x86_64 2:1.13.1-109.gitcccb291.el7.centos extras
docker.x86_64 2:1.13.1-161.git64e9980.el7_8 extras
docker.x86_64 2:1.13.1-162.git64e9980.el7.centos extras
docker.x86_64 2:1.13.1-203.git0be3e21.el7.centos extras
docker.x86_64 2:1.13.1-204.git0be3e21.el7 extras
docker.x86_64 2:1.13.1-205.git7d71120.el7.centos extras
docker.x86_64 2:1.13.1-206.git7d71120.el7_9 extras
docker.x86_64 2:1.13.1-208.git7d71120.el7_9 extras
[root@hdss7-11 yum.repos.d]# yum -y install epel-release
[root@hdss7-11 yum.repos.d]# yum -y install yum-utils
下面把阿里云上的docker-ce这个文件添加到了我们的yum仓库里面
[root@hdss7-11 yum.repos.d]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
下面是参看目前docker-ce的版本
[root@hdss7-11 yum.repos.d]# yum list docker-ce --show-duplicates
下面下载最新的docker引擎
[root@hdss7-11 yum.repos.d]# yum -y install docker-ce
[root@hdss7-11 yum.repos.d]# systemctl enbale docker
[root@hdss7-11 yum.repos.d]# systemctl enable docker
下面我们做一个docker引擎的配置
[root@hdss7-11 ~]# cd /etc/docker/
[root@hdss7-11 docker]# ll
总用量 4
-rw-------. 1 root root 244 8月 7 22:55 key.json
[root@hdss7-11 docker]# vi daemon.json
[root@hdss7-11 docker]# cat daemon.json
{
"graph": "/data/docker", ##docker的工作目录
"storage-driver": "overlay2", ##存储驱动我们用overlay2的驱动
"insecure-registries": ["registry.access.redhat.com","quay.io","hardor.od.com"], ##镜像仓库地址
"registry-mirrors": ["https://7lkjwk2y.mirror.aliyuncs.com"], ##所用到的镜像加速源
"bip": "172.7.11.1/24", ##docker网络地址
"exec-opts": ["native.cgroupdriver=systemd"], #启动的时候额外参数
"live-restore": true ##当docker容器引擎死掉的时候容器还能活着
}
yun仓库的配置和docker-ce的安装脚本
这个脚本可以用于纯净的刚通百度的服务器直接安装至docker-ce
[root@localhost ~]# cat yum_docker_install.sh
#!/bin/bash
yu (){
mount /dev/cdrom /mnt/
mkdir /etc/yum.repos.d/bak
cd /etc/yum.repos.d && \
mv C* bak/
mv /etc/yum.repos.d/bak/CentOS-Base.repo /etc/yum.repos.d
echo -e '[base]\nname=CentOS7.6\nbaseurl=file:///mnt\nenabled=1\ngpgcheck=0\n#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7'>/etc/yum.repos.d/local.repo
echo '/dev/cdrom iso9660 defaults 0 0' >>/etc/fstab
yum clean all
yum makecache
systemctl stop firewalld
systemctl disable firewalld
se_cnf="/etc/selinux/config"
find_key="SELINUX="
setenforce 0 &>/dev/null
sed -ri "/^$find_key/c${find_key}disabled" $se_cnf
result="`getenforce`"
if [ $result = Enforing ];then
echo "selinux关闭失败!"
exit 10
else
echo "selinux关闭成功!"
fi
}
docke (){
yum -y install yum-utils device-mapper-persistent-data lvm2 epel-release
cd /etc/yum.repos.d/
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker.service
systemctl enable docker.service
docker version
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://7lkjwk2y.mirror.aliyuncs.com"]
}
EOF
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
systemctl restart network
systemctl reload docker
systemctl restart docker
systemctl status docker
}
yu
docke