docker和ovs使用

docker使用

1.docker拉取镜像并使用

直接使用pull命令拉取镜像时,拉取默认是docker官网镜像,由于当前网络环境,建议使用国内镜像源,通常可以在拉取的镜像前加上镜像源官网域名,如下:

这里写图片描述

下载之后,使用images命令可以查看已有的镜像

这里写图片描述

使用run命令测试运行一个容器

这里写图片描述

重新启动容器并进入该容器:

这里写图片描述

2.为方便以后对ubuntu的使用,我们将他的源更改到网易或阿里的源,(建议用阿里的吧,网易的有时候崩。。。)如下:

先apt-get update一下,然后下载一个vim,等会会修改文件

可以发现apt-get update并不完全成功,先不管,下个vim再说,(下载vim时我用校园网比较慢,换热点快很多)然后进入/etc/apt目录准备换源
之后先把原来的源文件保存,sudo cp sources.list sources.list.bak

再修改源文件,vim sourses.list,将原先的源注释,换以下列出的源,再apt-get update就很快,再apt-get upgrade一下

这里写图片描述

deb http://mirrors.163.com/ubuntu/ zesty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ zesty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ zesty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ zesty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ zesty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ zesty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ zesty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ zesty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ zesty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ zesty-backports main restricted universe multiverse



deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

之后对ubuntu可能还需要配置一些环境,比如安装python3.6,安装gcc,可自行百度安装,比较简单给两个参考

python3.6安装

gcc,g++安装

3.将容器保存为镜像,由于我们会重复使用配置好的容器,因此,可以将容器保存为镜像供以后重复使用。如下:
docker commit -a "作者名" -m "对镜像描述" 提交容器 生成镜像名

这里写图片描述

可以发现,新的镜像已经出现在镜像列表中。

4.docker自定义网络

1.docker的网络通信基于安装时新建的docker0网桥,可以与外网,本虚拟机以及其他虚拟机通信

2.在两台虚拟机上创建自定义网络,并为新建容器分配自定义网络下的ip地址,两台虚拟机分配不同网段,配置操作如下:

虚拟机1-ip:192.168.255.129 容器网段 10.0.30.0/24 容器ip:10.0.30.10

虚拟机1操作如下:

创建自定义网络,ifconfig可发现多出一个网桥

这里写图片描述

在该网段下创建一个容器,并进入容器查看ip,为设置的ip

这里写图片描述

这里写图片描述

这个容器可ping通两台虚拟机和外网

这里写图片描述

虚拟机2-ip:192.168.255.128 容器网段 10.0.50.0/24 容器ip:10.0.50.10

虚拟机2操作跟虚拟机1相同,注意ip分配不同,输入命令时注意修改

这时我们让虚拟机1上的容器ping虚拟机2上的容器,发现ping不通

这里写图片描述

解决方式为为两台虚拟机配置路由,先退出容器,之后:

虚拟机1如下:(注意是对方的虚拟机ip和网段ip)

这里写图片描述

虚拟机2如下:(注意是对方的虚拟机ip和网段ip)

这里写图片描述

然后再进入容器互ping容器即可ping通。

删除路由命令:ip route del –

删除docker自定义网络:docker network rm –

docker使用方式还有很多,自行百度

ovs安装

添加依赖:

这里写图片描述

这里写图片描述

yum -y install openssl-devel wget kernel-devel selinux-policy-devel python-sphinx
yum groupinstall "Development Tools"
新添加一个用户,并进入,在其中下载ovs源码:

这里写图片描述

wget http://openvswitch.org/releases/openvswitch-2.9.0.tar.gz
解压缩源码,并创建编译目录

这里写图片描述

tar xfz openvswitch-2.9.0.tar.gz
mkdir -p ~/rpmbuild/SOURCES
从spec文件中删除openvswitch-kmod的依赖包,并创建一个新的spec文件:

这里写图片描述

sed 's/openvswitch-kmod, //g' openvswitch-2.9.0/rhel/openvswitch.spec > openvswitch-2.9.0/rhel/openvswitch_no_kmod.spec
开始编译,会出现如下错误,然后按如下方法解决:

这里写图片描述

rpmbuild -bb --without check ~/openvswitch-2.9.0/rhel/openvswitch_no_kmod.spec
cp openvswitch-2.9.0.tar.gz rpmbuild/SOURCES
退出当前用户使用root:exit
安装编译生成的rpm文件:

这里写图片描述

yum localinstall /home/ovswitch/rpmbuild/RPMS/x86_64/openvswitch-2.9.0-1.x86_64.rpm
启动服务:systemctl start openvswitch.service
查看服务状态:systemctl -l status openvswitch.service

这里写图片描述

ovs-vsctl show命令验证

这里写图片描述

ovs+docker使用

编辑配置文件,打开centos网络包转发

vim /usr/lib/sysctl.d/50-default.conf
添加:net.ipv4.ip_forward=1
保存,重启网络服务:systemctl restart network

新建网桥,将物理网卡添加至网桥,启动网桥配置ip,设置路由

ovs-vsctl add-br br0
ovs-vsctl add-port br0 ens33
ip addr del 192.168.255.129/24 dev ens33
ip link set br0 up
ip addr add 192.168.255.129/24 dev br0
ip route add default via 192.168.255.2 dev br0

这里写图片描述

然后添加两个新端口做网关,并配置ip,之后可使用ovs-vsctl show查看

ovs-vsctl add-port br0 vlan10 -- set interface vlan10 type=internal
ip addr add 192.168.100.1/24 dev vlan10
ip link set vlan10 up

ovs-vsctl add-port br0 vlan20 -- set interface vlan20 type=internal
ip addr add 192.168.200.1/24 dev vlan20
ip link set vlan20 up

这里写图片描述

之后运行两个无网络docker容器

docker run -itd --name test1 --privileged --network=none newubuntu:1 /bin/bash
docker run -itd --name test2 --privileged --network=none newubuntu:1 /bin/bash

这里写图片描述

还需要下载一个工具:

wget http://github.com/openvswitch/ovs/raw/master/utilities/ovs-docker
chmod a+x ovs-docker

这里写图片描述

为容器分配ip:

./ovs-docker add-port br0 eth0 test1 --ipaddress=192.168.100.100/24 --gateway=192.168.100.1
./ovs-docker add-port br0 eth0 test2 --ipaddress=192.168.200.100/24 --gateway=192.168.200.1

这里写图片描述

进入其中一个容器,可查看ip,ping另一个容器可通:

这里写图片描述

这里写图片描述

恢复原来的网络,将br0删除即可,再重启网络服务

删除网桥:ovs-vsctl del-br br0

重启网络服务:service network restart

注:以上所有操作均在作者在网上搜集资料后,在个人电脑上实验成功,若读者实验时失败,可能由一些未知因素导致,可与作者联系。编写的教程可能由于疏忽出错,请与作者联系。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐