概念

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解析成功

到这里就已经完成了

容器部署DNS你会吗?的更多相关文章

  1. Docker 容器部署 Consul 集群

    Docker 容器部署 Consul 集群 一.docker安装与启动1.1安装docker[root@localhost /]# yum -y install docker-io 1.2更改配置文件 ...

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

    概念Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.这里我将使用do ...

  3. OpenStack Newton:集虚拟化,裸金属和容器部署的统一云平台(转载)

    2016-10-08木屐大数据在线 国庆长假第六天,OpenStack第十四版本Newton(牛顿?)发布,官方介绍中强调这是一个集虚拟化.裸金属和容器技术的一体化平台,可通过一套API来管理裸金属. ...

  4. Linux 自动化部署DNS服务器

    Linux 自动化部署DNS服务器 1.首先配置主DNS服务器的IP地址,DNS地址一个写主dns的IP地址,一个写从dns的地址,这里也可以不写,在测试的时候在/etc/resolv.conf中添加 ...

  5. 微服务下的容器部署和管理平台Rancher

    Rancher是什么 Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台.Rancher提供了在生产环境中使用的管理Docke ...

  6. 容器部署解决方案Docker

      容器部署解决方案Docker 课程目标 目标1:了解Docker与虚拟机的不同点,相比的优势 目标2:掌握Docker的启动方法 目标3:掌握Docker镜像操作 目标4:掌握Docker容器操作 ...

  7. linux系统下部署DNS正向解析

    DNS服务概述: DNS(Domain Name System)域名系统,能够提供域名与IP地址的解析服务. 正向解析 正向解析是指域名到IP 地址的解析过程. 部署DNS正向解析 DNS服务的三个配 ...

  8. docker 系列 - 修改容器的 DNS 服务器

    # 查看容器的 dns 解析设置文件, 也可以检查docker 运行环境 DNS docker run busybox:latest cat /etc/resolv.conf # 为容器 mybusy ...

  9. php微服务框架 PHP-MSF 的容器部署和使用

    评论:1 · 阅读:8412· 喜欢:1 一.需求 PHP-msf 是 Carema360 开发的 PHP 微服务框架,目前我没有实际用过,但是市面上的微服务框架要么在推崇 Spring 系,要么是  ...

  10. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十六):容器部署项目

    容器部署项目 这一章我们引入docker,采用docker容器的方式部署我们的项目. 首先需要有一个linux环境,并且安装 java 和 maven 以及 docker 环境,这个教程多如牛毛,不再 ...

随机推荐

  1. nvidia显卡服务器,负载严重,温度爆表,如何解决 —— 降低功率、降频

    设置功率为180W: sudo nvidia-smi -pl 180 为指定显卡设置功率: (-i 后接显卡号) sudo nvidia-smi -pl 180 -i 0,1,2,3

  2. ComfyUI插件:ComfyUI_Noise节点

    前言: 学习ComfyUI是一场持久战,ComfyUI_Noise是对ComfyUI中的噪声进行控制的一个插件库,该库可以完成图像噪声的反推,并通过采样再以几乎无损的方式返回原图,通过该库的使用可以更 ...

  3. TSP 的遗传算法

    省流:不如模拟退火 打 OI 的时候一直对乱搞很感兴趣,只是没时间学,现在算是弥补一下吧 旅行商问题(Traveling Salesman Problem, TSP):求无向图边权和最小的哈密顿回路 ...

  4. Win32 处理多个按钮共用一个事件消息

    今天在学习制作计算器小程序中,碰到要多个按钮共用一个事件的问题, 现记录下来. 在窗体上按钮排列 排列的时候要按顺序排放,也就是说,0-9的ID号要连着的. #define IDD_DIALOG1 1 ...

  5. 004.MinIO-DirectPV分布式存储部署

    MinIO部署介绍 部署概述 Kubernetes hostpath.local和本地静态配置都存在需要事先在node节点准备好可用的块存储或文件系统,例如对插入的硬盘,或者磁盘阵列做分区格式化,文件 ...

  6. C++ was not declared in this scope

    大概一搜百度,没搜到想要的结果,后面自己发现问题,由于是第二次犯这个错误(第一次很快发现,这一次找了比较久),所以记录一下 当调用一个数据结构或者一个函数的时候,出现这个语句,首先看相关的头文件有没有 ...

  7. 常见 URI 协议

    mailto mailto 是一种 URI(统一资源标识符)协议,主要用于在 Web 页面中创建电子邮件链接.当用户点击使用 mailto 协议的链接时,系统会自动打开默认的电子邮件客户端,并在新邮件 ...

  8. 禁止 SSH 传递 locale 环境变量

    SSH 在连接远程机器时默认会传递一些环境变量,其中就包括你本机的 locale 变量.这会导致远程机器的 locale 配置变成和你本地主机一样.有时候我们不希望这种行为,我们可以通过修改 SSH ...

  9. 数据库中查询含有某个emoji表情的行数据

    数据库中查询含有某个emoji表情的行数据 MySQL的情况 代码如下 ​ create table tt6(id int, name varchar(800)); insert into tt6 s ...

  10. 6.9找回机制接口安全&验证码token接口

    响应包response burp截取拦截,改相应包: 思路:此处应该若是修改密码,先抓到修改成功数据包(截取验证关键字),在替换为需要绕过的数据包,截取response数据包,修改验证成功关键字达到绕 ...