일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MongoEngine
- MongoDB
- S3
- 도커
- 리뷰
- 실사용
- 재테크
- 포인트앱
- Container
- aws codecommit
- 커피머니불리기
- python3
- codecommit
- built-in
- clone
- network
- docker
- 후기
- docker network
- AWS
- namespace
- Python
- 하나머니
- mininet
- VPC
- Linux
- 토스카드
- 앱테크
- 리워드앱
- DocumentDB
- Today
- Total
ㅍㅍㅋㄷ
docker0 IP 및 CIDR 변경하기 본문
docker를 설치하면, docker0 라는 가상 bridge 가 생성되며, 이 interface는 container가 통신하기 위한 기본적인 bridge interface 이다. 이 interface의 CIDR 설정은 172.17.42.1/16 으로 자동 설정 된다.
root@~~# ifconfig
docker0 Link encap:Ethernet HWaddr fe:67:04:29:0e:bd
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::fc67:4ff:fe29:ebd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:1296 (1.2 KB)
docker0 의 CIDR 설정이 중요한 이유 중 하나는, 해당 host에 올라가는 모든 container의 IP 영역을 결정 짓기 때문이다.
만약 docker0의 CIDR 설정을 바꾸고 싶다면 어떻게 해야할까.
아래는 docker0의 CIDR을 172.17.42.1/16 --> 192.168.1.1/24 로 수정하는 방법이다.
1. docker 서비스 stop
먼저 docker host에 실행되고 있는 서비스를 중지 시키자.
( 해당 command는 ubuntu 기준 )
root@~~# service docker stop
docker stop/waiting
2. docker0 virtual bridge down
docker 서비스를 중지 시켰다고 해서 docker0 interface가 없어지는 건 아니다.
root@~~# service docker status
docker stop/waiting
root@~~# ifconfig
docker0 Link encap:Ethernet HWaddr fe:67:04:29:0e:bd
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::fc67:4ff:fe29:ebd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:1296 (1.2 KB)
docker0 interface 를 강제로 down 시켜야 한다.
현재 docker0 interface 의 상태 정보를 보고 싶다면 아래와 같이 ip link라는 명령을 이용해 확인해 본다.
root@~~# ip link
.....
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/ether fe:67:04:29:0e:bd brd ff:ff:ff:ff:ff:ff
docker0 interface가 현재는 UNKNOWN 상태임을 알 수 있다. 강제로 down 시키도록 한다.
root@~~# ip link set dev docker0 down
root@~~# ip link
.......
3: docker0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether fe:67:04:29:0e:bd brd ff:ff:ff:ff:ff:ff
이제 ifconfig 해도 보이지 않을 것이다.
3. docker0 interface IP 설정 변경
이제 docker0 interface 에 설정된 IP 정보를 변경해야 한다. 먼저 ip addr 명령을 통해 현재 설정된 정보를 확인한다.
root@~~# ip addr
......
3: docker0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default
link/ether fe:67:04:29:0e:bd brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet 설정에 172.17.42.1/16 으로 되어 있는걸 볼 수 있다. 일단 이걸 삭제 한다.
root@~~# ip addr del 172.17.42.1/16 dev docker0
root@~~# ip addr
3: docker0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default
link/ether fe:67:04:29:0e:bd brd ff:ff:ff:ff:ff:ff
삭제 후, 192.168.1.1/24 로 재 설정한다.
root@~~# ip addr add 192.168.1.1/24 dev docker0
root@~~# ip addr
....
3: docker0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default
link/ether fe:67:04:29:0e:bd brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 scope global docker0
valid_lft forever preferred_lft forever
4. docker0 virtual bridge up
이제 docker0 virtual bridge 를 올린다.
root@~~# ip link set dev docker0 up
root@~~# ip link
.......
3: docker0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/ether fe:67:04:29:0e:bd brd ff:ff:ff:ff:ff:ff
5. iptables 에서 POSTROUTING chain 삭제
docker 서비스를 다시 기동시키기 전에 먼저 정리해야할 것이 있다. iptables 에 기존 172.17.0.0/16 에 대한 chain 정보가 남아 있는데, 한번 정리해준다. 물론 정리 안한다고 해서 제대로 동작 안하는건 아니지만, 그래도 깔끔하게 삭제해 주자.
아래에 보면 POSTROUTING chain에 172.17.0.0/16 에 대한 정보가 아직 남아 있다.
root@~~# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
Chain DOCKER (2 references)
target prot opt source destination
삭제한다.
root@~~# iptables -t nat -F POSTROUTING
6. docker config 설정
바로 docker 서비스를 올려도 무방하지만, 만약 docker host가 reboot 될 경우 열심히 설정해 놓은 것들이 다시 reset 된다. 이것을 방지 하기 위해 docker config 에도 CIDR 설정을 넣어주면 host 가 reboot 후에도 내가 설정한 CIDR로 서비스가 올라온다.
docker config 는 /etc/default/docker 파일에 설정한다.
root@~~# echo 'DOCKER_OPTS="--bip 192.168.1.1/24"' >> /etc/default/docker
7. docker 서비스 시작
이제 docker 를 시작해 보자
root@~~# service docker start
docker start/running, process 2239
container를 올리고 container에 할당된 IP를 확인해 보면 우리가 원하는대로 192.168.1.X/24 대역으로 설정됨을 볼 수 있다.
root@~~# docker exec tesst-container ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:c0:a8:01:02
inet addr:192.168.1.2 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:c0ff:fea8:102/64 Scope:Link
UP BROADCAST RUNNING MTU:9001 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:578 (578.0 B) TX bytes:668 (668.0 B)
'IT > Docker' 카테고리의 다른 글
Docker Network 구조(2) - container network 방식 4가지 (1) | 2016.05.20 |
---|---|
Docker container IP 확인 (4) | 2016.05.18 |
docker container에 접속하기 (2) | 2015.07.21 |
Docker Network 구조(1) - docker0와 container network 구조 (10) | 2015.07.13 |
Docker host에 다양한 Linux 배포판(distro) container 들이 올라갈 수 있는 이유 (0) | 2015.07.02 |