Linux之Docker虚拟化技术(二)
一、创建docker-service服务
在/usr/lib/systemd/system目录下创建服务文件,这里可能会出现环境问题报错,我这里就做了一个软链接映射到docker启动目录
其修改的配置文件如下
[Unit]
Description=Docker server daemon
Documentation=man:docker(8) man:sshd_config(5)
After=network.target docker-keygen.target
Wants=docker-keygen.target[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H 0.0.0.0:2375 -H unix:///var/run/docker.sock
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s[Install]
WantedBy=multi-user.target
二、docker网络模式(四种)
host模式
宿主机和容器共用一套端口,IP地址相同,端口范围也仅限在1~65535范围
[root@localhost ~]# docker run -itd --name=vm01 --net=host rockylinux-ssh:latest
87b25827ac3ed0c55d2a921e4173baf170d0b6ec389f5d25512fe148cf183003
[root@localhost ~]#
container模式
所创建的虚拟机和你创建的容器为同一个IP
首先我这里创建了一台虚拟机的IP是在虚拟网桥docker0分配的
## 创建虚拟机
docker run -itd --name=vm0 rockylinux-ssh:latest
根据创建的虚拟机做一个container网络模式的映射
[root@localhost ~]# docker run -itd --name=vm1 --net=container:vm0 rockylinux-ssh:latest
7d7b6ffd62e70a61ac76c6a77e70fd03e7ed7d37c09944f9748e7bccc4ca8a99
下面我们是根据container模式创建的虚拟机,它和我们创建的vm0容器的ip、网关掩码都是一样的
None模式(自定义ip地址 静态IP )
虚拟机内的网卡IP不会被分配,需要手动进行配置,常用pipework进行手动配置
[root@localhost ~]# docker run -itd --name=vm2 --net=none rockylinux-ssh:latest
dddf11283b2057252abb70494cf6405c62e341fb1fcbd3a89f917fca07d9448f
查看容器内网卡信息
这里的自定义网卡信息我们通常会使用pipework工具来自定义设置
## 安装pipework工具
git clone https://github.com/jpetazzo/pipework## 通常情况下我们会把他放在/usr/bin目录下## 为了防止权限无法访问我们通常会个给它授予权限
[root@localhost ~]# chmod +x /usr/bin/pipework
[root@localhost ~]#
检验之后效果如图所示
创建自定义网络过程
## pipework 参数解释
docker0 指代宿主机与虚拟机的通信的网卡
## -i 指定创建的网卡名
## vm2只创建的容器
## 192.168.101.128指桥接网段指定的ip
## 24表示掩码
## 172.17.0.1 表示网关
#############[root@localhost system]# pipework docker0 -i eth0 vm2 192.168.101.128/24@172.17.0.1
自定义网卡已经配置成功
bridge桥接模式(默认桥接方式)
默认会将docker容器连接到虚拟网桥交换机,然后虚拟机IP会由这个虚拟网桥交换机进行IP转发
创建过程如下
1.首先docker虚拟机会将虚拟网卡与虚拟网桥交换机搭建为veth_pair设备
2.然后veth_par一端在容器的内部,默认情况下docker容器veth_pair会被放在一个虚拟网桥交换机中,而不同容器会有多个veth_par对,其内部通信
3.然后通过虚拟网桥交换机通过docker0连接dhcp池子自动分配一个ip和端口配置
4.此时容器可以与宿主机进行通信,同时也可以与外网进行通信,但是其他宿主机访问宿主机的容器时是需要通过nat规则进行ip路由的转发,从而映射到宿主机ip和端口
原理图如下:
桥接物理网卡,保证在局域网内部容器充当机器都能内部通信
- 首先将宿主机的docker0网卡设置成br0,ens33网卡桥接一个网卡br0,具体配置情况如下图所示
ens33网卡加入如下配置
Bridge="br0"
将docker0网卡设置为桥接网卡
## 配置信息如下
## 主要给ifcfg-br0网卡配置文件加入如下配置即可TYPE="BRIDGE"
BOOTPROTO="static"
TYPE="BRIDGE"
BOOTPROTO="static"
GATEWAY=192.168.101.2
DNS1=114.114.114.114
~ ### 重启网卡
sytemctl restart NetworkManager
已经桥接到了br0网卡
使用桥接的自定义网桥 分配虚拟网桥段的ip
修改service启动配置文件
创建网卡,分配网卡地址
[root@localhost ~]# pipework br0 -i eth0 vm6 192.168.101.88/24@192.168.101.1
[root@localhost ~]#