您好,登錄后才能下訂單哦!
```# 概念
Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,Docker 可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。這里我將使用docker容器快速部署DNS域名解析服務(wù)器,并實(shí)現(xiàn)快速上線
# 環(huán)境介紹
1. DNS服務(wù)器主機(jī):172.18.0.2 域名:dns.jkyst.xyz
2. 客戶端機(jī)器:172.18.0.3 域名:client1.jkyst.xyz
3. 客戶端機(jī)器:172.18.0.4 域名:client2.jkyst.xyz
# 部署DNS
這里說(shuō)一下DNS服務(wù)是由bind軟件包提供的,如果不想使用docker進(jìn)行部署,也可以進(jìn)行安裝bind相關(guān)軟件包進(jìn)行部署
## 下載相關(guān)鏡像
下載鏡像可以使用下面命令進(jìn)行下載:
```bash
docker search 鏡像名 //查找相關(guān)鏡像
docker pull 鏡像名 //下載相關(guān)鏡像
經(jīng)過(guò)查找之后選擇適合自己的版本
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:~#
下載相關(guān)鏡像
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:~#
上面鏡像是官方提供的相關(guān)鏡像,因?yàn)閔ub在國(guó)外所以有些鏡像下載起來(lái)比較慢,所以我這里提供了一些國(guó)內(nèi)的鏡像
杭州地區(qū):registry.cn-hangzhou.aliyuncs.com/stqc/
北京地區(qū):registry.cn-beijing.aliyuncs.com/stqc/
官網(wǎng)(docker hub):由于是官網(wǎng)地址可以直接使用:docker search blxt
進(jìn)行搜索即可
注意:由于鏡像無(wú)法提供相關(guān)列表名稱,大家可以使用docker search blxt
進(jìn)行搜索后,鏡像名加上面國(guó)內(nèi)地址就可以進(jìn)行國(guó)內(nèi)地址下載了,下面我給大家列了一個(gè)例子
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:~#
到這里鏡像就下載成功了
創(chuàng)建容器一般有三種創(chuàng)建方式,下面我簡(jiǎn)單介紹下這三種啟動(dòng)方式:交互式、命令短暫模式以及daemon方式
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:~#
也可以讓我們來(lái)一個(gè)bash的交互終端
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 //可以將我所寫的打印出來(lái)
root@test:~#
但是打印完成后,容器并沒(méi)有消失
root@test:~# docker ps -a //查看所有容器,可以看到這個(gè)容器是存在的
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:~#
讓我們?cè)賹⑷萜髦匦聠?dòng),會(huì)發(fā)現(xiàn)未出現(xiàn)hello word字樣
root@test:~# docker start optimistic_gould //啟動(dòng)容器
optimistic_gould //發(fā)現(xiàn)打印出來(lái)的是容器的名稱
root@test:~#
如果我們像讓他重新打印hello word,我們就要執(zhí)行下面命令了
root@test:~# docker logs optimistic_gould //此命令是再次執(zhí)行容器
hello word
hello word
root@test:~#
這樣就可以看到兩個(gè)hello word了
### 容器啟動(dòng)停止
1.啟動(dòng)容器
```bash
root@test:~# docker start 容器ID/容器名
2.重啟容器
root@test:~# docker restart 容器ID/容器名
3.關(guān)閉容器
root@test:~# docker stop 容器ID/容器名
root@test:~# docker run -itd --name dns --privileged registry.cn- beijing.aliyuncs.com/stqc/dns /sbin/init //以init的交互式模式進(jìn)行創(chuàng)建,并自動(dòng)啟動(dòng)
fbc5c6c1a26920bb94a5963cb7c7867e106f3f67ffb84c055849e332006c9077
root@test:~# docker exec -it dns /bin/bash //連接到容器并生成bash交互式
root@fbc5c6c1a269:/# //dns容器的命令行
DNS容器已經(jīng)配置完成,接下來(lái)就該配置DNS的一些配置了,比如正向解析的配置文件等
修改/etc/bind/named.conf.default-zones配置文件,配置如下:
#在配置文件中增加下面內(nèi)容
zone "jkyst.xyz" {
type master;
file "/etc/bind/db.jkyst";
};
#創(chuàng)建正向解析數(shù)據(jù)文件db.jkyst
root@fbc5c6c1a269:/etc/bind# touch db.jkyst
#在數(shù)據(jù)文件中添加以下內(nèi)容,下面為解析內(nèi)容,建議按照實(shí)際情況填寫
; 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域名所對(duì)應(yīng)的IP
client1 IN A 172.18.0.3 //客戶端1域名所對(duì)應(yīng)的IP
client2 IN A 172.18.0.4 //客戶端2域名所對(duì)應(yīng)的IP
root IN A 172.18.0.2 //郵件域名所對(duì)應(yīng)的IP
#配置完成后,重新啟動(dòng)DNS,可以重新啟動(dòng)容器也可以重新啟動(dòng)bind服務(wù),下面我直接啟動(dòng)bind服務(wù)了
root@fbc5c6c1a269:/etc/bind# systemctl restart bind9
#重啟后,查看53號(hào)端口是否正在運(yùn)行
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
啟動(dòng)成功,到這里我們的DNS配置就算做完了,下面我們進(jìn)行測(cè)試
我這里測(cè)試時(shí)使用了兩個(gè)客戶端主機(jī),分別是client1以及client2
修改DNS默認(rèn)的地址有下面兩個(gè)方法:
1.第一種是修改resolv.conf系統(tǒng)配置文件來(lái)進(jìn)行修改,修改內(nèi)容如下:
nameserver 172.18.0.2 //修改ip地址為你dns的IP地址
2.第二種是修改網(wǎng)絡(luò)配置文件,在網(wǎng)絡(luò)配置文件種增加下面項(xiàng)(注意ubuntu無(wú)法使用此步驟):
網(wǎng)絡(luò)配置文件路徑:/etc/sysconfig/network-script/ifconf-eth0
網(wǎng)絡(luò)配置文件如下:
DEVICE=eth0 //網(wǎng)卡名稱
ONBOOT=yes //是否開(kāi)機(jī)加載
BOOTPROTO=static //設(shè)置靜態(tài)ip
NETMASK=255.255.255.0 //子網(wǎng)掩碼
IPADDR=172.18.0.3 //ip地址
GATEWAY=172.18.0.1 //網(wǎng)關(guān)
DNS1=172.18.0.2 //DNS
ubuntu修改配置文件設(shè)置DNS
network:
version: 2
renderer: networkd
ethernets:
enp0s3: //網(wǎng)卡名稱
dhcp4: false //是否自動(dòng)獲取
addresses: [192.168.1.142/24] //ip地址以及掩碼
gateway4: 192.168.1.1 //網(wǎng)關(guān)
nameservers: //下面是指定的DNS地址
addresses: [172.18.0.2]
配置完成后就可以讓我們進(jìn)行測(cè)試了
nslookup是一種網(wǎng)絡(luò)管理命令行工具,可用于查詢DNS域名和IP地址輸入指令nslookup默認(rèn)服務(wù)器和Address是當(dāng)前上網(wǎng)所用的DNS服務(wù)器域名和地址A記錄A(Address)記錄指的是用來(lái)指定主機(jī)名或域名對(duì)應(yīng)的IP記錄。
這次測(cè)試我就用nslookup進(jìn)行測(cè)試了,如果大家覺(jué)得不太好,大家還可以配置web服務(wù)進(jìn)行測(cè)試呦,在這里我就不進(jìn)行web演示了
客戶端1進(jìn)行測(cè)試:
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進(jìn)行測(cè)試:
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確定沒(méi)有問(wèn)題
下面就說(shuō)說(shuō)如何將之前的docker配置的dns服務(wù)器快速上線
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 //將容器報(bào)存為文件
root@test:~# ls //查看是否有相關(guān)文件
dns.tar
root@test:~#
3.將鏡像文件放到正式服務(wù)器,并啟動(dòng)容器
#將鏡像文件進(jìn)行導(dǎo)入到docker
root@dns:~# docker load -i dns.tar //將鏡像文件導(dǎo)入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 //查看是否導(dǎo)入成功
REPOSITORY TAG IMAGE ID CREATED SIZE
dns latest 6cff411803cd 8 minutes ago 431MB
root@dns:~#
#創(chuàng)建容器并進(jìn)行啟動(dòng)
root@dns:~# docker run --name dns -p 53:53 -v /opt/bind:/etc/bind -d dns:latest
655b2a7de6501cb9edd9667a38ca09e9c36d614efcfbcfbe115f5a60aba3fd1b
root@dns:~# docker ps -a //查看是否啟動(dòng)成功
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
944b9f9f4e5e dns:latest "/sbin/init" 13 seconds ago Up 10 seconds dns
root@dns:~#
#啟動(dòng)成功后進(jìn)行測(cè)試:
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解析成功
到這里就已經(jīng)完成了
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。