• 容器部署DNS你会吗?


    概念

    Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。这里我将使用docker容器快速部署DNS域名解析服务器,并实现快速上线

    环境介绍

    1. DNS服务器主机:172.18.0.2 域名:dns.jkyst.xyz
    2. 客户端机器:172.18.0.3 域名:client1.jkyst.xyz
    3. 客户端机器:172.18.0.4 域名:client2.jkyst.xyz

    部署DNS

    这里说一下DNS服务是由bind软件包提供的,如果不想使用docker进行部署,也可以进行安装bind相关软件包进行部署

    下载相关镜像

    下载镜像可以使用下面命令进行下载:

    	docker search  镜像名		//查找相关镜像
    	docker	pull	镜像名		//下载相关镜像
    

    经过查找之后选择适合自己的版本

    root@ubuntu:~# docker search dns
    	NAME                           DESCRIPTION                                     STARS               			OFFICIAL            AUTOMATED
    	andyshinn/dnsmasq              My dnsmasq brings all the boys to the yard, …   190                                     [OK]
    	jpillora/dnsmasq               dnsmasq with a web UI                           89                                      [OK]
    	gists/dnscrypt-proxy           A flexible DNS proxy, with support for encry…   18                                      [OK]
    	tutum/dnsutils                 Provides DNS utilities like dig and nslookup    13                                      [OK]
    	defreitas/dns-proxy-server     Solve your DNS hosts from docker containers,…   13                                      	[OK]
    	jedisct1/dnscrypt-server       A non-censoring, non-logging, DNSSEC-capable…   11                                      [OK]
    	certbot/dns-route53            Official build of EFF's Certbot with its plu…   10                                      [OK]
    root@ubuntu:~# 
    

    下载相关镜像

    root@ubuntu:~# docker pull andyshinn/dnsmasq
    Using default tag: latest
    latest: Pulling from andyshinn/dnsmasq
    1eae7a7426b0: Pull complete 
    4e20cc818d2e: Pull complete 
    Digest: sha256:dbd1c08714ee9d7a3edb2729eac7e4bea3b88553f14c4d7821526d612437e0b4
    Status: Downloaded newer image for andyshinn/dnsmasq:latest
    docker.io/andyshinn/dnsmasq:latest
    root@ubuntu:~# docker images
    REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
    andyshinn/dnsmasq                               latest              831c17422076        20 months ago       4.88MB
    root@ubuntu:~# 
    

    上面镜像是官方提供的相关镜像,因为hub在国外所以有些镜像下载起来比较慢,所以我这里提供了一些国内的镜像
    杭州地区:registry.cn-hangzhou.aliyuncs.com/stqc/
    北京地区:registry.cn-beijing.aliyuncs.com/stqc/
    官网(docker hub):由于是官网地址可以直接使用:docker search blxt进行搜索即可

    注意:由于镜像无法提供相关列表名称,大家可以使用docker search blxt进行搜索后,镜像名加上面国内地址就可以进行国内地址下载了,下面我给大家列了一个例子

    root@ubuntu:~# docker search blxt			//查看都有哪些镜像
    NAME                DESCRIPTION           STARS               OFFICIAL            AUTOMATED
    blxt/nginx          基于centos8制作的镜像        0                                       
    blxt/tomcat         基于centos8的tomcat9     0                                       
    blxt/mariadb        基于centos8制作的镜像        0                                       
    blxt/mysql-proxy    基于centos8制作的镜像        0                                       
    blxt/dns            基于ubuntu的DNS版本bind9   0                                       
    blxt/ubuntu         ubuntu19              0                                       
    root@ubuntu:~# docker pull registry.cn-beijing.aliyuncs.com/stqc/dns		//下载DNS镜像
    Using default tag: latest
    latest: Pulling from stqc/dns
    da6fc00e4d0b: Already exists 
    c3c0be9d84b3: Already exists 
    9c1dda927878: Already exists 
    4b8880231fa0: Already exists 
    a7d3d4ea8ca6: Already exists 
    6193a51f16ce: Pull complete 
    Digest: sha256:25309761b9b046549b3488960d518fd234367748c899e2e3a58265f2c9cbc8f3
    Status: Downloaded newer image for registry.cn-beijing.aliyuncs.com/stqc/dns:latest
    registry.cn-beijing.aliyuncs.com/stqc/dns:latest
    root@ubuntu:~# docker images			//查看所有本地镜像
    REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
    registry.cn-beijing.aliyuncs.com/stqc/dns   latest              c24136df62ae        2 hours ago         376MB
    blxt/ubuntu                                 latest              182d872a6abe        5 weeks ago         327MB
    root@ubuntu:~# 
    

    到这里镜像就下载成功了

    创建并启动DNS容器

    简单介绍三种创建方式

    创建容器一般有三种创建方式,下面我简单介绍下这三种启动方式:交互式、命令短暂模式以及daemon方式

    1. 交互式
      这种方式可以让我们直接打印一些数据出来,比如:容器的ip地址
        root@test:~# docker run registry.cn-beijing.aliyuncs.com/stqc/dns ip addr
       	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
       	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
       10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
       	link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
       	inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
          	valid_lft forever preferred_lft forever
    root@test:~# 
    

    也可以让我们来一个bash的交互终端

    	root@test:~# 
       root@test:~# docker run -it registry.cn-beijing.aliyuncs.com/stqc/dns /bin/bash
       root@b9bc496a5028:/# 						//这是提供的交互式终端,类似于ssh连接
    
    1. 命令短暂模式
      先让我们使用容器进行打印一些东西
       root@test:~# docker run registry.cn-beijing.aliyuncs.com/stqc/dns /bin/echo "hello word"
       hello word				//可以将我所写的打印出来
       root@test:~# 
    

    但是打印完成后,容器并没有消失

    root@test:~# docker ps -a						//查看所有容器,可以看到这个容器是存在的
    CONTAINER ID        IMAGE                                       COMMAND                  CREATED              STATUS                          PORTS               NAMES
    5889013ad2fd        registry.cn-beijing.aliyuncs.com/stqc/dns   "/bin/echo 'hello wo…"   About a minute ago   Exited (0) About a minute ago                       optimistic_gould
    root@test:~# 
    

    让我们再将容器重新启动,会发现未出现hello word字样

        root@test:~# docker start optimistic_gould 			//启动容器
       	optimistic_gould			//发现打印出来的是容器的名称
       root@test:~# 
    

    如果我们像让他重新打印hello word,我们就要执行下面命令了

    	root@test:~# docker logs  optimistic_gould 			//此命令是再次执行容器
       	hello word
       	hello word
       root@test:~# 
    

    这样就可以看到两个hello word了
    3. daemon模式
    daemon模式也叫守状态模式,也就是说让软件作为长时间服务运行!
    我们来举例说明:

    c334e679b334d64dae25f1f6193550cf029135496e3c4ea9f355ee263a326837
    root@test:~# docker ps -a			//查看容器
    CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
    c334e679b334        registry.cn-beijing.aliyuncs.com/stqc/dns   "/bin/sh -c 'while t…"   17 seconds ago      Up 14 seconds                           dazzling_mccarthy
    root@test:~# docker logs dazzling_mccarthy 			//打印容器的输出
    hello word
    hello word
    hello word
    root@test:~# docker attach dazzling_mccarthy 				//实时查看容器输出
    hello word
    hello word
    hello word
    hello word
    

    容器启动停止

    1.启动容器

    root@test:~# docker start 容器ID/容器名
    

    2.重启容器

    root@test:~# docker restart 容器ID/容器名
    

    3.关闭容器

    root@test:~# docker stop 容器ID/容器名
    

    创建dns交互式容器

    root@test:~# docker run -itd --name dns --privileged registry.cn-	beijing.aliyuncs.com/stqc/dns /sbin/init		//以init的交互式模式进行创建,并自动启动
    fbc5c6c1a26920bb94a5963cb7c7867e106f3f67ffb84c055849e332006c9077
    root@test:~# docker exec -it dns /bin/bash		//连接到容器并生成bash交互式
    root@fbc5c6c1a269:/# 			//dns容器的命令行
    

    配置DNS容器相关配置

    DNS容器已经配置完成,接下来就该配置DNS的一些配置了,比如正向解析的配置文件等
    修改/etc/bind/named.conf.default-zones配置文件,配置如下:

    #在配置文件中增加下面内容
    zone "jkyst.xyz" {
            type master;
            file "/etc/bind/db.jkyst";
    };
    #创建正向解析数据文件db.jkyst
    root@fbc5c6c1a269:/etc/bind# touch db.jkyst
    #在数据文件中添加以下内容,下面为解析内容,建议按照实际情况填写
    ; BIND data file for local loopback interface
    ;
    $TTL    604800
    @       IN      SOA     www.jkyst.xyz. root.jkyst.xyz. (
                                  2         ; Serial
                             604800         ; Refresh
                              86400         ; Retry
                            2419200         ; Expire
                             604800 )       ; Negative Cache TTL
            IN      NS      www.jkyst.xyz.			//www域名
            IN      MX 10   root.jkyst.xyz.			//邮件域名
    dns     IN      A       172.18.0.2				//DNS域名所对应的IP
    client1 IN      A       172.18.0.3				//客户端1域名所对应的IP
    client2 IN      A       172.18.0.4				//客户端2域名所对应的IP
    root	IN		A		172.18.0.2				//邮件域名所对应的IP
    #配置完成后,重新启动DNS,可以重新启动容器也可以重新启动bind服务,下面我直接启动bind服务了
    root@fbc5c6c1a269:/etc/bind# systemctl restart bind9	
    #重启后,查看53号端口是否正在运行
    root@fbc5c6c1a269:/etc/bind# netstat -anpl | grep named
    	tcp        0      0 172.18.0.2:53           0.0.0.0:*               LISTEN      394/named           
    	tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      394/named           
    	tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      394/named           
    	tcp6       0      0 :::53                   :::*                    LISTEN      394/named           
    	udp        0      0 172.18.0.2:53           0.0.0.0:*                           394/named           
    	udp        0      0 127.0.0.1:53            0.0.0.0:*                           394/named           
    	udp6       0      0 :::53                   :::*                                394/named           
    	unix  2      [ ]         DGRAM                    105734   394/named       	
    

    启动成功,到这里我们的DNS配置就算做完了,下面我们进行测试

    测试

    我这里测试时使用了两个客户端主机,分别是client1以及client2

    修改客户端默认DNS地址

    修改DNS默认的地址有下面两个方法:

    1.第一种是修改resolv.conf系统配置文件来进行修改,修改内容如下:
    	nameserver 172.18.0.2		//修改ip地址为你dns的IP地址
    2.第二种是修改网络配置文件,在网络配置文件种增加下面项(注意ubuntu无法使用此步骤):
    网络配置文件路径:/etc/sysconfig/network-script/ifconf-eth0
    网络配置文件如下:
    	DEVICE=eth0			//网卡名称
    	ONBOOT=yes			//是否开机加载
    	BOOTPROTO=static	//设置静态ip
    	NETMASK=255.255.255.0	//子网掩码
    	IPADDR=172.18.0.3		//ip地址
    	GATEWAY=172.18.0.1		//网关
    	DNS1=172.18.0.2        	//DNS
    ubuntu修改配置文件设置DNS
    	network:
     	 version: 2		
     	 renderer: networkd		
     	 ethernets:
      	  enp0s3:		//网卡名称
       	   dhcp4: false		//是否自动获取
        	  addresses: [192.168.1.142/24]		//ip地址以及掩码
       	   gateway4: 192.168.1.1		//网关
       	   nameservers:			//下面是指定的DNS地址
                  addresses: [172.18.0.2]
    

    配置完成后就可以让我们进行测试了

    使用nslookup进行测试

    nslookup是一种网络管理命令行工具,可用于查询DNS域名和IP地址输入指令nslookup默认服务器和Address是当前上网所用的DNS服务器域名和地址A记录A(Address)记录指的是用来指定主机名或域名对应的IP记录。
    这次测试我就用nslookup进行测试了,如果大家觉得不太好,大家还可以配置web服务进行测试呦,在这里我就不进行web演示了

    客户端1进行测试:
    root@client1:~# nslookup dns.jkyst.xyz
    Server:		172.18.0.2
    Address:	172.18.0.2#53
    Name:	dns.jkyst.xyz
    Address: 172.18.0.2
    root@client1:~# nslookup client1.jkyst.xyz
    Server:		172.18.0.2
    Address:	172.18.0.2#53
    Name:	client2.jkyst.xyz
    Address: 172.18.0.4
    root@client1:~#  
    客户端2进行测试:
    root@client2:~# nslookup dns.jkyst.xyz
    Server:		172.18.0.2
    Address:	172.18.0.2#53
    Name:	dns.jkyst.xyz
    Address: 172.18.0.2
    root@client2:~# nslookup client1.jkyst.xyz
    Server:		172.18.0.2
    Address:	172.18.0.2#53
    Name:	client2.jkyst.xyz
    Address: 172.18.0.4
    root@client2:~#  
    

    ok确定没有问题

    上线

    下面就说说如何将之前的docker配置的dns服务器快速上线

    1.将容器生成为镜像
    	root@test:~# docker commit dns dns:latest		//生成镜像
    	sha256:660da4ca051f00aa2a459d030766a2c59a3a5338dd2e754a2aa109ebf49e1cf3
    	root@test:~# 
    	#查看镜像是否生成
    	root@test:~# docker images
    	REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
    	dns   latest              660da4ca051f        40 seconds ago      431MB
    	registry.cn-beijing.aliyuncs.com/stqc/dns   latest              c24136df62ae        26 hours ago        376MB
    	root@test:~# 
    2.将镜像另存为
    	root@test:~# docker save -o dns.tar dns:latest		//将容器报存为文件
    	root@test:~# ls			//查看是否有相关文件
    	dns.tar
    	root@test:~# 
    3.将镜像文件放到正式服务器,并启动容器
    	#将镜像文件进行导入到docker
    root@dns:~# docker load -i dns.tar 		//将镜像文件导入docker
    dfc7a90ce923: Loading layer [==================================================>]  74.23MB/74.23MB
    020f1d32db77: Loading layer [==================================================>]  989.2kB/989.2kB
    de2a5db5a95c: Loading layer [==================================================>]  15.36kB/15.36kB
    f6bc8c0eecde: Loading layer [==================================================>]  3.072kB/3.072kB
    e7591d8092df: Loading layer [==================================================>]  260.4MB/260.4MB
    0c6c54fbd833: Loading layer [==================================================>]  49.53MB/49.53MB
    fa7d6002eff3: Loading layer [==================================================>]  57.27MB/57.27MB
    Loaded image: dns:latest
    root@dns:~# docker images			//查看是否导入成功
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    dns                 latest              6cff411803cd        8 minutes ago       431MB
    root@dns:~# 
    #创建容器并进行启动
    root@dns:~# docker run --name dns -p 53:53 -v /opt/bind:/etc/bind -d dns:latest	
    655b2a7de6501cb9edd9667a38ca09e9c36d614efcfbcfbe115f5a60aba3fd1b
    root@dns:~# docker ps -a	//查看是否启动成功
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    944b9f9f4e5e        dns:latest          "/sbin/init"        13 seconds ago      Up 10 seconds                           dns
    root@dns:~# 
    #启动成功后进行测试:
    root@dns:~# nslookup dns.jkyst.xyz
    Server:		172.18.0.2
    Address:	172.18.0.2#53
    Name:	dns.jkyst.xyz
    Address: 172.18.0.2
    root@dns:~# nslookup client1.jkyst.xyz
    Server:		172.18.0.2
    Address:	172.18.0.2#53
    Name:	client2.jkyst.xyz
    Address: 172.18.0.4
    root@dns:~# 
    #OK解析成功
    

    到这里就已经完成了

  • 相关阅读:
    [HAOI2010]软件安装
    「HNOI2015」菜肴制作
    [ZJOI2007] 小Q的矩阵游戏 (模板—Dinic)
    「POI2012」约会 Rendezvous
    [APIO2016]划艇
    [CQOI2011]放棋子
    【SDOI2015】bzoj3990 排序
    [bzoj2242] [SDOI2011]计算器
    模板—BSGS
    【BZOJ1227】[SDOI2009]虔诚的墓主人
  • 原文地址:https://www.cnblogs.com/blxt/p/14501231.html
Copyright © 2020-2023  润新知