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相关软件包进行部署
## 下载相关镜像
下载镜像可以使用下面命令进行下载:
```bash
docker search 镜像名 //查找相关镜像
docker pull 镜像名 //下载相关镜像

经过查找之后选择适合自己的版本

[email protected]:~# 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]
[email protected]:~# 

下载相关镜像

[email protected]:~# 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
[email protected]:~# docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
andyshinn/dnsmasq                               latest              831c17422076        20 months ago       4.88MB
[email protected]:~# 

上面镜像是官方提供的相关镜像,因为hub在国外所以有些镜像下载起来比较慢,所以我这里提供了一些国内的镜像
杭州地区:registry.cn-hangzhou.aliyuncs.com/stqc/
北京地区:registry.cn-beijing.aliyuncs.com/stqc/
官网(docker hub):由于是官网地址可以直接使用:docker search blxt进行搜索即可

注意:由于镜像无法提供相关列表名称,大家可以使用docker search blxt进行搜索后,镜像名加上面国内地址就可以进行国内地址下载了,下面我给大家列了一个例子

[email protected]:~# 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
[email protected]:~# 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
[email protected]:~# 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
[email protected]:~# 

到这里镜像就下载成功了

创建并启动DNS容器

简单介绍三种创建方式

创建容器一般有三种创建方式,下面我简单介绍下这三种启动方式:交互式、命令短暂模式以及daemon方式

  1. 交互式
    这种方式可以让我们直接打印一些数据出来,比如:容器的ip地址

     [email protected]:~# 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: [email protected]: <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
    [email protected]:~# 

    也可以让我们来一个bash的交互终端

    [email protected]:~#
    [email protected]:~# docker run -it registry.cn-beijing.aliyuncs.com/stqc/dns /bin/bash
    [email protected]:/#                        //这是提供的交互式终端,类似于ssh连接
  2. 命令短暂模式
    先让我们使用容器进行打印一些东西
    [email protected]:~# docker run registry.cn-beijing.aliyuncs.com/stqc/dns /bin/echo "hello word"
    hello word              //可以将我所写的打印出来
    [email protected]:~# 

    但是打印完成后,容器并没有消失

    [email protected]:~# 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
    [email protected]:~# 

    让我们再将容器重新启动,会发现未出现hello word字样

     [email protected]:~# docker start optimistic_gould             //启动容器
        optimistic_gould            //发现打印出来的是容器的名称
    [email protected]:~# 

    如果我们像让他重新打印hello word,我们就要执行下面命令了

    [email protected]:~# docker logs  optimistic_gould          //此命令是再次执行容器
        hello word
        hello word
    [email protected]:~# 

    这样就可以看到两个hello word了

  3. daemon模式
    daemon模式也叫守状态模式,也就是说让软件作为长时间服务运行!
    我们来举例说明:
    ```[email protected]:~# docker run -d registry.cn-beijing.aliyuncs.com/stqc/dns /bin/sh -c "while true; do echo hello word; sleep 1;done" //每一秒执行一次
    c334e679b334d64dae25f1f6193550cf029135496e3c4ea9f355ee263a326837
    [email protected]:~# 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
    [email protected]:~# docker logs dazzling_mccarthy //打印容器的输出
    hello word
    hello word
    hello word
    [email protected]:~# docker attach dazzling_mccarthy //实时查看容器输出
    hello word
    hello word
    hello word
    hello word
    ### 容器启动停止
    1.启动容器
    ```bash
    [email protected]:~# docker start 容器ID/容器名

    2.重启容器

    [email protected]:~# docker restart 容器ID/容器名

    3.关闭容器

    [email protected]:~# docker stop 容器ID/容器名

    创建dns交互式容器

    [email protected]:~# docker run -itd --name dns --privileged registry.cn-   beijing.aliyuncs.com/stqc/dns /sbin/init        //以init的交互式模式进行创建,并自动启动
    fbc5c6c1a26920bb94a5963cb7c7867e106f3f67ffb84c055849e332006c9077
    [email protected]:~# docker exec -it dns /bin/bash      //连接到容器并生成bash交互式
    [email protected]:/#            //dns容器的命令行

    配置DNS容器相关配置

    DNS容器已经配置完成,接下来就该配置DNS的一些配置了,比如正向解析的配置文件等
    修改/etc/bind/named.conf.default-zones配置文件,配置如下:

    #在配置文件中增加下面内容
    zone "jkyst.xyz" {
        type master;
        file "/etc/bind/db.jkyst";
    };
    #创建正向解析数据文件db.jkyst
    [email protected]:/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服务了
    [email protected]:/etc/bind# systemctl restart bind9
    #重启后,查看53号端口是否正在运行
    [email protected]:/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进行测试:
    [email protected]:~# nslookup dns.jkyst.xyz
    Server:     172.18.0.2
    Address:    172.18.0.2#53
    Name:   dns.jkyst.xyz
    Address: 172.18.0.2
    [email protected]:~# nslookup client1.jkyst.xyz
    Server:     172.18.0.2
    Address:    172.18.0.2#53
    Name:   client2.jkyst.xyz
    Address: 172.18.0.4
    [email protected]:~#
    客户端2进行测试:
    [email protected]:~# nslookup dns.jkyst.xyz
    Server:     172.18.0.2
    Address:    172.18.0.2#53
    Name:   dns.jkyst.xyz
    Address: 172.18.0.2
    [email protected]:~# nslookup client1.jkyst.xyz
    Server:     172.18.0.2
    Address:    172.18.0.2#53
    Name:   client2.jkyst.xyz
    Address: 172.18.0.4
    [email protected]:~#  

    ok确定没有问题

    上线

    下面就说说如何将之前的docker配置的dns服务器快速上线

    1.将容器生成为镜像
    [email protected]:~# docker commit dns dns:latest       //生成镜像
    sha256:660da4ca051f00aa2a459d030766a2c59a3a5338dd2e754a2aa109ebf49e1cf3
    [email protected]:~#
    #查看镜像是否生成
    [email protected]:~# 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
    [email protected]:~#
    2.将镜像另存为
    [email protected]:~# docker save -o dns.tar dns:latest      //将容器报存为文件
    [email protected]:~# ls         //查看是否有相关文件
    dns.tar
    [email protected]:~#
    3.将镜像文件放到正式服务器,并启动容器
    #将镜像文件进行导入到docker
    [email protected]:~# 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
    [email protected]:~# docker images           //查看是否导入成功
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    dns                 latest              6cff411803cd        8 minutes ago       431MB
    [email protected]:~#
    #创建容器并进行启动
    [email protected]:~# docker run --name dns -p 53:53 -v /opt/bind:/etc/bind -d dns:latest
    655b2a7de6501cb9edd9667a38ca09e9c36d614efcfbcfbe115f5a60aba3fd1b
    [email protected]:~# docker ps -a    //查看是否启动成功
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    944b9f9f4e5e        dns:latest          "/sbin/init"        13 seconds ago      Up 10 seconds                           dns
    [email protected]:~#
    #启动成功后进行测试:
    [email protected]:~# nslookup dns.jkyst.xyz
    Server:     172.18.0.2
    Address:    172.18.0.2#53
    Name:   dns.jkyst.xyz
    Address: 172.18.0.2
    [email protected]:~# nslookup client1.jkyst.xyz
    Server:     172.18.0.2
    Address:    172.18.0.2#53
    Name:   client2.jkyst.xyz
    Address: 172.18.0.4
    [email protected]:~#
    #OK解析成功

    到这里就已经完成了

原文地址:https://blog.51cto.com/14184380/2454932

时间: 2024-10-07 20:37:57

docker快速部署DNS,实现快速上线的相关文章

PassengerNginxdebian快速部署Rails

Passenger/Nginx/Debian快速部署Rails PassengerNginxdebian快速部署Rails 安装所需的linux包 sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libxml2-dev libxslt-dev autoconf libc6-d

HyperLedger/Fabric SDK使用Docker容器镜像快速部署上线

HyperLedger/Fabric SDK Docker Image 该项目在github上的地址是:https://github.com/aberic/fabric-sdk-container (感谢Star). 这是一个基于fabric-sdk-java的项目,该项目的主要目的是简化HyperLedger/Fabric开发人员在SDK应用层上的工作流程,使得开发和部署更加简单. 该项目使用方便,只需要你的服务器上部署有Docker及docker compose环境即可,通过docker-c

运维人员的解放----Docker快速部署

Docker是一个用了一种新颖方式实现的超轻量虚拟机,在实现的原理和应用上还是和VM有巨大差别,专业的叫法是应用容器(Application Container).(我个人还是喜欢称虚拟机) Docker应用容器相对于 VM 有以下几个优点: 启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久 资源利用率高,一台普通PC 可以跑上千个容器,你跑上千个 VM 试试 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源 因为VM 的 Hypervi

【技术解析】如何用Docker实现SequoiaDB集群的快速部署

1. 背景 以Docker和Rocket为代表的容器技术现在正变得越来越流行,它改变着公司和用户创建.发布.运行分布式应用的方式,在未来5年将给云计算行业带来它应有的价值.它的诱人之处在于: 1)资源独立.隔离 资源隔离是云计算平台的最基本需求.Docker通过Linux namespace, cgroup限制了硬件资源与软件运行环境,与宿主机上的其他应用实现了隔离,做到了互不影响.不同应用或服务以"集装箱"(container)为单位装"船"或卸"船&q

Docker+Nextcloud快速部署个人网盘

各位大佬好,,,萌新顾北清又回来更新了,今天要快速部署一个人网盘. 有多快呢,,,5分钟吧,因为我们使用Docker部署. Docker基础可以看看我之前的博文.(点这里点这里) 那么,,,开始吧. 实验环境:小伙伴的阿里云服务器,安装的是Centos7的系统,要安装的网盘叫Nextcloud 下面开始安装 第一步 老规矩,先安装Docker环境. 命令如下: [[email protected] ~]# yum install -y docker Loaded plugins: fastest

Docker 快速部署Zabbix-server

玩Docker有段时间了,最近需要多个地方快速部署zabbix监控,所以使用docker可以快速部署,省去繁琐的安装过程. 组成:mysql //可以使用现成的mysql或者自行docker搭建zabbix-server-mysql //zabbix-server后台程序zabbix-web-nginx-mysql //zabbix-server前台web程序,包含phpzabbix-agent //zabbix客户端 #安装mysql--省略-- #安装zabbix-server-mysql后

docker之快速部署gogs git

前言 gogs简介 Gogs 是一款极易搭建的自助 Git 服务. Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux.Mac OS X.Windows 以及 ARM 平台. 为什么使用gogs gogs轻量 gogs自带git update gogs操作简洁 基于docker快速搭建 准备数据库 如果之前没有数据库,可以使用docker快速部署mysq

docker 快速部署nacos注册中心

docker 快速部署nacos注册中心 拉去并启动docker-compose 服务 # git 拉去相关文件 git clone https://github.com/nacos-group/nacos-docker.git # 进入文件夹 cd nacos-docker/example # 运行docker-compose 服务 docker-compose -f standalone-mysql.yaml up # 关闭 容器服务命令 docker-compose -f standalo

使用kubeadm快速部署Kubernetes(v1.12.1)集群---来源:马哥教育马哥原创

使用kubeadm快速部署Kubernetes(v1.12.1)集群------来源:马哥教育马哥原创 Kubernetes技术已经成为了原生云技术的事实标准,它是目前基础软件领域最为热门的分布式调度和管理平台.于是,Kubernetes也几乎成了时下开发工程师和运维工程师必备的技能之一. 一.主机环境预设 1.测试环境说明 测试使用的Kubernetes集群可由一个master主机及一个以上(建议至少两个)node主机组成,这些主机可以是物理服务器,也可以运行于vmware.virtualbo