ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-02-21 10:55:29  阅读:207  来源: 互联网

标签:容器 桥接 backup 宿主机 网络 nginx Docker data docker


一、数据卷备份恢复

-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地址。

标签:容器,桥接,backup,宿主机,网络,nginx,Docker,data,docker
来源: https://blog.51cto.com/13576245/2472660

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有