千家信息网

docker快速部署DNS,实现快速上线

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,```# 概念Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。这里我
千家信息网最后更新 2026年11月04日docker快速部署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相关软件包进行部署## 下载相关镜像下载镜像可以使用下面命令进行下载:```bash    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/dnsmasqUsing default tag: latestlatest: Pulling from andyshinn/dnsmasq1eae7a7426b0: Pull complete 4e20cc818d2e: Pull complete Digest: sha256:dbd1c08714ee9d7a3edb2729eac7e4bea3b88553f14c4d7821526d612437e0b4Status: Downloaded newer image for andyshinn/dnsmasq:latestdocker.io/andyshinn/dnsmasq:latestroot@ubuntu:~# docker imagesREPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZEandyshinn/dnsmasq                               latest              831c17422076        20 months ago       4.88MBroot@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            AUTOMATEDblxt/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: latestlatest: Pulling from stqc/dnsda6fc00e4d0b: Already exists c3c0be9d84b3: Already exists 9c1dda927878: Already exists 4b8880231fa0: Already exists a7d3d4ea8ca6: Already exists 6193a51f16ce: Pull complete Digest: sha256:25309761b9b046549b3488960d518fd234367748c899e2e3a58265f2c9cbc8f3Status: Downloaded newer image for registry.cn-beijing.aliyuncs.com/stqc/dns:latestregistry.cn-beijing.aliyuncs.com/stqc/dns:latestroot@ubuntu:~# docker images            //查看所有本地镜像REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZEregistry.cn-beijing.aliyuncs.com/stqc/dns   latest              c24136df62ae        2 hours ago         376MBblxt/ubuntu                                 latest              182d872a6abe        5 weeks ago         327MBroot@ubuntu:~# 

到这里镜像就下载成功了

创建并启动DNS容器

简单介绍三种创建方式

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

  1. 交互式
    这种方式可以让我们直接打印一些数据出来,比如:容器的ip地址
     root@test:~# docker run registry.cn-beijing.aliyuncs.com/stqc/dns ip addr    1: lo:  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 forever10: eth0@if11:  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 foreverroot@test:~# 

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

    root@test:~# root@test:~# docker run -it registry.cn-beijing.aliyuncs.com/stqc/dns /bin/bashroot@b9bc496a5028:/#                        //这是提供的交互式终端,类似于ssh连接
  2. 命令短暂模式
    先让我们使用容器进行打印一些东西
    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               NAMES5889013ad2fd        registry.cn-beijing.aliyuncs.com/stqc/dns   "/bin/echo 'hello wo…"   About a minute ago   Exited (0) About a minute ago                       optimistic_gouldroot@test:~# 

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

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

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

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

    这样就可以看到两个hello word了

  3. daemon模式
    daemon模式也叫守状态模式,也就是说让软件作为长时间服务运行!
    我们来举例说明:
    ```bashroot@test:~# docker run -d registry.cn-beijing.aliyuncs.com/stqc/dns /bin/sh -c "while true; do echo hello word; sleep 1;done" //每一秒执行一次
    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.启动容器```bashroot@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的交互式模式进行创建,并自动启动fbc5c6c1a26920bb94a5963cb7c7867e106f3f67ffb84c055849e332006c9077root@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.jkystroot@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域名所对应的IPclient1 IN      A       172.18.0.3              //客户端1域名所对应的IPclient2 IN      A       172.18.0.4              //客户端2域名所对应的IProot    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 namedtcp        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    //设置静态ipNETMASK=255.255.255.0   //子网掩码IPADDR=172.18.0.3       //ip地址GATEWAY=172.18.0.1      //网关DNS1=172.18.0.2         //DNSubuntu修改配置文件设置DNSnetwork: 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.xyzServer:     172.18.0.2Address:    172.18.0.2#53Name:   dns.jkyst.xyzAddress: 172.18.0.2root@client1:~# nslookup client1.jkyst.xyzServer:     172.18.0.2Address:    172.18.0.2#53Name:   client2.jkyst.xyzAddress: 172.18.0.4root@client1:~#  客户端2进行测试:root@client2:~# nslookup dns.jkyst.xyzServer:     172.18.0.2Address:    172.18.0.2#53Name:   dns.jkyst.xyzAddress: 172.18.0.2root@client2:~# nslookup client1.jkyst.xyzServer:     172.18.0.2Address:    172.18.0.2#53Name:   client2.jkyst.xyzAddress: 172.18.0.4root@client2:~#  

    ok确定没有问题

    上线

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

    1.将容器生成为镜像root@test:~# docker commit dns dns:latest       //生成镜像sha256:660da4ca051f00aa2a459d030766a2c59a3a5338dd2e754a2aa109ebf49e1cf3root@test:~# #查看镜像是否生成root@test:~# docker imagesREPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZEdns   latest              660da4ca051f        40 seconds ago      431MBregistry.cn-beijing.aliyuncs.com/stqc/dns   latest              c24136df62ae        26 hours ago        376MBroot@test:~# 2.将镜像另存为root@test:~# docker save -o dns.tar dns:latest      //将容器报存为文件root@test:~# ls         //查看是否有相关文件dns.tarroot@test:~# 3.将镜像文件放到正式服务器,并启动容器#将镜像文件进行导入到dockerroot@dns:~# docker load -i dns.tar      //将镜像文件导入dockerdfc7a90ce923: Loading layer [==================================================>]  74.23MB/74.23MB020f1d32db77: Loading layer [==================================================>]  989.2kB/989.2kBde2a5db5a95c: Loading layer [==================================================>]  15.36kB/15.36kBf6bc8c0eecde: Loading layer [==================================================>]  3.072kB/3.072kBe7591d8092df: Loading layer [==================================================>]  260.4MB/260.4MB0c6c54fbd833: Loading layer [==================================================>]  49.53MB/49.53MBfa7d6002eff3: Loading layer [==================================================>]  57.27MB/57.27MBLoaded image: dns:latestroot@dns:~# docker images           //查看是否导入成功REPOSITORY          TAG                 IMAGE ID            CREATED             SIZEdns                 latest              6cff411803cd        8 minutes ago       431MBroot@dns:~# #创建容器并进行启动root@dns:~# docker run --name dns -p 53:53 -v /opt/bind:/etc/bind -d dns:latest 655b2a7de6501cb9edd9667a38ca09e9c36d614efcfbcfbe115f5a60aba3fd1broot@dns:~# docker ps -a    //查看是否启动成功CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES944b9f9f4e5e        dns:latest          "/sbin/init"        13 seconds ago      Up 10 seconds                           dnsroot@dns:~# #启动成功后进行测试:root@dns:~# nslookup dns.jkyst.xyzServer:     172.18.0.2Address:    172.18.0.2#53Name:   dns.jkyst.xyzAddress: 172.18.0.2root@dns:~# nslookup client1.jkyst.xyzServer:     172.18.0.2Address:    172.18.0.2#53Name:   client2.jkyst.xyzAddress: 172.18.0.4root@dns:~# #OK解析成功

    到这里就已经完成了

容器 镜像 配置 文件 地址 域名 服务 测试 客户 客户端 命令 成功 交互式 服务器 模式 方式 网络 内容 名称 生成 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 有格互联网科技 哈尔滨大商圈互联网科技有限公司 中关村互联网 科技集团 互联网 科技创业 卓越科技(互联网 ) 致聘互联网科技 善班互联网科技有限公司 海南购全球互联网科技 互联网和高科技公司 中化能源互联网科技招聘 苏州铭阳互联网科技有限公司 消费医药和互联网科技 银川新华互联网科技学校联系电话 互联网数据科技专业 保险科技服务互联网营销体系 张召忠谈中国互联网科技 富国互联网科技002692 杭州融税互联网科技有限公司 长沙易易互联网科技有限公司 互联网的黑科技实验室 河南云网互联网络科技有限公司 互联网中国科技 互联网科技金融公司 中化能源互联网科技招聘 互联网科技大奖都有哪些公司 富国互联网科技002692 济南小医互联网科技有限公司招聘 山东蛋芒互联网科技有限公司 广东猫王互联网科技有限公司电话 互联网大会出现的黑科技
0