요약
기본 네트워크의 구성 변경
- 새로운 네트워크를 생성하더라도 도커의 기본 네트워크로 변경할 수 없다.
- 기본 네트워크의 변경이 필요하면 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 Daemon에 대해 알고 싶은 모든 것 : COLLABNIX
- Docker 구성 및 실행 : Docker docs
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 설정 해보자
참조
- daemon 구성 파일 - docker docs
/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 파일을 삭제해도
- 내용이 그대로 유지 되네요
'IT > Kubernetes' 카테고리의 다른 글
Azure CNI CIDR 상관관계 (0) | 2023.04.10 |
---|---|
[Docker] Network - overlay & macvlan (0) | 2023.04.08 |
[Docker] Network - 기본 네트워크 구성 실패 및 복구 (2) | 2023.04.08 |
[Docker] dockerfile build (with sample) (0) | 2023.04.08 |
[Docker] 기본 실행 및 명령어 (1) | 2023.04.08 |