```# 概念 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
建立容器通常有三種建立方式,下面我簡單介紹下這三種啓動方式:交互式、命令短暫模式以及daemon方式docker
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鏈接
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了服務器
### 容器啓動中止 1.啓動容器 ```bash root@test:~# docker start 容器ID/容器名
2.重啓容器
root@test:~# docker restart 容器ID/容器名
3.關閉容器
root@test:~# docker stop 容器ID/容器名
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的一些配置了,好比正向解析的配置文件等
修改/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默認的地址有下面兩個方法:
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是一種網絡管理命令行工具,可用於查詢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解析成功
到這裏就已經完成了