Docker 配置安装(Ⅲ)

一、数据卷备份恢复

其实只要是把容器和本地宿主机做了目录映射直接存在本地,那我们只需对本地的硬盘定期备份下不就好了么?那这个备份就是多余的,但是偏偏就有这么干的。备份和恢复也就接踵而来。

1.1 本地创建备份目录

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目录下面。

也许有点乱,看下下面这个图:

宿主机也就是我们的服务器分享一个/data/backup/ 目录,本地的这个backup目录和新建容器内的backup相互映射,而我们现在的新建容器挂载了数据卷容器的/data/ 也就是意味着数据卷的data目录和容器的data目录数据是一致的,现在两两互通,下面也就是把新建容器中的data目录中的数据copy到backup中就可以了!这样就完成了真实的备份!

1.2 恢复

思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把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网络模式。同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的。

在开始之前先分享一个错误,进入容器后不可以连接yum任何服务和不可以ping任何网络,最后发现原因是之前我们搭建了内网的容器平台,导致问题产生。 修改后并重启docker服务:

vi /etc/docker/daemon.json  //加入如下内容
{
  "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}

systemctl restart docker
  1. 首先使用centos镜像新建一个容器,然后在该容器中安装nginx服务,并启动
[[email protected] /]# systemctl restart nginx
Failed to get D-Bus connection: Operation not permitted

//显然报错了! 操作不允许。

解决方案:

后面再来分析↓

  1. 再把该容器导成一个新的镜像(centos_nginx),然后再使用新镜像创建容器,并指定端口映射。
docker commit -m "installed nginx" -a "zhdya" dbef333372c2 centos_nginx
docker run -itd -p 8088:80 centos_nginx bash  //-p 可以指定端口映射,本例中将容器的80端口映射为本地的8088端口
也就是说,现在任何主机只要通过 宿主机IP:8088 就可以访问容器的80端口
如上问题解决方案:operation not permitted
①先关闭 已经启动的docker容器
②重新指定特定的参数启动

[root@zhdy01 ~]# docker run -itd --privileged -e "container=docker" -p 8088:80 centos_nginx /usr/sbin/init
519c0e50ce837ec2f2d5ab60549b77b0c69e8f635b173f991f3b178d7efc8254

进入容器并启动:
[root@zhdy01 ~]# docker exec -it 519c0e50ce837e bash
[root@519c0e50ce83 /]# systemctl  start nginx
[root@519c0e50ce83 /]# ps aux | grep nginx
root         88  0.0  0.2 122812  2076 ?        Ss   02:50   0:00 nginx: master process /usr/sbin/nginx
nginx        89  0.0  0.3 123244  3112 ?        S    02:50   0:00 nginx: worker process
测试

使用其它机器测试容器的80端口:

[[email protected] ~]# curl 192.168.59.131:8088
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <title>Test Page for the Nginx HTTP Server on Fedora</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

//一个nginx的欢迎页!
-p后面也支持IP:port:ip:port 的格式,比如

-p 127.0.0.1:8080:80

也可以不写本地的端口,只写ip,这样会随意分配一个端口

-p 127.0.0.1::80  //注意这里是两个冒号

三、配置网桥网络

这种模式应该不陌生,这种模式就是相当于配置咱们的容器和宿主机在同一局域网模式下,这样我们就可以认为这台docker容器也是一台真正的宿主机!

[[email protected] ~]# cd /etc/sysconfig/network-scripts/

[[email protected] network-scripts]# cp ifcfg-ens33 ifcfg-br0

[[email protected] network-scripts]# vim ifcfg-br0 

TYPE="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="516645c7-9bd8-490e-a61a-d9e70a87180b"
DEVICE="br0"
ONBOOT="yes"
IPADDR="192.168.59.131"
NETMASK=255.255.255.0
GATEWAY=192.168.59.2
DNS1=61.177.7.1
DNS2=119.29.29.29

//重启网卡
[[email protected] network-scripts]# systemctl  restart network
查看配置

如上只有ens33没有IP,这样才能实验咱们真正的目的,试想一下,这种模式未来是不是咱们只要把镜像配置好,按照如上模式配置IP这样不就轻易实现了,轻轻松松部署各种服务!

安装pipwork
git clone https://github.com/jpetazzo/pipework

//不需要任何的编译,直接copy配置文件到bin目录下即可:
cp pipework/pipework /usr/local/bin/

开启一个容器 <设置成没有网络模式:>

[root@zhdy01 ~]# docker run -itd --net=none centos_nginx bash
780d7478ff8687cd66bec908948d0dbe09e39cdfff51284dcfb533cf008015ef

[root@zhdy01 ~]# docker exec -it 780d7478ff8 bash

[root@780d7478ff86 /]# ifconfig 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0

给容器设置一个指定的IP地址:

[[email protected] ~]# pipework br0 780d747 192.168.59.159/[email protected]

[[email protected] ~]# docker exec -it 780d7478ff8 bash

[[email protected] /]# ifconfig 
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.59.159  netmask 255.255.255.0  broadcast 192.168.59.255
        ether 86:0f:3e:8d:b3:2d  txqueuelen 1000  (Ethernet)
        RX packets 7  bytes 578 (578.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1  bytes 42 (42.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

如上就理所当然的生成了咱们指定的IP。(网络肯定也是通的,只要在同一局域网其它的server也完全可以ping通)

这个就是咱们使用pipework软件所搭建起来的bridge模式,当然,这种模式才是真正的网桥模式,官方的bridge模式我认为就是虚拟机下面的NAT模式!

现在是不是我们完全就可以使用各种咱们自己所需的服务?当然醉醉醉方便的就是 随时可移植到另外一台服务器!!!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

手把手教你制作漏洞复现环境

在学习的过程中, 是否看到别人搭建的练习平台心痒痒呢? 通过本篇教程的学习, 将手把手教你搭建属于自己的漏洞测试利用环境, 不管是自己学习还有分享给小伙伴都将轻...

369100
来自专栏崔庆才的专栏

Docker 入门教程

18630
来自专栏性能与架构

认识一下 Kubernetes

36030
来自专栏python爬虫实战之路

使用dockerfile创建docker镜像

什么是docker?看这里Docker_入门?只要这篇就够了!纯干货适合0基础小白

11130
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Docker和Docker Compose配置持续集成测试环境

持续集成(CI)是指开发人员尽可能经常集成代码并在每个提交在通过自动构建合并到共享存储库之前和之后进行测试的实践。

11700
来自专栏bboysoul

使用docker搭建zabbix

再次之前我们要知道zabbix的主要架构是怎样的,zabbix有一个server端是最主要的,主要是用来收集agent传来的数据然后进行处理等一系列操作,当然有...

22530

Docker Hub:保存并分享你的Docker镜像

Docker Hub 是一个基于云的注册服务网站,提供容器应用或容器服务的构建功能。

25660
来自专栏Bug生活2048

mac下利用docker部署个mysql

这个不多说,直接到官网下载对应的版本安装即可,在配置docker时最好切换阿里云镜像,具体步骤不细说,可参考之前的文章 .net core开发环境搭建中有提到如...

57020
来自专栏田飞雨的专栏

Docker 使用指南 (三)—— 网络配置

本文详细介绍了Docker网络配置的四个模式,以及模式下的具体配置操作。希望对入门,Docker的童鞋有所帮助。

4.5K00
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Docker和Docker Compose配置持续集成测试环境

持续集成(CI)指的是开发人员尽可能频繁地集成代码,并且在自动化构建将每个提交合并到共享存储库之前和之后都要进行测试的实践。

6400

扫码关注云+社区

领取腾讯云代金券