系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 系统教程 > Linux教程 > 详细页面

三、数据卷备份恢复、Docker网络模式、配置桥接网络

时间:2020-02-21来源:系统城作者:电脑系统城

一、数据卷备份恢复

-v把容器里的数据映射到宿主机了,就不需要做备份了。如果只是-v指定了容器里的目录,备份的话就需要借助一个中间的容器。

备份

# mkdir /data/backup    //这个目录是在宿主机上的
# docker run --volumes-from testvol -v /data/backup/:/backup centos tar cvf  /backup/data.tar /data/

解析:我们要备份一个数据卷A(已经存在的),里面共享的目录叫/data,现在需要新建一个容器,新建的容器B要挂载A的数据卷(--volumes-from testvol),挂载完A它的数据卷意味着已经共享A数据卷的data目录了,此时,我再加一个映射,宿主机和B这个容器的映射。/data/backup和/backup都是空目录,最后面的/data目录就是要备份的A的目标目录。然后再执行tar命令把/data目录打包,打包先是由/data到了B容器的/backup下,然后由于B这个容器和宿主机做了映射,就再到了宿主机的/data/backup下。

说明:首先我们需要使用testvol数据卷新开一个容器,同时我们还需要把本地的/data/backup目录挂载到该容器的/backup下,这样在容器中/backup目录里面新建的文件,我们就可以直接在/data/backup/目录中看到了。 然后再把/data/目录下面的文件打包到成data.tar文件放到/backup目录下面。

恢复

思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。

新建数据卷容器:docker run -itd -v /data/ --name testvol2 centos bash

挂载数据卷新建容器,并解包:

# docker run --volumes-from testvol2  -v /data/backup/:/backup centos tar xf /backup/data.tar

clipboard.png

 

二、Docker网络模式

host模式,使用docker run时使用--net=host指定

docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机ip。

container模式,使用--net=container:container_id/container_name

多个容器使用共同的网络,看到的ip是一样的

none模式,使用--net=none指定

这种模式下,不会配置任何网络

bridge模式,使用--net=bridge指定默认模式,不用指定默认就是这种网络模式。这种模式会为每个容器分配一个独立的Network Namespace。类似于vmware的nat网络模式。同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的。

 

Docker网络管理-外部访问容器

容器对外是ping不通的,这里主要讲使容器对外能ping通。

操作过程是,先进入一个容器里,然后在容器里安装一个web服务,比如nginx,安装好后,把这个带nginx服务的容器做一个打包,或者说把它导成一个镜像,完成后,再启动一个容器,在启动容器的时候,加一个端口映射就行了。

# docker exec -it f18f7ce076da bash
# yum install -y epel-release
# yum install -y nginx
# exit
# docker commit -m "install nginx" -a "yw" f18f7ce076da centos_nginx
# docker run -itd -p 8088:80 centos_nginx bash

 

新建的容器,启动nginx或者httpd服务的时候会报错

Failed to connect to bus: Host is down

这是因为dbus-daemon没有启动,解决该问题可以这样做

启动容器时,要加上--privileged -e "container=docker" ,并且最后面的命令改为/usr/sbin/init

# docker run -itd --privileged -e "container=docker" centos_nginx /usr/sbin/init

 

# docker exec -it 2cb909 bash
[root@2cb909c4dc9a /]# systemctl start nginx
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

先把之前的centos_nginx容器删掉,再重新运行这个镜像。

# docker rm -f 2cb909c4dc9a
# docker run -itd --privileged -e "container=docker" -p 8088:80 centos_nginx /usr/sbin/init
4cd1e500e322c8e7842671ee8f6645f8492aa0d0182885e657620c6fd62e0b09
# docker exec -it 4cd1e500e322 bash
[root@4cd1e500e322 /]# systemctl start nginx
[root@4cd1e500e322 /]# ps aux |grep nginx
root        145  0.0  0.0 103280  2100 ?        Ss   08:38   0:00 nginx: master process /usr/sbin/nginx
nginx       146  0.0  0.1 121968  4448 ?        S    08:38   0:00 nginx: worker process
nginx       147  0.0  0.1 121968  4000 ?        S    08:38   0:00 nginx: worker process
root        153  0.0  0.0   9172   712 pts/1    S+   08:41   0:00 grep --color=auto nginx
[root@4cd1e500e322 /]# curl localhost

[root@yw01 ~]# curl 192.168.255.128:8088
//在别的机器访问这个容器就直接访问它的8088端口就可以了。

 

三、配置桥接网络

为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将Docker容器和宿主机的网卡桥接起来,再给Docker容器配上IP就可以了。这样就可以和外面的机器直接进行通信,也就可以把这个docker容器看成是一个独立的服务器一样。

这个是用第三方pipework实现的桥接网络,这个桥接和docker官网那个bridge是不同的,官方自带的bridge其实是NAT,这个bridge才是真正的桥接。

# cd /etc/sysconfig/network-scripts/
# cp ifcfg-ens33  ifcfg-br0
# vi ifcfg-ens33    //增加BRIDGE=br0,删除IPADDR,NETMASK,GATEWAY,DNS1
# vi ifcfg-br0    //修改NAME和DEVICE为br0,Type为Bridge,网络设置不用动。
# systemctl restart network

然后执行ifconfig查看到br0网卡有之前ens33的IP,ens33没有IP就正确了。

安装pipework

# git clone https://github.com/jpetazzo/pipework
# cp pipework/pipework /usr/local/bin/

开启一个容器

# docker run -itd --net=none --name yw centos_nginx bash

//现在这个容器就是只有lo网卡的,使用pipework给这个容器增加一个IP。

# pipework br0 yw 192.168.255.135/24@192.168.255.2

//135为设定的容器的IP,@后面的IP为网关。

# docker exec -it yw bash

//进去后ifconfig查看就可以看到新添加的IP。

 

这个是可以写多个的,如果想把ens37也做桥接,可以写一个br1。即使ens37上没有配置IP,也可以在br1或者br0上配置一个跟它同一个网段的IP,可以在虚拟机上通过dhclient ens37给它获得IP地址。

分享到:

相关信息

  • linux 文件权限怎么解析

    常用权限linux系统内有档案有三种身份 u:拥有者 g:群组 o:其他人这些身份对于文档常用的有下面权限:r:读权限,用户可以读取文档的内容,如用cat,more查看w:写权限,用户可以编辑文档x...

    2024-07-07

  • 如何使用WPSeku找出 WordPress 安全问题?

    然而,如果我们遵循通常的 WordPress 最佳实践,这些安全问题可以避免。在本篇中,我们会向你展示如何使用 WPSeku,一个 Linux 中的 WordPress 漏洞扫描器,它可以被用来找出你安装...

    2024-07-03

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载