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相关软件包进行部署
下载相关镜像
下载镜像可以使用下面命令进行下载:
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, … [OK] jpillora/dnsmasq dnsmasq with a web UI [OK] gists/dnscrypt-proxy A flexible DNS proxy, with support [OK] tutum/dnsutils Provides DNS utilities like dig and nslookup [OK] defreitas/dns-proxy-server Solve your DNS hosts from docker containers,… [OK] jedisct1/dnscrypt-server A non-censoring, non-logging, DNSSEC-capable… [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 months ago .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制作的镜像 blxt/tomcat 基于centos8的tomcat9 blxt/mariadb 基于centos8制作的镜像 blxt/mysql-proxy 基于centos8制作的镜像 blxt/dns 基于ubuntu的DNS版本bind9 blxt/ubuntu ubuntu19 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 hours ago 376MB blxt/ubuntu latest 182d872a6abe weeks ago 327MB root@ubuntu:~#
到这里镜像就下载成功了
创建并启动DNS容器
简单介绍三种创建方式
创建容器一般有三种创建方式,下面我简单介绍下这三种启动方式:交互式、命令短暂模式以及daemon方式
1. 交互式
这种方式可以让我们直接打印一些数据出来,比如:容器的ip地址
root@test:~# docker run registry.cn-beijing.aliyuncs.com/stqc/dns ip addr : lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen link/loopback ::::: brd ::::: inet scope host lo valid_lft forever preferred_lft forever : eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UP group default link/ether ::ac::: brd ff:ff:ff:ff:ff:ff link-netnsid inet 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连接
2. 命令短暂模式
先让我们使用容器进行打印一些东西
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 ) 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模式也叫守状态模式,也就是说让软件作为长时间服务运行!
我们来举例说明:
root@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 seconds ago Up 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
容器启动停止
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
@ IN SOA www.jkyst.xyz. root.jkyst.xyz. (
; Serial
; Refresh
; Retry
; Expire
) ; Negative Cache TTL
IN NS www.jkyst.xyz. //www域名
IN MX 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 /named
tcp /named
tcp /named
tcp6 ::: :::* LISTEN /named
udp /named
udp /named
udp6 ::: :::* /named
unix [ ] DGRAM /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: renderer: networkd ethernets: enp0s3: //网卡名称 dhcp4: false //是否自动获取 addresses: [] //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: Name: dns.jkyst.xyz Address: 172.18.0.2 root@client1:~# nslookup client1.jkyst.xyz Server: 172.18.0.2 Address: Name: client2.jkyst.xyz Address: 172.18.0.4 root@client1:~# 客户端2进行测试: root@client2:~# nslookup dns.jkyst.xyz Server: 172.18.0.2 Address: Name: dns.jkyst.xyz Address: 172.18.0.2 root@client2:~# nslookup client1.jkyst.xyz Server: 172.18.0.2 Address: 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 seconds ago 431MB registry.cn-beijing.aliyuncs.com/stqc/dns latest c24136df62ae 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 : -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 seconds ago Up seconds dns root@dns:~#
启动成功后进行测试:
root@dns:~# nslookup dns.jkyst.xyz Server: 172.18.0.2 Address: Name: dns.jkyst.xyz Address: 172.18.0.2 root@dns:~# nslookup client1.jkyst.xy Server: 172.18.0.2 Address: Name: client2.jkyst.xyz Address: 172.18.0.4 root@dns:~#
OK解析成功
到这里就已经完成了
docker快速部署DNS,实现快速上线的更多相关文章
- PassengerNginxdebian快速部署Rails
Passenger/Nginx/Debian快速部署Rails PassengerNginxdebian快速部署Rails 安装所需的linux包 sudo apt-get install ...
- HyperLedger/Fabric SDK使用Docker容器镜像快速部署上线
HyperLedger/Fabric SDK Docker Image 该项目在github上的地址是:https://github.com/aberic/fabric-sdk-container ( ...
- 【技术解析】如何用Docker实现SequoiaDB集群的快速部署
1. 背景 以Docker和Rocket为代表的容器技术现在正变得越来越流行,它改变着公司和用户创建.发布.运行分布式应用的方式,在未来5年将给云计算行业带来它应有的价值.它的诱人之处在于: 1)资源 ...
- Docker环境 ELK 快速部署
Docker环境 ELK快速部署 环境 Centos 7.4 , Docker version 17.12 Docker至少3GB内存: #内核配置 echo ' vm.max_map_count = ...
- docker 快速部署ES集群 spark集群
1) 拉下来 ES集群 spark集群 两套快速部署环境, 并只用docker跑起来,并保存到私库. 2)弄清楚怎么样打包 linux镜像(或者说制作). 3)试着改一下,让它们跑在集群里面. 4) ...
- Docker+Nextcloud快速部署个人网盘
各位大佬好,,,萌新顾北清又回来更新了,今天要快速部署一个人网盘. 有多快呢,,,5分钟吧,因为我们使用Docker部署. Docker基础可以看看我之前的博文.(点这里点这里) 那么,,,开始吧. ...
- 私活利器,docker快速部署node.js应用
http://cnodejs.org/topic/53f494d9bbdaa79d519c9a4a 最近研究了几天docker的快速部署,感觉很有新意,非常轻量级和方便,打算在公司推广一下,解放运维, ...
- 使用Docker快速部署ELK分析Nginx日志实践(二)
Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...
- 使用Docker快速部署ELK分析Nginx日志实践
原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...
随机推荐
- 【python3基础】命令行参数及 argparse
目录 命令行参数及 argparse 包 argparse 传递 bool 参数错误做法 argparse 传递 bool 参数正确做法 1 argparse 传递 bool 参数正确做法 2 Ref ...
- 通俗地说逻辑回归【Logistic regression】算法(一)
在说逻辑回归前,还是得提一提他的兄弟,线性回归.在某些地方,逻辑回归算法和线性回归算法是类似的.但它和线性回归最大的不同在于,逻辑回归是作用是分类的. 还记得之前说的吗,线性回归其实就是求出一条拟合空 ...
- Node配合WebSocket做多文件下载以及进度回传
起因 为什么做这个东西,是突然间听一后端同事说起Annie这个东西,发现这个东西下载视频挺方便的,会自动爬取网页中的视频,然后整理成列表.发现用命令执行之后是下面的样子: 心里琢磨了下,整一个界面玩一 ...
- QHDYZ模拟赛20191027 提前透题
你们想的美 我给你们透一下题目名称 别刷博客了快去做题
- C++学习笔记10_输入输出流.文件读写
//从键盘输入到程序,叫标准input:从程序输出到显示器,叫标准output:一并叫标准I/O //文件的输入和输出,叫文件I/O cout<<"hellow word&quo ...
- Java IO编程——文件拷贝
在操作系统里面有一个copy命令,这个命令的主要功能是可以实现文件的拷贝处理,现在要求模拟这个命令,通过初始化参数输入拷贝的源文件路径与拷贝的目标路径实现文件的拷贝处理. 需求分析: ·需要实现文件的 ...
- LVS DR模式实践
client:192.168.4.10/24 proxy:192.168.4.5/24 VIP: 192.168.4.15/24 web1:192.168.4.100/24 VIP:192.168 ...
- [考试反思]1106csp-s模拟测试103: 渺茫
7点之前上不了博客,用gedit写的.谅解一下. 看起来不是特别惨?但是被sdfz爆踩了...而且其实并不能说“不是特别惨”吧90分算个啥啊?还凑不出个T2的AC难易度评估错误,T2是最简单的没看出来 ...
- 【IOS开发学习—OC篇】
一.instancetype和id关键字的区别 1)instancetype表示方法的返回类型和调用方法的对象类型相同. 2)在Object-C引入instancetype之前,初始化方法的返回类型都 ...
- UiPath之Word转换为PDF
前几天在手机上看到其他的文章,里面提到如何将Word转换为PDf,在UiPath的ManagePackage中,下载一个WordToPDF的包, 我按照上面的方法试着做了一下,但是在转换的时候很不稳定 ...