• Docker制作镜像并部署bind9(yum安装bind)--use


    镜像制作

    1.1 下载镜像

    docker pull centos:centos7.9.2009

    1.2 运行容器

    1. [root@localhost ~]# docker run -d \
    2. --privileged \
    3. --name=bind9 \
    4. --restart=always \
    5. -p 53:53/udp \
    6. -p 53:53/tcp \
    7. -v /data/bind9:/etc/bind \
    8. -v /sys/fs/cgroup:/sys/fs/cgroup \
    9. centos:centos7.9.2009 /usr/sbin/init
    10. # 查看容器日志
    11. [root@localhost ~]# docker logs bind9
    12. # 进入容器查看
    13. [root@localhost ~]# docker exec -it bind9 bash
    14. # 步骤七: 查看容器运行情况
    15. root@ubuntu-vm1:/data/bind9# docker ps
    16. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    17. 3e12e7dd4439 centos:centos7.9.2009 "/usr/sbin/init" 42 seconds ago Up 41 seconds 0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp, :::53->53/tcp, :::53->53/udp bind9

    1.3 部署named服务

    1. # 1. 进入容器查看
    2. [root@localhost ~]# docker exec -it bind9 bash
    3. # 2. 关闭SELinux与防火墙
    4. [root@localhost ~]# setenforce 0
    5. [root@localhost ~]# systemctl stop firewalld
    6. # 永久关闭
    7. [root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    8. [root@localhost ~]# systemctl disable firewalld
    9. # 3. yum 安装DNS服务
    10. [root@localhost ~]# yum install -y bind* vim*
    11. # 查看bind是否完成
    12. [root@localhost yum.repos.d]# rpm -aq |grep bind
    13. # 状态管理
    14. systemctl enable named --now
    15. systemctl status named
    16. systemctl stop named
    17. systemctl start named
    18. systemctl restart named

    1.4 配置文件

    1.4.1 named.conf

    1. # 在docker容器中执行
    2. $. cp /etc/named.conf /etc/named.conf-bak
    3. $. vi /etc/named.conf
    4. //
    5. // named.conf
    6. //
    7. // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
    8. // server as a caching only nameserver (as a localhost DNS resolver only).
    9. //
    10. // See /usr/share/doc/bind*/sample/ for example named configuration files.
    11. //
    12. // See the BIND Administrator's Reference Manual (ARM) for details about the
    13. // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
    14. options {
    15. // listen-on port 53 { 127.0.0.1; };
    16. listen-on port 53 { any; };
    17. listen-on-v6 port 53 { ::1; };
    18. directory "/var/named";
    19. dump-file "/var/named/data/cache_dump.db";
    20. statistics-file "/var/named/data/named_stats.txt";
    21. memstatistics-file "/var/named/data/named_mem_stats.txt";
    22. recursing-file "/var/named/data/named.recursing";
    23. secroots-file "/var/named/data/named.secroots";
    24. //allow-query { localhost; };
    25. allow-query { any; };
    26. /*
    27. - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
    28. - If you are building a RECURSIVE (caching) DNS server, you need to enable
    29. recursion.
    30. - If your recursive DNS server has a public IP address, you MUST enable access
    31. control to limit queries to your legitimate users. Failing to do so will
    32. cause your server to become part of large scale DNS amplification
    33. attacks. Implementing BCP38 within your network would greatly
    34. reduce such attack surface
    35. */
    36. recursion yes;
    37. forward first;
    38. forwarders { 8.8.8.8; };
    39. dnssec-enable no;
    40. dnssec-validation no;
    41. /* Path to ISC DLV key */
    42. bindkeys-file "/etc/named.root.key";
    43. managed-keys-directory "/var/named/dynamic";
    44. pid-file "/run/named/named.pid";
    45. session-keyfile "/run/named/session.key";
    46. };
    47. logging {
    48. channel default_debug {
    49. file "data/named.run";
    50. severity dynamic;
    51. };
    52. };
    53. zone "." IN {
    54. type hint;
    55. file "named.ca";
    56. };
    57. include "/etc/named.rfc1912.zones";
    58. include "/etc/named.root.key";
    59. // mine
    60. include "/etc/bind/named.zones";

    1.4.2 named.zones

    1. # 宿主机中
    2. [root@localhost ~]# cd /data/bind9
    3. [root@localhost ~]# vi named.zones
    4. // named.zones文件内容如下:
    5. zone "lpf-test.com" IN {
    6. type master;
    7. file "/etc/bind/lpf-test.com.hosts";
    8. };
    9. zone "31.168.192.in-addr.arpa" IN {
    10. type master;
    11. file "/etc/bind/lpf-test.com.back";
    12. };

    1.4.3 lpf-test.com.hosts, lpf-test.com.back

    1. [root@localhost ~]# cd /data/bind9/zones
    2. [root@localhost ~]# vi lpf-test.com.hosts
    3. $TTL 1D
    4. @ IN SOA @ root.lpf-test.com. (
    5. 0 ; serial
    6. 1D ; refresh
    7. 1H ; retry
    8. 1W ; expire
    9. 3H ) ; minimum
    10. @ NS dns.lpf-test.com.
    11. @ IN A 192.168.31.85
    12. * IN A 192.168.31.85
    13. [root@localhost ~]# vi lpf-test.com.back
    14. $TTL 1D
    15. @ IN SOA @ root.lpf-test.com. (
    16. 0 ; serial
    17. 1D ; refresh
    18. 1H ; retry
    19. 1W ; expire
    20. 3H ) ; minimum
    21. @ IN NS dns.lpf-test.com.
    22. 100 IN PTR dns.lpf-test.com
    23. 101 IN PTR www.lpf-test.com
    24. 102 IN PTR smb.lpf-test.com
    25. 103 IN PTR ftp.lpf-test.com

    1.4.4 步骤四:检查

    1. root@my-ubuntu-vm1:~# docker exec -it bind9 bash
    2. # 查看状态
    3. root@8d4b47ea885c:/# service named status
    4. root@8d4b47ea885c:/# service named restart
    5. root@8d4b47ea885c:/# service named status
    6. $. named-checkconf -z "$NAMEDCONF"
    7. $. named-checkconf /etc/named.conf
    8. # 检查主配置文件:
    9. [root@localhost ~]# named-checkconf
    10. # named-checkzone yourDNS域名和路径
    11. # 检查正向解析文件
    12. [root@localhost ~]# named-checkzone lpf-test.com \
    13. /etc/bind/lpf-test.com.hosts
    14. zone lpf-test.com/IN: loaded serial 0
    15. OK
    16. # 检查反向解析文件:
    17. [root@localhost ~]# named-checkzone \
    18. 31.168.192.in-addr.arpa \
    19. /etc/bind/lpf-test.com.back
    20. zone 10.168.192.in-addr.arpa/IN: loaded serial 0
    21. OK
    22. # 问题排查
    23. journalctl -xefu named
    24. journalctl -xefu docker
    25. journalctl -u named

    1.4.5 开机启动执行

    1. # 容器中执行如下命令
    2. chmod +x /etc/rc.d/rc.local
    3. vi /etc/rc.d/rc.local
    4. # 添加如下内容
    5. mkdir -p /etc/bind
    6. cp -p /opt/* /etc/bind

    1.5 打包镜像

    1. # 打包镜像
    2. docker commit -p \
    3. -a "langpf" \
    4. -m "centos7.9.2009, bind-9.11.4" \
    5. d46d528d2f97 centos/bind9:9.11.4-26
    6. # 推送到本地仓库
    7. 1)
    8. docker tag centos/bind9:9.11.4-26 \
    9. k8s-harbor.com/my-project/centos-bind9:9.11.4-26
    10. 2)
    11. docker login \
    12. https://k8s-harbor.com/harbor/projects \
    13. -u admin -p Harbor12345
    14. 3)
    15. docker push k8s-harbor.com/my-project/centos-bind9:9.11.4-26

    问题处理

    1. 问题:
    2. 在docker中启动服务报错:
    3. New main PID 547 does not belong to service,
    4. and PID file is not owned by root. Refusing.
    5. 解决:
    6. 挂载宿主机 cgroup目录,启动时加上 -v /sys/fs/cgroup:/sys/fs/cgroup
    7. 完整启动命令如下:
    8. docker run -itd --name=ldap --privileged=true \
    9. -v /sys/fs/cgroup:/sys/fs/cgroup \
    10. -p 80:80 -p 389:389 centos:7 /usr/sbin/init
  • 相关阅读:
    Python-Scrapy框架(框架学习)
    linux常见命令以及jdk,tomcat环境搭建
    PyTorch KernelAgent 源码解读 ---(1)--- 原理
    手把手建立Roofline模型(CPU)
    深入解析NPM:常用命令详解与实战示例
    三天吃透Redis面试八股文
    G1D4-软考中级《项目集成管理》-下午真题
    node版本切换(nvm)
    ⚡文件工具类⚡
    nvidia-smi常用选项汇总
  • 原文地址:https://blog.csdn.net/justlpf/article/details/133128108