Docker(自定义网络、数据卷、卷插件)

1、docker自定义网络

自己定义网段

在创建时指定参数:–subnet 、–gateway

[root@server2 ~]# docker network create --subnet 172.20.0.0/24 --gateway 172.20.0.1 net1 
[root@server2 ~]# docker network ls
6009d43a932a   net1      bridge    local
[root@server2 ~]# docker inspect net1
                    "Subnet": "172.20.0.0/24",
                    "Gateway": "172.20.0.1"
[root@server2 ~]# ip addr

在这里插入图片描述
使用–ip参数可以指定容器ip地址,但必须是在自定义网桥上,
在这里插入图片描述

[root@server2 ~]# docker run -d --name demo webserver
e4ae51f565a9913f1503b8fdc9ef77e515cf30426c54c30ec765fe6aa56caa41
[root@server2 ~]# docker ps
[root@server2 ~]# docker inspect demo
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",

[root@server2 ~]# docker run -it --rm --network net1 busybox
/ # ip addr
inet 172.20.0.2/24 brd 172.20.0.255
/ # ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
/ # ping demo
ping: bad address 'demo'

在这里插入图片描述

[root@server2 ~]# docker run -d --name demo2 --network net1 webserver
4ca010306e354976789dec0b2241c1ba8899e7226da36d48e7d57ee8299e8065

[root@server2 ~]# docker inspect demo2
"Gateway": "172.20.0.1",
"IPAddress": "172.20.0.2",

[root@server2 ~]# docker network connect net1 demo
[root@server2 ~]# docker inspect demo
 "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
 "Gateway": "172.20.0.1",
                    "IPAddress": "172.20.0.3",

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

–link可以用来链接2个容器
[root@server1 ~]# scp nginx.tar server2:
[root@server2 ~]# docker load -i nginx.tar 

[root@server2 ~]# docker run -d --name demo nginx
[root@server2 ~]# docker run -it --rm --link demo:nginx busybox

在这里插入图片描述

[root@server2 ~]# docker run -d --name demo2 nginx
[root@server2 ~]# docker stop demo
demo
[root@server2 ~]# docker inspect demo2
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
[root@server2 ~]# docker start demo
demo
[root@server2 ~]# docker inspect demo
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.4",

在这里插入图片描述

外网如何访问容器

端口映射
-p 选项指定映射端口

外网访问容器用到了docker-proxy和iptables DNAT
宿主机访问本机容器使用的是iptables DNAT
外部主机访问容器或容器之间的访问是docker-proxy实现

在这里插入图片描述
在这里插入图片描述

[root@server2 ~]# cd /etc/docker/
[root@server2 docker]# ls
certs.d  daemon.json  key.json
[root@server2 docker]# vim daemon.json 
[root@server2 docker]# systemctl reload docker
[root@server2 docker]# docker pull radial/busyboxplus
[root@server2 docker]# docker tag radial/busyboxplus:latest busyboxplus:latest
[root@server2 docker]# docker rmi radial/busyboxplus
[root@server2 docker]# docker images
[root@server2 docker]# docker run -it --rm busyboxplus

在这里插入图片描述
在这里插入图片描述

[root@server2 docker]# curl localhost:8080
curl: (7) Failed connect to localhost:8080; Connection refused
[root@server1 ~]# curl 192.168.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

在这里插入图片描述
在这里插入图片描述

2、跨主机容器网络

跨主机容器网络
macvlan网络方案实现
LInux kernel提供的一种网卡虚拟化技术。
无需Linux bridge,直接使用物理接口,性能极好。

[root@server1 harbor]# ip link set eth1 promisc on
[root@server1 harbor]# ip addr show eth1
[root@server2 docker]# ip link set eth1 promisc on

[root@server1 harbor]# docker network create -d macvlan --subnet 172.21.0.0/24 --gateway=172.21.0.1 -o parent=eth1 mac_net1
[root@server2 docker]# docker network create -d macvlan --subnet 172.21.0.0/24 --gateway=172.21.0.1 -o parent=eth1 mac_net1

[root@server1 harbor]# docker run -it --rm --network mac_net1 --ip 172.21.0.11 busybox
[root@server2 docker]# docker run -it --rm --network mac_net1 --ip 172.21.0.12 busybox

在这里插入图片描述
macvlan网络
vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,
vlan id取值为1~4094

[root@server1 docker]# docker network create -d macvlan --subnet 172.22.0.0/24 --gateway=172.22.0.1 -o parent=eth1.1 mac_net2
[root@server2 docker]# docker network create -d macvlan --subnet 172.22.0.0/24 --gateway=172.22.0.1 -o parent=eth1.1 mac_net2
[root@server2 docker]# docker inspect mac_net2

在这里插入图片描述

[root@server1 harbor]# docker run -it --rm --network mac_net2 --ip 172.22.0.21 busybox
/ # ping 172.22.0.22
[root@server2 docker]# docker run -it --rm --network mac_net2 --ip 172.22.0.22 busybox

在这里插入图片描述

3、Docker数据卷管理

为什么要用数据卷?
docker分层文件系统:性能差,生命周期与容器相同
docker数据卷:
mount到主机中,绕开分层文件系统
和主机磁盘性能相同,容器删除后依然保留
仅限本地磁盘,不能随容器迁移

docker提供了两种卷: bind mount , docker managed volume

bind mount
是将主机上的目录或文件mount到容器里。
使用直观高效,易于理解。
使用 -v 选项指定路径
在这里插入图片描述
docker managed volume

[root@server2 _data]# docker rm -f registry 
registry
[root@server2 _data]# docker volume ls
[root@server2 _data]# docker volume prune 
[root@server2 _data]# docker volume create registry
[root@server2 _data]# docker run -d --name registry -v registry:/var/lib/registry registry
[root@server2 _data]# docker inspect registry
"Source": "/var/lib/docker/volumes/registry/_data",
[root@server2 _data]# pwd
/var/lib/docker/volumes/registry/_data

在这里插入图片描述
在这里插入图片描述

## 隐藏并替换
[root@server2 _data]# docker run -d --name demo nginx
[root@server2 _data]# curl 172.17.0.3
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

[root@server2 _data]# docker run -d --name demo -v /data1:/usr/share/nginx/html nginx 
[root@server2 _data]# docker exec -it demo bash
[root@server2 data1]# echo www.westos.org > index.html
[root@server2 data1]# curl 172.17.0.3
www.westos.org
[root@server2 data1]# pwd
/data1
## 复制原有卷
[root@server2 data1]# docker volume create webdata
webdata
[root@server2 data1]# docker rm -f demo
[root@server2 data1]# docker run -d --name demo -v webdata:/usr/share/nginx/html nginx
[root@server2 data1]# cd /var/lib/docker/volumes/webdata/_data
[root@server2 _data]# ls
50x.html  index.html
[root@server2 _data]# curl 172.17.0.3

在这里插入图片描述

### 权限控制
[root@server2 _data]# docker rm -f demo
demo
[root@server2 _data]# docker run -d --name demo -v webdata:/usr/share/nginx/html:ro nginx
[root@server2 _data]# docker exec -it demo bash
root@2500afb7ea5a:/# cd /usr/share/nginx/html/
root@2500afb7ea5a:/usr/share/nginx/html# ls
50x.html  index.html
root@2500afb7ea5a:/usr/share/nginx/html# echo www.westos.org >> index.html
bash: index.html: Read-only file system

在这里插入图片描述

4、卷插件

convoy卷插件实现
支持三种运行方式:devicemapper、NFS、EBS。
以下实验使用nfs方式。

convoy卷插件安装

跨节点数据同步

[root@server1 ~]# yum install -y nfs-utils
[root@server1 ~]# vim /etc/exports
/nfsdata        *(rw,no_root_squash)                                
[root@server1 ~]# systemctl enable --now nfs
[root@server1 ~]# showmount -e
Export list for server1:
/nfsdata *
[root@server
[root@server1 ~]# mkdir /nfsdata
[root@server1 ~]# chmod 777 /nfsdata/
[root@server1 ~]# ll -d /nfsdata/
drwxrwxrwx 2 root root 6 Jan 31 04:41 /nfsdata/

[root@server2 ~]# yum install -y nfs-utils
[root@server2 ~]# showmount -e 192.168.0.1 
Export list for 192.168.0.1:
/nfsdata *
[root@server2 ~]# mkdir /nfsdata; mount 192.168.0.1:/nfsdata /nfsdata
[root@server2 ~]# ll -d /nfsdata/
drwxrwxrwx 2 root root 6 Jan 31 04:41 /nfsdata/

在这里插入图片描述
在这里插入图片描述

server1 2
[root@server2 ~]# tar zxf convoy.tar.gz
[root@server2 ~]# cd convoy/
[root@server2 convoy]# mv convoy* /usr/local/bin/
[root@server2 convoy]# mkdir -p /etc/docker/plugins/
[root@server2 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/nfsdata &
[root@server2 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
[root@server2 plugins]# cat /etc/docker/plugins/convoy.spec 
unix:///var/run/convoy/convoy.sock
创建卷 使用卷
[root@server1 convoy]# convoy create vol1
[root@server1 convoy]# convoy list
[root@server2 plugins]# cd /nfsdata/
[root@server2 nfsdata]# ls
config  vol1
[root@server2 nfsdata]# convoy list

在这里插入图片描述在这里插入图片描述

[root@server2 nfsdata]# docker run -d --name demo -v vol1:/usr/share/nginx/html --volume-driver=convoy nginx
[root@server2 vol1]# pwd
/nfsdata/vol1
[root@server2 nfsdata]# cd vol1/
[root@server2 vol1]# ls
50x.html  index.html
[root@server2 vol1]# vim index.html 
[root@server2 vol1]# curl 172.17.0.2
www.westos.org
[root@server2 vol1]# docker rm -f demo


[root@server1 nfsdata]# docker run -d --name demo -v vol1:/usr/share/nginx/html --volume-driver=convoy nginx
[root@server1 vol1]# curl 172.17.0.2
www.westos.org

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值