时间: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
二、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地址。
2024-07-18
Centos 7 二进制安装配置 MariaDB数据库2024-07-18
Centos7默认firewalld防火墙使用命令大全2024-07-07
四种执行python系统命令的方法常用权限linux系统内有档案有三种身份 u:拥有者 g:群组 o:其他人这些身份对于文档常用的有下面权限:r:读权限,用户可以读取文档的内容,如用cat,more查看w:写权限,用户可以编辑文档x...
2024-07-07
然而,如果我们遵循通常的 WordPress 最佳实践,这些安全问题可以避免。在本篇中,我们会向你展示如何使用 WPSeku,一个 Linux 中的 WordPress 漏洞扫描器,它可以被用来找出你安装...
2024-07-03