본문 바로가기
IT/Kubernetes

[Docker] 기본 네트워크 구성 변경

by rapker 2023. 4. 8.
반응형

요약

기본 네트워크의 구성 변경

  • 새로운 네트워크를 생성하더라도 도커의 기본 네트워크로 변경할 수 없다.
  • 기본 네트워크의 변경이 필요하면 daemon.json을 작성하거나 도커 실행 때 파라메터로 줄 수 있다.

추가 정보

  • daemon.json으로 변경된 docker 네트워크 설정을 확인하고
  • daemon.json을 삭제 후 docker 재 시작 해도
  • docker 네트워크는 롤백되지 않았습니다.

구성 변경 예시

 

# /etc/docker 경로에 아래 내용으로 daemon.json 파일 생성

cd /etc/docker
sudo vi daemon.json
{
    "bip": "172.20.0.1/16"
}

 

# daemon.json 출력

sudo cat daemon.json

 

결과

 

# 설정 전 후 네트워크 속성 비교 출력

설정 전

docker network inspect bridge

 

설정 후

docker network inspect bridge

 

기본 네트워크에서 변경이 필요할 만한 항목으로 Subnet, Gateway 가 떠올라서 테스트 해보았습니다.

설정할 수 있는 다른 옵션들은 데몬 구성파일에서 설정 가능한 항목들 확인할 수 있습니다.


 

자세히

지난번 [Docker] Network - 기본 네트워크 구성 실패 및 복구 를 통해 네트워크 구성 잘못 되었을 때 복구하는 방법을  알아봤습니다.

 

이번에는 docker 기본 네트워크를 새로운 네트워크로 교체를 시도해 보려고 합니다.

 

#다양한 옵션으로 docker 네트워크 생성 시도

docker network create -d bridge -o "com.docker.network.driver.mtu"="1500" testNet
docker network create -d bridge '
-o "com.docker.network.driver.mtu"="1500" '
-o "com.docker.network.bridge.default_bridge"="true" testNet2
docker network create \\
-d bridge \\
--subnet 172.30.0.0/16 \\
--gateway 172.30.0.1 \\
-o "com.docker.network.driver.mtu"="1500" testNet
docker network create \\
-d bridge \\
--subnet 172.30.0.0/16 \\
--ip-range 172.30.5.0/24 \\
--gateway 172.30.5.1 \\
-o "com.docker.network.driver.mtu"="1500" testNet
docker network create \\
- d bridge \\
--subnet 172.40.0.0/16 \\
--ip-range 172.40.5.0/24 \\
--gateway 172.40.5.1 \\
-o "com.docker.network.bridge.default_bridge"="true" \\
-o "com.docker.network.bridge.enable_icc"="true" \\
-o "com.docker.network.bridge.enable_ip_masquerade"="true" \\
-o "com.docker.network.bridge.host_binding_ipv4"="0.0.0.0" \\
-o "com.docker.network.bridge.name"="docker0" \\
-o "com.docker.network.driver.mtu"="1500" testNet

옵션을 점점 추가 하면서 도커 네트워크를 반복적으로 생성 해본 결과

default_bridge 옵션이 추가되니 잘 만들어지긴 하는데 도커 시작할때 여전히 오류 있네요 (network 초기화 실패)

 

또 다시 이것 저것 검색.....

 

'새로운 네트워크를 기본 네트워크로 교체'에 대한 글을 찾을 수 없었고

유사한 내용중 (Change default docker0 bridge IP address - Docker for Azure)

'도커 바이너리 코드에 기본 네트워크를 참조하는 부분이  하드코딩 되어 있다.'

'network에서 사용하는 cidr 변경을 원한다면 daemon.json을 수정하면 된다. ' 라는 글을 봤습니다.

Docker docs에 기본 브릿지 네트워크 구성 페이지에서 daemon.json에 대한 내용을 찾았습니다.

 

구성할 수 있는 예시 항목들이 낯설지가 않네요

{
  "bip": "192.168.1.5/24",
  "fixed-cidr": "192.168.1.5/25",
  "fixed-cidr-v6": "2001:db8::/64",
  "mtu": 1500,
  "default-gateway": "10.20.1.1",
  "default-gateway-v6": "2001:db8:abcd::89",
  "dns": ["10.20.1.2","10.20.1.3"]
}

여기까지 내용을 정리 해보면

기본 네트워크를 다른 네트워크로 변경할 수 없다

기본 네트워크의 구성이 마음에 들지 않는다면 daemon.json으로 변경할 수 있다.

그렇다면 daemon.json을 좀 만져봐야 겠지요~~

Docker 옵션

docker 설정 파일 변경하기 전에 docker 옵션에 대해서 잠깐 찾아봤습니다.

참조

docker 데몬을 구성하는 방법 두가지

  • json 구성파일 사용. 모든 구성을 한곳에 보관하므로 선호되는 옵션
  • dockerd를 시작할 때 플래그를 사용

두 가지 방식으로

  • 서로 다른 옵션을 사용하는 것이 가능합니다.
  • 동일한 옵션을 사용하면 docker 데몬이 시작되지 않고 오류를 출력합니다.

json파일로 docker 데몬을 구성하려면 특정 경로에 daemon.json파일이 있습니다.

아직 파일이 없으면 생성해야 합니다.

daemon.json 경로

  • linux : /etc/docker/daemon.json
  • windows : c:\ProgramData\docker\config\daemon.json
  • MacOS
    • 작업 표시 줄 > 환경 설정 > 데몬 > 고급 > 도커 로 이동하거나
    • ~/.docker/daemon.json

json 구성 파일의 예

{
  "debug": true,
  "tls": true,
  "tlscert": "/var/docker/server.pem",
  "tlskey": "/var/docker/serverkey.pem",
  "hosts": ["tcp://192.168.59.3:2376"]
}

dockerd 실행 옵션의 예

dockerd --debug \\
  --tls=true \\
  --tlscert=/var/docker/server.pem \\
  --tlskey=/var/docker/serverkey.pem \\
  --host tcp://192.168.59.3:2376

data-root 구성 옵션을 사용하여 다른 디렉터리를 사용하도록 docker 데몬을 구성할 수 있습니다.

docker 데몬의 상태가 이 데릭터리에 유지되므로 각 데몬에 전용 디렉터리를 사용해야 합니다.

docker 데몬 디렉터리

  • linux : /var/lib/docker
  • windows : c:\ProgramData\docker

daemon.json 설정 해보자

참조

/etc/docker/ 경로에 daemon.json 파일이 없으니

cd /etc/docker
||

 

새로 생성

sudo vi daemon.json

 

파일 내용

 

생성된 daemon.json 파일

 

Docker 서비스 재 시작

sudo systemctl restart docker

 

결과

설정 전

docker network inspect bridge

 

설정 후

docker network inspect bridge

 

음.. 원래는 Subnet, Gateway 부분이 바뀌길 원했는데

AuxiliaryAddresses 하위에 DefaultGatewayIPv4 라는게 새로 생겨버렸네요

 

다시....

/etc/docker/daemon.json 수정해 봅니다.

sudo cat daemon.json

 

다시 docker를 재 시작 해주고...

sudo systemctl restart docker

 

음... docker 실행중에 뭔가 오류가 났네요

 

docker 커맨드를 사용할 수 없는 상태 입니다.

 

/etc/docker/daemon.json 파일 삭제로 docker를 복구 합니다.

 

docker 서비스 재 시작

 

docker 커맨드 확인

 

docker는 다시 정상으로 복구 되었고

 

이쯤되면...

 

어떤 옵션을 변경하고 싶을 때 어디를 어떻게 변경해야 하는지

잘 정리된 문서들이 있을 것 같은데 보이지 않네요...ㅜㅜ

다시...

 

기본 docker0 브리지 IP 주소 변경의 내용 참조해서

daemon.json 수정 시도

IPAM의 "Subnet" 이 변경될 것을 예상하고 fixed-cidr 을 넣어 봅니다.

sudo cat daemon.json

 

docker 재 시작 해주고

sudo systemctl restart docker

 

네트워크 확인 해보니...

docker network inspect bridge

 

이게 아니야....

Subnet은 변함없고 IPRange가 바뀌어 있네요...

 

음..... 다시...

sudo cat daemon.json

 

docker 재 시작 한 후에 네트워크 확인 해보니

docker network inspect bridge

 

오~~ 드디어 뭔가 제대로 변경이 된 것 같습니다.

 

daemon.json 에서

bip를 변경 해주니 subnet이랑 gateway가 변경이 되었네요

 

그러면 이번에 다시 bip를 변경 해볼건데

 

"bip"="172.20.0.1/16" 으로 변경하면

 

"Subnet":"172.20.0.0/16"

"Gateway":"172.20.0.1"

 

요렇게 바뀌길 희망하며

다시 시도!!

sudo cat daemon.json

 

과연.....

docker 서비스 재 시작 후

docker network inspect bridge

 

짜잔~~ 성공!!!!

 

마지막으로 한 가지 더 확인 해보고 싶은게 있는데요

daemon.json을 삭제하면 어떻게 될 까요?

 

원래대로 되 돌아 가는지, 아니면 현재 그대로 유지 될지...

 

시도...

/etc/docker/daemon.json 파일 삭제

||
sudo rm daemon.json
||

 

서비스 재 시작

sudo systemctl restart docker

 

결과

 

결과는

  • daemon.json으로 docker 설정 후
  • daemon.json 파일을 삭제해도
  • 내용이 그대로 유지 되네요
반응형
LIST