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    鏡像名     //下載相關鏡像

通過查找以後選擇適合本身的版本mysql

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:~#

下載相關鏡像nginx

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進行搜索後,鏡像名加上面國內地址就能夠進行國內地址下載了,下面我給你們列了一個例子web

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:~#

到這裏鏡像就下載成功了sql

建立並啓動DNS容器

簡單介紹三種建立方式

建立容器通常有三種建立方式,下面我簡單介紹下這三種啓動方式:交互式、命令短暫模式以及daemon方式docker

  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的交互終端ubuntu

    root@test:~# 
    root@test:~# docker run -it registry.cn-beijing.aliyuncs.com/stqc/dns /bin/bash
    root@b9bc496a5028:/#                        //這是提供的交互式終端,相似於ssh鏈接
  2. 命令短暫模式
    先讓咱們使用容器進行打印一些東西
    root@test:~# docker run registry.cn-beijing.aliyuncs.com/stqc/dns /bin/echo "hello word"
    hello word              //能夠將我所寫的打印出來
    root@test:~#

    可是打印完成後,容器並無消失centos

    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字樣tomcat

    root@test:~# docker start optimistic_gould             //啓動容器
        optimistic_gould            //發現打印出來的是容器的名稱
    root@test:~#

    若是咱們像讓他從新打印hello word,咱們就要執行下面命令了bash

    root@test:~# docker logs  optimistic_gould          //此命令是再次執行容器
        hello word
        hello word
    root@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.啓動容器
    ```bash
    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解析成功

    到這裏就已經完成了

相關文章
相關標籤/搜索