设为首页 收藏本站
查看: 807|回复: 0

[经验分享] docker 基本操作Ⅲ

[复制链接]

尚未签到

发表于 2018-5-27 06:53:55 | 显示全部楼层 |阅读模式
  

  1 数据卷备份恢复
  - 我们一般用的最多的是把容器和本地宿主机做目录映射直接存在本地,但是还有一种就是数据卷的备份与恢复,如下就来介绍:
  先来一副图来了解一下数据卷的恢复与备份
  

DSC0000.png

  宿主机也就是我们的服务器分享一个/data/backup/ 目录,本地的这个backup目录和新建容器内的backup相互映射,而我们现在的新建容器挂载了数据卷容器的/data/ 也就是意味着数据卷的data目录和容器的data目录数据是一致的,现在两两互通,下面也就是把新建容器中的data目录中的数据copy到backup中就可以了!这样就完成了真实的备份!
  - 备份(本地创建备份目录)
mkdir /data/backup
docker run --volumes-from testvol -v /data/backup/:/backup centos tar cvf /backup/data.tar /data/
说明:首先我们需要使用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//挂载数据卷新建容器,并解包  2 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网络模式。同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的。
  - 现在我们默认使用的是bridge,容器本身和外部是不能通信的,那我们怎么让容器与外界通信呢?如下来介绍怎么访问外部

  •   首先使用centos镜像新建一个容器,然后在该容器中安装nginx服务,并启动
[root@chy ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
08dd3d386d00        centos7             "bash"              3 seconds ago       Up 3 seconds                            pensive_brattain
[root@chy ~]# docker exec -it 08dd3d386d00 bash //进入容器
[root@08dd3d386d00 /]# yum install -y epel-release
//需要先安装epel扩展源
[root@08dd3d386d00 /]# yum install -y nginx //开始安装nginx
[root@08dd3d386d00 /]# systemctl start nginx //启动nginx,启动是出现了一个报错
Failed to get D-Bus connection: Operation not permitted
这个是这是因为dbus-daemon没有启动,解决该问题可以这样做
[root@chy ~]# docker rm -f 794b4d5ed700
794b4d5ed700
先删除这个容器之后在启动容器
[root@chy ~]# docker run -itd --privileged -e "container=docker" -p 808:80 centos7 /usr/sbin/init //启动容器时,要加上--privileged -e "container=docker" ,并且最后面的命令改为/usr/sbin/init
5896f605586a5697f5bd8e8ae16e207f6716a70adf1c422c2da8909a2496c8df
[root@5896f605586a /]# systemctl start nginx //启动nginx时就没有问题了
[root@08dd3d386d00 /]# rpm -qa nginx //查看nginx的rpm包
nginx-1.10.2-2.el7.x86_64
  

  2 再把该容器导成一个新的镜像(centos_nginx),然后再使用新镜像创建容器,并指定端口映射。
[root@chy ~]# docker commit -m "install nginx" -a "chylinux" 08dd3d386d00 centos7 //将容器导成镜像
sha256:8170b76bc6a875bebfa1860dcc3ad9bade4640e0dc73421bcd30ebe80bc1f973
[root@chy ~]# docker images //查看成功
REPOSITORY                    TAG                 IMAGE ID            CREATED              SIZE
centos7                       latest              8170b76bc6a8        About a minute ago   569MB
[root@chy ~]# docker run -itd -p 808:80 centos7 bash ////-p 可以指定端口映射,本例中将容器的80端口映射为本地的808端口(这里是容器的端口映射为本地的端口,本地的端口自定义即可)
794b4d5ed700cfaffa0cbe6e8755cbf1b072e0b298e8ade609b6accd6430cb9e
[root@chy ~]# curl localhost:808 本地可以访问了  测试外部机器访问内部的容器
[root@chy01 ~]# curl 192.168.212.10:808 //访问成功  3 配置桥接网络
  - 为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将Docker容器和宿主机的网卡桥接起来,再给Docker容器配上IP就可以了
[root@chy ~]# cd /etc/sysconfig/network-scripts/
[root@chy network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@chy network-scripts]# vi ifcfg-br0
TYPE=Bridge //将这个变为bridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0 //改为网卡的名称
UUID=9921878c-a733-4564-8737-ee6af48d5015
DEVICE=br0 //改为网卡的名称
ONBOOT=yes
IPADDR=192.168.212.10
NETMASK=255.255.255.0
GATEWAY=192.168.212.2
DNS1=119.29.29.29
[root@chy network-scripts]# vi ifcfg-ens33 //之后在编辑ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
#UUID=9921878c-a733-4564-8737-ee6af48d5015 //需要注释
DEVICE=ens33
ONBOOT=yes
#IPADDR=192.168.212.10 //需要注释
#NETMASK=255.255.255.0 //需要注释
#GATEWAY=192.168.212.2 //需要注释
#DNS1=119.29.29.29 //需要注释
BRIDGE=br0 增加刚修改的ifcfg-br0
[root@chy network-scripts]# systemctl restart network //重启网卡
[root@chy network-scripts]# ifconfig //查看到用的是一个网卡(即ens33与bro用的一个网卡)
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.212.10  netmask 255.255.255.0  broadcast 192.168.212.255
        inet6 fe80::4228:9a24:3718:ba9e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:70:77:62  txqueuelen 1000  (Ethernet)
        RX packets 36  bytes 3544 (3.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28  bytes 2456 (2.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:77ff:fe70:d168  prefixlen 64  scopeid 0x20<link>
        ether 02:42:77:70:d1:68  txqueuelen 0  (Ethernet)
        RX packets 3  bytes 96 (96.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11  bytes 806 (806.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  - 安装pipwork
  pipework是由Docker的工程师Jérme Petazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用.
[root@chy ~]# git clone https://github.com/jpetazzo/pipework
[root@chy ~]# cd pipework/ 进入到目录下
[root@chy pipework]# cp pipework /usr/local/bin/
[root@chy pipework]# docker run -itd --net=none centos7 bash  //启动一个容器
a9655415cca39879f21d51ca8a658aeb2d66ba3d6f9cb35cf81fa7d0cc00f308
[root@chy pipework]# docker exec -it a96554 bach //进入容器
[root@a9655415cca3 /]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
查看没有地址,现在来配置一个Ip地址  pipwork配置ip地址并且测试
[root@chy pipework]# pipework br0 a9655415cca3 192.168.212.18/24@192.168.212.2 // br0是网卡的名称,后面是容器的名字(id也可以)后面跟给容器设置的ip地址与子网掩码,@后面跟的是网关
[root@chy pipework]# docker exec -it a96554 bash
[root@a9655415cca3 /]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
14: eth1@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 46:6f:8b:5b:28:17 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.212.18/24 brd 192.168.212.255 scope global eth1
       valid_lft forever preferred_lft forever
如上已经查看到有设置的ip地址
[root@a9655415cca3 /]# ping baidu.com //在容器中是可以
PING baidu.com (220.181.57.217) 56(84) bytes of data.
64 bytes from 220.181.57.217: icmp_seq=1 ttl=128 time=5.57 ms
64 bytes from 220.181.57.217: icmp_seq=2 ttl=128 time=5.69 ms
现在来进行测试,用一台chy01的机器测试
[root@chy01 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.212.11  netmask 255.255.255.0  broadcast 192.168.212.255
        inet6 fe80::243b:ddac:7a2b:a5b  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:13:b3:3b  txqueuelen 1000  (Ethernet)
        RX packets 96358  bytes 6128391 (5.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11801  bytes 742577 (725.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@chy01 ~]# ping 192.168.212.18
PING 192.168.212.18 (192.168.212.18) 56(84) bytes of data.
64 bytes from 192.168.212.18: icmp_seq=1 ttl=64 time=1.17 ms
64 bytes from 192.168.212.18: icmp_seq=2 ttl=64 time=0.452 ms
64 bytes from 192.168.212.18: icmp_seq=3 ttl=64 time=0.584 ms
(如上用其它的机器也可以ping通)  这个就是咱们使用pipework软件所搭建起来的bridge模式,当然,这种模式才是真正的网桥模式,官方的bridge模式我认为就是虚拟机下面的NAT模式!
  希望看过的童鞋多多指教,谢谢! DSC0001.gif
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481541-1-1.html 上篇帖子: Docker客户端和守护进程 下篇帖子: docker第三天:管理docker镜像与容器(下)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表