容器部署DNS你会吗?
docker快速部署DNS,实现快速上线
概念
Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。这里我将使用docker容器快速部署DNS域名解析服务器,并实现快速上线
环境介绍
- DNS服务器主机:172.18.0.2 域名:dns.jkyst.xyz
- 客户端机器:172.18.0.3 域名:client1.jkyst.xyz
- 客户端机器: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方式
- 交互式
这种方式可以让我们直接打印一些数据出来,比如:容器的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连接
- 命令短暂模式
先让我们使用容器进行打印一些东西
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你会吗?的更多相关文章
- Docker 容器部署 Consul 集群
Docker 容器部署 Consul 集群 一.docker安装与启动1.1安装docker[root@localhost /]# yum -y install docker-io 1.2更改配置文件 ...
- docker快速部署DNS,实现快速上线
概念Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.这里我将使用do ...
- OpenStack Newton:集虚拟化,裸金属和容器部署的统一云平台(转载)
2016-10-08木屐大数据在线 国庆长假第六天,OpenStack第十四版本Newton(牛顿?)发布,官方介绍中强调这是一个集虚拟化.裸金属和容器技术的一体化平台,可通过一套API来管理裸金属. ...
- Linux 自动化部署DNS服务器
Linux 自动化部署DNS服务器 1.首先配置主DNS服务器的IP地址,DNS地址一个写主dns的IP地址,一个写从dns的地址,这里也可以不写,在测试的时候在/etc/resolv.conf中添加 ...
- 微服务下的容器部署和管理平台Rancher
Rancher是什么 Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台.Rancher提供了在生产环境中使用的管理Docke ...
- 容器部署解决方案Docker
容器部署解决方案Docker 课程目标 目标1:了解Docker与虚拟机的不同点,相比的优势 目标2:掌握Docker的启动方法 目标3:掌握Docker镜像操作 目标4:掌握Docker容器操作 ...
- linux系统下部署DNS正向解析
DNS服务概述: DNS(Domain Name System)域名系统,能够提供域名与IP地址的解析服务. 正向解析 正向解析是指域名到IP 地址的解析过程. 部署DNS正向解析 DNS服务的三个配 ...
- docker 系列 - 修改容器的 DNS 服务器
# 查看容器的 dns 解析设置文件, 也可以检查docker 运行环境 DNS docker run busybox:latest cat /etc/resolv.conf # 为容器 mybusy ...
- php微服务框架 PHP-MSF 的容器部署和使用
评论:1 · 阅读:8412· 喜欢:1 一.需求 PHP-msf 是 Carema360 开发的 PHP 微服务框架,目前我没有实际用过,但是市面上的微服务框架要么在推崇 Spring 系,要么是 ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十六):容器部署项目
容器部署项目 这一章我们引入docker,采用docker容器的方式部署我们的项目. 首先需要有一个linux环境,并且安装 java 和 maven 以及 docker 环境,这个教程多如牛毛,不再 ...
随机推荐
- MindSpore1.3.0 GPU pip方式安装 —— Ubuntu18.04系统 (最终安装结果为成功)需要管理员权限,sudo安装
官网地址: https://www.mindspore.cn/install =========================================================== 安 ...
- 安装windows11的注意事项
进入到安装界面后,在选择时间和货币格式的时候选择:英语(世界),据说这样可以避免第三方软件的安装. KMS命令: slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX sl ...
- 【转载】 在PyTorch训练一个epoch时,模型不能接着训练,Dataloader卡死——在pytorch中尽量不要使用opencv而是使用PIL
版权声明:本文为CSDN博主「时光碎了天」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/u013289254/ ...
- VUE learn
Vue .js 的官方文档中是这样介绍它的. 简单小巧的核心,渐进式技术拢,足以应付任何规模的应用. 简单小巧是指 vue.js 压缩后大小仅有 17k .所谓渐进式(Progressive ),就是 ...
- 火山引擎ByteHouse助力车企实现高性能数据分析
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群. 新能源汽车市场正在迎来飞速发展时期.根据 IDC 预测,中国乘用车市场中,新能源车市场规模将在2028年超过 ...
- Win32 sdk 下树形控件响应鼠标单击与双击,获得选中项的名称
//窗口过程函数INT_PTR CALLBACK myWin::myWinDlgProc(HWND dlgHwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ...
- 华为交换机S5700-52C-SI配置vlan
环境准备:通过超级终端Hyper Terminal和console串口线链接华为交换机,用9600波特率链接 添加vlan <Quidway>system-view #由用户视图进入系统视 ...
- 安装 MinGW-w64
简介 MinGW-w64 是 MinGW 项目的 64 位版本.MinGW(Minimalist GNU for Windows)是 GCC 编译套件和 GNU Binutils 移植到 Window ...
- Linux 磁盘命名规则
IDE硬盘:早期的 IDE 接口硬盘被命名为hd[a-d],其中 hd 表示硬盘(Hard Disk),后面的字母 a 至 d 代表系统中第一至第四个 IDE 硬盘.不过,随着 SATA 接口硬盘的普 ...
- 【Mac + Appium + Java1.8(二)】之Android模拟器自动化测试脚本开发以及简易例子
直接上代码: import io.appium.java_client.AppiumDriver; import org.junit.After; import org.junit.Before; i ...