分类目录归档:未分类

CentOS7 安装Python3

CentOS7自带的是Python2,且yum使用的是python2,如果有些软件需要python3,那么就要想办法安装python3,又不影响yum的使用。

# 安装epel源,并安装python3,这个源里的不是最新版本,如果没有特别要求,就可以使用这个方法,否则要下载源码自己编译安装
yum install -y epel-release
yum install -y python3 python3-devel

# 备份原来的python命令软连接
mv /usr/bin/python /usr/bin/python2.bak
# 创建python命令到python3的软连接
ln -s /usr/bin/python3 /usr/bin/python

# 修改yum命令使用的python,因为python命令已经指向3,yum不支持,修改首行
vi /usr/bin/yum
# 原来的首行
#!/usr/bin/python
# 修改后的首行
#!/usr/bin/python2

vi /usr/libexec/urlgrabber-ext-down
# 原来的首行
#!/usr/bin/python
# 修改后的首行
#!/usr/bin/python2
# 升级pip
pip3 install --upgrade pip

# 安装docker-compose
pip3 install docker-compose

群晖使用macvlan为虚拟机分配独立IP

  1. 启用Open vSwitch 。路径:控制面板-网络-网络界面-管理-Open vSwitch 设置
  2. ssh登录,ip addr 查看ovs_开头的IP,如ovs_eth0,如果存在可以确认开通成功
  3. 创建网络
docker network create -d macvlan --subnet=192.168.123.0/24 --ip-range=192.168.123.48/28 --gateway=192.168.123.1 -o parent=ovs_eth1 macv

创建容器

#通过macvlan 启动docker,使用命令行可以指定IP,可视化界面中可以选择网络但是无法指定IP,下次启动时可能会变,所以还是通过命令行指定为好
docker run -d --name=nginx-1 --net=macv --ip=192.168.123.49 -v /volume1/docker/nginx:/etc/nginx/conf.d nginx:latest

启动容器后,macvlan可以和局域网内的其他机器互相访问,但是就是无法访问宿主机,这个时候需要执行如下命令:

## vi /usr/local/bin/macvlan_start.sh
# 创建一个名称为macv_bridge的网桥
ip link add macv_bridge link ovs_eth1 type macvlan mode bridge
# 给macv_bridge指定一个IP
ip addr add 192.168.123.47 dev macv_bridge
# 启动 macv_bridge
ip link set macv_bridge up
# 创建路由连接子网
ip route add 192.168.123.48/28 dev macv_bridge

如果要恢复网络需要执行相反的命令:

## vi /usr/local/bin/macvlan_stop.sh
# 删除路由
ip route del 192.168.123.48/28 dev macv_bridge || true
# 停用网桥
ip link set macv_bridge down || true
# 删除网桥IP
ip addr del 192.168.123.47/32 dev macv_bridge || true
# 删除网桥
ip link del macv_bridge || true
# 以上两个文件加执行权限
chmod +x /usr/local/bin/macvlan_start.sh
chmod +x /usr/local/bin/macvlan_stop.sh

想要每次开机自动执行,需要编辑成一个服务:

vi /usr/local/lib/systemd/system/macvlan.service

[Unit]

Description=Macvlan shim to allow docker to route to host

# After=pkgctl-Docker.service

# BindsTo=pkgctl-Docker.service

ReloadPropagatedFrom=pkgctl-Docker.service

PartOf=pkgctl-Docker.service

[Service]

Type=oneshot

ExecStart=/bin/bash /usr/local/bin/macvlan_start.sh

ExecStop=/bin/bash /usr/local/bin/macvlan_stop.sh

RemainAfterExit=yes

Restart=no

[Install]

WantedBy=pkgctl-Docker.service
systemctl daemon-reload
# 设置服务自动启动
systemctl enable macvlan

以后只要macvlan.service在运行中,就会检测docker服务运行状态。当docker服务启动完成后,macvlan.service服务会执行start脚本。当docker服务关闭后,macvlan.service服务会执行stop脚本。