25.9 数据卷备份恢复
25.10 docker网络模式
25.11 opration not permitted
25.12 配置桥接网络
25.9 数据卷备份恢复
开始建立数据卷容器时候并没有映射宿主机的目录,用已下方法备份
1 | [root@kun01 ~]# docker run -itd -v /data/ --name testvol1 centos6_1 bash |
宿主机创建备份目录
1 | [root@kun01 ~]# mkdir -p /data/backup |
新开容器挂载数据卷容器并映射本地备份目录和执行压缩命令
1 | [root@kun01 ~]# docker run --volumes-from testvol1 -v /data/backup/:/backup centos6_1 tar cvf /backup/data.tar /data/ |
--volumes-from testvol1
指定挂载数据卷testvol1-v /data/backup/:/backup
容器中/backup映射到本地机/data/backup/tar cvf /backup/data.tar /data/
把容器中的/data目录拷贝到容器中的/backup/中,也就是本地机的/data/backup/
思路图
恢复
思路: 和备份思路一样,先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。
新建数据卷容器
1 | [root@kun01 ~]#docker run -itd -v /data/ --name testvol2 centos bash |
挂载数据卷新建容器,并解包
1 | [root@kun01 ~]#docker run --volumes-from testvol2 -v /data/backup/:/backup centos tar xf /backup/data.tar |
25.10/25.11 Docker网络模式/opration not permitted问题
Docker中有4种网络模式
host模式
:docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机ip。使用docker run时使用--net=host
指定container模式
:多个容器使用共同的网络,看到的ip是一样的。使用--net=container:container_id/container_name
none模式
:这种模式下,不会配置任何网络。使用--net=none
指定bridge模式
:这种模式会为每个容器分配一个独立的Network Namespace。类似于vmware的nat网络模式。同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的。使用--net=bridge
指定默认模式,不用指定默认就是这种网络模式。
外部访问容器
思路:
首先使用centos镜像新建一个容器,然后在该容器中安装httpd服务,并启动。
再把该容器导成一个新的镜像(centos-nginx),然后再使用新镜像创建容器,并指定端口映射。
再通过其他机器来访问本地的映射端口来访问容器
步骤
1.创建容器并安装软件,这里已nginx为实例
1 | [root@kun01 ~]# docker run -itd centos_net bash ##启动容器 |
2.把安装了Nginx的容器转换为镜像
1 | [root@kun01 ~]# docker commit -m "install nginx" -a "kun" 9eeb7d5 centos_nginx |
3.把镜像启动为容器并映射宿主机的端口
1 | [root@kun01 ~]# docker run -itd -p 8888:80 centos_nginx bash |
-p
指定端口映射 :左边是宿主机端口
,:右边是容器端口
4.进入容器启动服务
1 | [root@kun01 ~]# docker exec -it 316962b bash ##进入新的容器 |
问题 dbus-daemon没有启动
Failed to get D-Bus connection: Operation not permitted
解决 启动容器是添加启动dbus-daemon参数1
2
3
4
5[root@316962b00ea1 /]# exit
[root@kun01 ~]# docker rm -f 316962b00 ##退出并删除正在运行的容器再带上参数运行
[root@kun01 ~]# docker run -itd --privileged -e "container=docker" -p 8888:80 centos_nginx /usr/sbin/init
[root@kun01 ~]# docker exec -it b810dc9653 bash ##进入添加参数后的容器
[root@b810dc96534f /]# systemctl start nginx
测试
使用浏览器访问宿主机的8888端口
25.12 配置桥接网络
为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。只要将Docker容器和宿主机的网卡桥接起来,再给Docker容器配上IP就可以了。
步骤
1.把宿主机的网卡拷贝一份为br0网卡
1 | [root@kun01 ~]# cd /etc/sysconfig/network-scripts/ |
2.修改ens33和br0网卡配置
1 | [root@kun01 network-scripts]# vim ifcfg-ens33 |
ens33增加BRIDGE=br0,删除IPADDR,NETMASK,GATEWAY,DNS1,UUID1
2
3
4
5
6#UUID=853ab223-b6fa-419a-8fbe-f1476d83f2ca
#IPADDR=192.168.80.101
#NETMASK=255.255.255.0
#GATEWAY=192.168.80.2
#DNS1=119.29.29.29
BRIDGE=br0
1 | [root@kun01 network-scripts]# vim ifcfg-br0 |
br0修改TYPE为Bridge DEVICE改为br0 NAME改为br01
2
3TYPE=Bridge
DEVICE=br0
NAME=br0
3.重启网络
1 | [root@kun01 network-scripts]# systemctl restart network |
br0有IP地址 ens33没有IP地址为正确配置1
2
3
4
5[root@kun01 network-scripts]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.80.101 netmask 255.255.255.0 broadcast 192.168.80.255
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:71:e0:91 txqueuelen 1000 (Ethernet)
4.下载pipework
1 | [root@kun01 network-scripts]# cd |
5.把pipework拷贝到环境变量中
1 | [root@kun01 ~]# git clone https://github.com/jpetazzo/pipework.git |
6.运行一个不配置任何网络的容器
1 | [root@kun01 pipework]# docker run -itd --net=none centos_net bash |
7.为刚刚容器重新设置新网段
1 | [root@kun01 pipework]# pipework br0 019a92112 192.168.80.66/24@192.168.80.2 |
@前表示要设置的新IP和宿主机的IP同网段
@后表示网关
8.进入容器里面看看网络
1 | [root@kun01 pipework]# docker exec -it 019a92112 bash |
看到刚刚的IP地址出现证明设置正确