[Docker]Build DNS Server With Alpine
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