Linux运维之路


docker01_lxc

admin 2019-10-26 50浏览 0条评论
首页/正文
分享到: / / / /

docker容器

什么是容器

Linux容器是与系统其他部分隔离开的一系列进程,从另一个系统镜像运行,并由该镜像提供支持进程所需的全部文件(环境文件)。

Linux容器就是一个隔离的空间中,运行的进程,这个隔离的空间有着自己的根文件系统,自己的网络,主机名等.

容器镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。 来源:https://www.redhat.com/zh/topics/containers/whats-a-linux-container

容器是否是虚拟机?

虚拟化是让许多操作系统同时在一个系统上运行. 容器只能共享操作系统内核,将应用进程与系统其他部分隔离开.

"Linux容器需要内核支持 namespace和cgroup" namespace为容器提供空间隔离 cgroup容器提供硬件资源限制

容器与虚拟化的区别

Linux容器技术与kvm虚拟化技术的区别? kvm: kvm和VMware类似,需要模拟硬件,可以运行不同操作系统,启动时间为 "分钟级别" 容器虚拟化: 不需要硬件支持,不需要模拟硬件,公用宿主机内核. 没有开机启动流程.秒级启动.

总结:

  1. docker与宿主机共用一个内核,性能损耗小.
  2. 容器可以在CPU核心的本地运行命令,不需要任何专门的解释机制
  3. 不需要指令级的模拟.
  4. 避免了准虚拟化和系统调用,替换的复杂性.
  5. 轻量级的隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享.

容器的发展过程

cgoup安装, 体验早期容器.

参考资料: https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/

cgoup下载链接:https://pan.baidu.com/s/1t0FGEpGkTEf-gT-k-NWatQ 提取码:o70l

上传 rootfs.tar.xz 到 /opt 目录

[root@node1 opt]# ls
rootfs.tar.xz

解压到 /opt/rootfs/ 目录
[root@node1 opt]# tar xf rootfs.tar.xz -C /opt/rootfs/

进入这个rootfs系统:

[root@node1 opt]# chroot /opt/rootfs
root@node1:/#         <-- 这样就进入了这个chroot系统

进入系统后发现命令会不可用

[root@node1 opt]# chroot /opt/rootfs
root@node1:/# ls
bash: ls: command not found
原因: 没有环境变量

rootfs添加环境变量:

export PATH='/bin:/usr/local/sbin:/us/local/bin:/usr/sbin:/usr/bin:/root/bin'

再次测试命令可用性:

root@node1:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

命令已经可用了

rootfs现容器上网配置:

lxc默认hosts文件没有解析,所以需要上网的话,只要添加dns服务
但是你通过 ls -al 会发现这是一个 link 文件. 

删除link文件,重新创建一个/etc/resolv.conf 文件,并添加dns
nameserver 223.5.5.5

结果:
root@node1:/# cat /etc/resolv.conf
nameserver 223.5.5.5       ### 这是文件里的内容

测试:
root@node1:/# ping baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79: icmp_seq=1 ttl=50 time=8.86 ms    ## 网络正常

lxc容器

linux容器(lxc) linux container(namespaces 网络命名空间 隔离环境 及cgroups 资源限制)

lxc安装需要epel源的支持,需要添加epel源

yum install epel-release.noarch -y wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

lxc安装

##安装lxc
yum install lxc-* -y
yum install libcgroup* -y
yum install bridge-utils.x86_64 -y

lxc启动

 systemctl start lxc
 systemctl status lxc cgconfig

lxc 桥接网卡

##桥接网卡
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0


[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.0.200
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=223.5.5.5

##修改lxc默认配置,注意噢 这里的网段,如果你是在阿里云配置的,需要指定当前网段网关
##不要随便指定,不知道就去看一下,不然配置错了就无法连接到服务器了,此时就要登录阿里云后台配置
vi /etc/lxc/default.conf
修改第2行为:lxc.network.link = br0

##启动cgroup
systemctl start cgconfig.service

##启动lxc
systemctl start lxc.service

创建lxc容器

方法1. 从网上下载
lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64

lxc-create -t download -n centos7 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 7 -a amd64

方法2(重点) test名字可以随意取:
lxc-create -t centos -n test
lxc-create -t centos -n test1

这样创建后,会一步一步询问.

注意第一次启动会下载容器运行的镜像和配置

下载lxc容器包

lxc源地址: https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/ubuntu/trusty/amd64/default/ 用于下载rootfs.tar.xz

[root@node1_docker opt]# cd /opt       #rootfs.tar.xz包上传到这里
[root@node1_docker opt]# ls
rootfs  rootfs.tar.xz

解压包:

[root@node1_docker opt]# mkdir ubuntu
[root@node1_docker opt]# tar xf rootfs.tar.xz -C ubuntu/

检查:

[root@node1_docker opt]# cd ubuntu/
[root@node1_docker ubuntu]# pwd
/opt/ubuntu
[root@node1_docker ubuntu]# ls   
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#注意: rootfs是一个独立的精简版Linux系统.

使用lxc容器

进入rootfs系统: chroot /opt/ubuntu/

[root@node1_docker ubuntu]# chroot /opt/ubuntu/
root@node1_docker:/# 

默认没有配置环境变量,无法使用命令,所以需要配置环境变量

export PATH='/bin:/usr/local/sbin:/us/local/bin:/usr/sbin:/usr/bin:/root/bin'

不配置无法使用命令

网络配置:

进入后,没有网络,实际上是没有dns,所以需要配置dns
但是这里有个坑, 你会发现 /etc/resolv.conf 是一个软连接文件.
root@node1_docker:/# ll -la /etc/resolv.conf
lrwxrwxrwx 1 root root 29 Aug 20  2018 /etc/resolv.conf -> ../run/resolvconf/resolv.conf


发生这个错误,解决办法:
1. 删除:  rm -f /etc/resolv.conf
2. 创建:  touch /etc/resolv.conf
3. 配置:   vim /etc/resolv.conf
4. 写入内容:  
nameserver 223.5.5.5
5. 保存后尝试ping 一个IP或者网站看看,这时网络已经通了

root@node1_docker:/# ping baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79: icmp_seq=1 ttl=50 time=8.84 ms
64 bytes from 39.156.69.79: icmp_seq=2 ttl=50 time=8.73 ms

此时lxc容器已经可以正常访问网络了

阿里云配置lxc注意:

阿里云需要配置 br0 要指定当前创建的网段 网关地址 我当时配置的是 192.168.0.0网段,但是我配置的IP 是10.0.0.x网段.所以我配置完成后,网络无法出去 因此我也无法连接到阿里云服务器了. 这是一个坑... 需要注意

lxc容器密码配置

 chroot /var/lib/lxc/centos6/rootfs passwd

lxc容器进入:

[root@node1_docker ubuntu]# lxc-create -t centos -n 6

或者:
lxc-start -n centos7

这一步会自动下载一个centos6容器进行安装并启动,

lxc运行镜像后设置密码

配置完成后设置密码:

chroot /var/lib/lxc/6/rootfs passwd

启动容器进入:

#进去了就无法退出了.这种形式进去.
[root@node1_docker ubuntu]# lxc-start -n centos -n 6

停止容器

[root@node1_docker ubuntu]# lxc-stop -n centos6
kill -9 [ID]

怎么正常停止 lxc 容器???

lxc到此为止...

最后修改:2019-10-26 18:22:49 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

评论列表

还没有人评论哦~赶快抢占沙发吧~