Docker 與 DNS

  • 1519
  • 0
  • 2016-06-20

為了讓自己在自己的電腦裡面模擬環境時可以更懶惰,所以決定架個 DNS 專門給 Container 用。

實作環境與相關套件

  • 作業系統: Ubuntu Server 14.04 LTS 64 bit
  • Docker: 1.11.2
  • Docker Image: phensley/docker-dns

開始實作

  • 先用phensley/docker-dns啟動一個 Container
  • $ docker run -d --name dns -v /var/run/docker.sock:/docker.sock phensley/docker-dns
  • 先看看剛開啟的 docker dns 的 log
  • $ docker logs dns

  • 再來就可以啟動任何的 Container 並且指定使用哪個 dns,在這邊以啟動兩個 Redis 為例
  • $ docker run -itd --dns $(docker inspect -f '{{.NetworkSettings.IPAddress}}' dns) --dns-search docker --name redis1 redis
    $ docker run -itd --dns $(docker inspect -f '{{.NetworkSettings.IPAddress}}' dns) --dns-search docker --name redis2 redis
  • 然後連進去 redis1 裡面
  • $ docker exec -it redis1 /bin/bash
  • 並且 ping redis2 看看

  • 這樣子就大功告成囉!! 這樣子就不用再去想啟動哪個 Container 然後要去連哪個 Container,不過只限於單機內 XD
  • 或者是自定義一個 network 然後在啟動 Container 的時候指定要用自定義的 network 或者將自定義的 network 連接到正在執行的 container 也行。
  • $ docker network create -d bridge my-bridge-network
    $ docker run -d --net=my-bridge-network --name db training/postgres
    $ docker run -d --net=my-bridge-network --name web training/webapp

    這樣子是不是更方便呢