[Docker]Build DNS Server With Alpine
@ GordonWei · Monday, Jan 11, 2021 · 3 minute read · Update at Jan 11, 2021

Step 1 Build Image With Alpine Linux

Using Minimal Alpine Linux And Install Bind, Openrc(Use For Process Run) And Setting Openrc With Bind.

Create Folder

mkdir -p /container/build/named && cd /container/build/named

Create dockerfile

vim dockerfile

FROM alpine:latest
MAINTAINER GordonWei wei@kmp.tw
RUN apk add bind openrc
RUN mkdir -p /run/openrc && touch /run/openrc/softlevel
RUN rc-update -u named

Volume ["/sys/fs/cgroup"]

Step 2 Add File named.conf, zone_files To Some Folder.

In This Case For Example, We Use test.com.

Create Foleder

mkdir -p /docker/ns/conf/zone && cd /docker/ns/conf

name.conf

vim named.conf

options {
  directory "/var/bind";
  pid-file "/var/run/named/named.pid";
  recursion yes;
  forwarders { 8.8.8.8; };
  allow-transfer { any; };
  allow-query { any; };
  listen-on { any; };
  listen-on-v6 { none; };
};

zone "test.com" IN {
  type master;
  file "/etc/bind/zone/test.com";
};

test.com

vim zone/test.com

$TTL 38400
@ IN SOA ns.test.com. admin.test.com. (
2       ;Serial
600     ;Refresh
300     ;Retry
60480   ;Expire
600 )   ;Negative Cache TTL

@       IN      NS      ns.test.com.
@       IN      NS      ns2.test.com.
@       IN      MX  1   127.0.0.1
ns      IN      A       127.0.0.1
ns2     IN      A       127.0.0.2
www     IN      A       8.8.8.8

Step 3 Build Image

Using docker build command.

cd /container/build/named
docker build -t gordon/ns .

Step 4 Create docker-compose File

In My Case, I’ll Create Service Foleder For Each

Create Folder

mkdir /container/ns && cd /container/ns

Create docker-compose File

vim docker-compose.yml

version: '3'
services:
  dns:
    image: gordon/ns
    hostname: ns
    restart: always
    ports:
    - 53:53
    - 53:53/udp
    volumes:
    - /container/dns/conf/named.conf:/etc/bind/named.conf:z
    - /container/dns/conf/zone/:/etc/bind/zone/:z
    command: named -c /etc/bind/named.conf -g -u named

Step 5 Run Service With docker-compose

Make Sure Where Are You.

pwd && ls
/container/ns
conf  docker-compose.yml

Run docker-compose Command

docker-compose -up -d

Step 6 Verify Service

Verify Local Domain

dig @127.0.0.1 ns.test.com

; <<>> DiG 9.16.1-Ubuntu <<>> @127.0.0.1 ns.test.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9242
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 00000000001230210302103210302103 (good)
;; QUESTION SECTION:
;ns.test.com.			IN	A

;; ANSWER SECTION:
ns.test.com.		38400	IN	A	127.0.0.1

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Jan 11 06:57:19 UTC 2021
;; MSG SIZE  rcvd: 82

Verify Google (Optional)

dig @127.0.0.1 google.com

; <<>> DiG 9.16.1-Ubuntu <<>> @127.0.0.1 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18637
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 12345678901234567890 (good)
;; QUESTION SECTION:
;google.com.			IN	A

;; ANSWER SECTION:
google.com.		159	IN	A	172.217.27.142

;; Query time: 16 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Jan 11 06:59:37 UTC 2021
;; MSG SIZE  rcvd: 83

GordonWei's blog

.net .net-framworke-3.5 4g-dongle 4g-lte 518 across-project active-directory activity ad add-repo alcatel alpine always-free amazon amd-apu ap apache arm associate aws aws-cdk aws-certified aws-cli aws-efs aws-lex aws-nuke aws-s3 aws-saa aws-security aws-ssm aws-sso aws帳單整合 bind bind-view blackbox blog brew bridge-network bucket-sync build-image calculator catalina centos centos-7 centos7 cfn-flip change-swap chatbot cidr cidrcalculator clean-cache clean-resources cloudfront command consolidated-billing controller cups curl deeplearning delete-sns developer directory-service dlink-dcs930l dns-server docker docker-build docker-compose docker-error docker-image docker-setting-proxy domain dotnet dvac01 ec2 ec2-mount-efs ec2-ssm elk enabled error export-ovf exporter fail2ban fat32-to-ntfs freeradius funny gcloud gcp gcp-change-account gcs git git-error github github-error google-adsens google-cloud-platform grafana grub hh41 homebridge homekit homekit-ui http https huawei-e3372 hugo hugo-blog hugo-post instances ios ios-run-python iphone-backup ipv6-apt iso-to-usb job-bank json json-dumps keras kibana kvm lambda latin ldap ldap3 letsencrypt libvirt likecoin linux linux-dotnet linux-vnc loop lte-dongle mac mac-backup macos mail-server mi-home migration mongodb monitor ms-ad multiple-account mysql mysql-error mysql-federated netapp npm npm-upgrade ns ntfs ntp-server oai on-premise openvpn openwebmail openwrt options oracle-cloud orange-pi organizations peering permission-deny pip-error pip-install port-25 printer prometheus proxy-server python python-access-ad python-ftp python-get-nowtime python-time python2 python3 radius radius-mysql radius3.0 raspberry-pi raspberry-pi-zero rc.local redhat repo request reset-password resize-img resize-sd-partition root router rpi-camera s3 s3-error s3-policy sam-cli samba samba-error script scs-c01 security selinux session session-manage shell sms sms-log smtp sns solution-architect-associate ssh-server ssl ssl-error ssm sudo sysops system-manager systems-manager table-sync time-machine time.gmtime time_wait timezone tls totolink typeerror ubuntu ubuntu-18.04 ubuntu16.04 ubuntu20.04 unifi unifi-ac-lite uniout update-error usb usb-install virsh virt visudo vmware-player volume-lock vpc vpn vpn-server web-server wifi win-server win10 windows windows-server windows-server-2019 windows-ssh-server xiaomi yaml zimbra 廣告 永久免費 無法更新索引 無線分享器 燒光碟 自動搶 阿爾卡特
aws
gcp
iot
mac
oci

© 2021 GordonWei's Blog

Powered by Hugo with theme Dream.

Experience

2021 - Now / 博弘科技 - 資深SRE工程師

2020 - 2021 / 趣遊科技 - 資深SRE工程師

2019 - 2020 / 104人力銀行 - DevOps 工程師

2018 - 2019 / 104人力銀行 - Net 工程師

2016 - 2018 / 全林實業股份有限公司 - 系統部協理

2015 – 2016 / 恩據優資訊工作室 – 負責人

2014 – 2015 / 安盟科技股份有限公司 – 資深IT工程師

2013 – 2014 / 上海鷺豐農業科技有限公司 – 系統工程師

2010 – 2012 / 104 人力銀行 – 維護工程師

2008 - 2009 / 典匠資訊 – MIS

Projects

  • 2021/02 - 2021/12 博弘雲端 - 家樂福數位轉型
  • 2020/10 - 2020/11 趣遊科技 - 產品container化
  • 2020/09 - 2020/10 趣遊科技 - 產品架構重構
  • 2020/08 - 2020/09 趣遊科技 - 規範訂製
  • 2019/09 - 2020/07 104人力銀行 - AWS Account 回收暨IaC專案
  • 2018/10 - 2018/12 104人力銀行 - DR Site 協助建置
  • 2018/03 - 2018/05 全林實業 - 工研院人臉辨識與使用者行為分析專案
  • 2018/04 - 2018/05 全林實業 - 嘉義公車站無線網路專案
  • 2017/06 - 2018/05 全林實業 - 新加坡無線網路專案
  • 2017/05 - 2018/05 全林實業 - 捷運無線網路專案
  • 2017/01 - 2017/04 全林實業 - 弋楊科技遊覽車專案
  • 2016/12 - 2017/04 全林實業 - 亞太好行網重構、建置
  • 2016/12 - 2017/02 全林實業 - 愛巴士無線網路專案
  • 2016/11 - 2017/01 全林實業 - 泰國Free AD Wifi專案
  • 2016/10 - 2016/12 全林實業 - 桃園客運無線網路專案
  • 2016/09 - 2016/12 全林實業 - 怡客咖啡廳無線網路專案
  • 2016/07 - 2017/07 全林實業 - 主要系統規劃、重構與建置
  • 2014/09 - 2015/04 安盟科技 - 機房架構規劃rebuild / CRM系統開發客製
  • 2013/07 – 2014/07 上海鷺豐農業科技 - 研發農業環境監控系統(Arduino)
  • 2011/11 – 2012/06 104人力銀行 - 協助導入虛擬化技術專案 (Citrix Xen Server、Desktop)

About

GordonWei

小弟是一位沒錢又沒閒的普通人, 只能靠自學以及不斷的實作來吸取經驗。

希望可以把自己的經驗留存下來,讓彼此的能力更進一步!!

認證