Cómo definir DNS en contenedores Docker


Jack Wallen le muestra cómo configurar servidores DNS específicos para sus implementaciones de contenedores Docker.

shutterstock-codificador-roman-samborskyi-med-copy.jpg

Imagen: Shutterstock / roman-Samborskyi

Cuando implementa un contenedor en su red, si no puede encontrar un servidor DNS definido en /etc/resolv.conf, por defecto tomará el DNS configurado para la máquina host. Eso puede estar bien y elegante para ciertas situaciones. Pero, ¿qué pasa si (tal vez por razones de seguridad), no desea que sus contenedores utilicen el mismo DNS que sus hosts? Digamos, por ejemplo, que sus servidores host utilizan un servidor DNS específico para evitar que los usuarios visiten sitios específicos. O tal vez tenga diferentes configuraciones de DNS para VPN.

VER: Los mejores lenguajes de programación para aprender, y lo peor (TechRepublic Top quality)

Puede haber varias razones por las que no desea que sus contenedores utilicen el mismo DNS que sus hosts. ¿Entonces, Qué haces? ¿Cómo se outline el DNS para los contenedores de Docker, de modo que no capte el DNS de la máquina de alojamiento?

De hecho, es bastante very simple. Déjame enseñarte como.

Lo que necesitarás

Para que esto funcione, necesitará una máquina que ejecute el motor Docker. Haré una demostración en Ubuntu Server 20.04, pero la plataforma de alojamiento no importa, siempre que tenga Docker en ejecución y pueda implementar contenedores. También querrá tener un usuario que sea miembro del grupo de la ventana acoplable (por lo que no está implementando como usuario raíz o con sudo, los cuales son un problema de seguridad). Con esas cosas listas, implementemos.

Cómo implementar un contenedor con DNS preconfigurado

Le mostraré cómo implementar contenedores Docker con DNS preconfigurado. El primer método usará el comando docker y el segundo será a través de Docker Compose.

Supongamos que desea implementar un contenedor de Ubuntu, llamado ubuntuDNS, con el servidor DNS primario de Cloudflare 1…1. Ese comando sería:

docker run -d -t --identify ubuntuDNS --dns="1...1" ubuntu

También puede implementar ese contenedor con un DNS primario y secundario así:

docker run -d -t --identify ubuntuDNS --dns="1...1" --dns="1.1.1.1" ubuntu

Asegurémonos de que el contenedor respeta nuestra configuración de DNS. Para eso, acceda al shell del contenedor con el comando:

docker exec -it ubuntuDNS bash

Desde el shell, emita el comando:

cat /and so on/resolv.conf

Debería ver los servidores DNS que configuró desde la línea de comando (Figura A).

Figura A

dockerdnsa.jpg "src =" https://www.techrepublic.com/a/hub/i/r/2021/07/08/dc4e1735-ce0a-44bf-b4bd-4805ddfd9940/resize/770x/99fa9d439f2b8cb2e8d45e4bf1ea1dnsa7f/dockerdnsa.jpg

Nuestros servidores DNS de Cloudflare se han configurado correctamente.

Salga del shell con el comando exit.

Ahora haremos lo mismo con Docker Compose. Por supuesto, debes tener instalado este comando, que se puede hacer con lo siguiente:

wget https://github.com/docker/compose/releases/obtain/1.29.2/docker-compose-Linux-x86_64
chmod u+x docker-compose-Linux-x86_64
sudo mv docker-compose-Linux-x86_64 /usr/neighborhood/bin/docker-compose

Con Docker Compose instalado, ahora puede crear el archivo necesario con el comando:

nano docker-compose.yaml

En ese archivo, implementemos un contenedor rabbitmq (un agente de mensajes de código abierto) que usará una entrada DNS de CloudFlare, que se verá así:

variation: '3'
solutions:
  services:
    dns:
      - "1...1"
           - "1.1.1.1"
    community_mode: "bridge"
    graphic: rabbitmq:3-administration
    container_title: rabbitmq
    hostname: rabbitmq
    ports:
      - "15672:15672"

Nota: Sin la opción community_mode establecida en «puente», la entrada DNS no funcionará.

Guarde y cierre el archivo. Implemente el contenedor con el comando:

docker-compose up

El contenedor se desplegará. Abra una nueva conexión SSH al servidor de alojamiento (ya que la implementación no devolverá su mensaje) y luego acceda al shell del contenedor rabbitmq con el comando:

docker exec -it rabbitmq bash

Una vez dentro del contenedor, vea las entradas de DNS con el comando:

cat /etcetera/resolv.conf

Debería ver 1…1 y 1.1.1.1 en la lista (Figura B).

Figura B

dockerdns-b.jpg "src =" https://www.techrepublic.com/a/hub/i/r/2021/07/08/60c47c12-48a8-4b33-888f-80e6b22ef7b2/resize/770x/1b38e77fca15f32a8d995f6e65d62fb0/dockerdns -b.jpg

Nuestra implementación de WordPress está utilizando la entrada de DNS adecuada.

Y eso es todo lo que hay que hacer para definir DNS en sus contenedores Docker. La razón por la que usaría esto dependerá de sus necesidades, pero tener esta función lista puede ser muy útil.

Suscríbete a TechRepublic&#39s Cómo hacer que la tecnología funcione en YouTube para obtener los últimos consejos tecnológicos para profesionales de negocios de Jack Wallen.

Ver también



Enlace a la noticia initial