🦔
Dockerのネットワークについて
DockerやDocker-Composeを使用してアクセスできるかどうか確認する。
はじめに
筆者試験環境として、windows10のwsl2環境下でdockerを動かすように環境構築しました。
個人的に、Dockerコンテナを動かした際にどうなるのか気になったので、確認の意味で動作を確認しました。
試験用のソース
フォルダ構成
.
├── Dockerfile
├── docker-compose.yml
└── golang
└── main.go
ファイルの中身
- Dockerfile
Dockerfile
FROM golang
WORKDIR /app
COPY ./golang ./
RUN go build -o app
CMD ./app
- docker-compose.yml
docker-compose.yml
version: '3'
services:
server1:
build: ./
container_name: server1
environment:
NUM: "1"
ports:
- 8082:8080
networks:
- front
server2:
build: ./
container_name: server2
environment:
NUM: "2"
networks:
- front
- back
server3:
build: ./
container_name: server3
environment:
NUM: "3"
networks:
- back
networks:
front:
back:
- golang/main.go
golang/main.go
package main
import (
"fmt"
"net/http"
"os"
)
type Server struct {
Port string
Ip string
Num string
}
func (t *Server) Start() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
output := "Hello World " + t.Num + "\n"
fmt.Fprintf(w, output)
})
s := http.Server{
Addr: t.Ip + ":" + t.Port,
Handler: mux,
}
fmt.Println(t.Ip + ":" + t.Port + " server start")
s.ListenAndServe()
}
func main() {
server := Server{Port: "8080", Num: "0"}
if str := os.Getenv("NUM"); str != "" {
server.Num = str
}
server.Start()
}
実際の動作起動コマンドについて
以下のコマンドでコンテナビルドしました。
docker build -t curlserver .
以下のコマンドを使用して、コンテナ動作させました。
docker run --rm --name server4 -e "NUM=4" -p 8081:8080 -d curlserver
先に動かしたserver4と連携させる意味で、以下のコマンドで立ち上げました。
docker run -d --rm --name server5 -e "NUM=5" --link server4 curlserver
docker-composeでのファイルは以下のコマンドで立ち上げる。
docker-compose up -d
ネットワーク状態
実際にコンテナにアクセスし ip aコマンドでipの状態を確認すると以下の絵の状態になる。
図 ipアドレスとコンテナの関係図
以下にDNS解決できる関係とポートマッピングについていかに示す。
図 コンテナのDNS関係とポートマッピングの関係図
余談
Docker内のコンテナ間でネットワーク連携がされているのか調べる方法 /etc/hostsや /etc/resolv.confに登録されている情報を確認すれば、ある程度調べることができる。
Discussion