Docker μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬ ꡬ성

λ°˜μ‘ν˜•

μ§€λ‚œ ν¬μŠ€νŒ…μ—μ„œ Docker둜 κ°€μž₯ 기본적인 λ„€νŠΈμ›Œν¬ μ„€μ •κ³Ό ꡬ성에 λŒ€ν•΄ μ•Œμ•„λ΄€μŠ΅λ‹ˆλ‹€.


이번 ν¬μŠ€νŒ…μ—μ„œλŠ” Docker둜 ꡬ성할 수 μžˆλŠ” λ„€νŠΈμ›Œν¬λ“€μ— λŒ€ν•΄ μ„€λͺ…ν•˜κ³ , μ–΄λ–»κ²Œ κ΅¬μ„±ν•˜λŠ”μ§€μ— λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

이 ν¬μŠ€νŒ… μ—­μ‹œ λ„€νŠΈμ›Œν¬μ— λŒ€ν•œ μ•½κ°„μ˜ 지식이 ν•„μš”ν•©λ‹ˆλ‹€.




Docker λ„€νŠΈμ›Œν¬ ꡬ성

Dockerμ—μ„œ λ„€νŠΈμ›Œν¬ κ΅¬μ„±μœΌ λ””μ–‘ν™”λ₯Ό μœ„ν•΄, μ—¬λŸ¬κ°€μ§€ λ„€νŠΈμ›Œν¬ ꡬ성 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. 기본적이 λͺ¨λ“œμΈ bridge λͺ¨λ“œλΆ€ν„° μ‹œμž‘ν•˜μ—¬, μ‹€ μ„œλ²„μ™€ 같은 λ„€νŠΈμ›Œν¬μ— 속할 수 μžˆλŠ” host λͺ¨λ“œ κ·Έ μ™Έ, λ„€νŠΈμ›Œν¬μ™€ μ „ν˜€ λ¬΄κ΄€ν•œ λ„€νŠΈμ›Œν¬ μ—†λŠ” μ»¨ν…Œμ΄λ„ˆλ‘œλ„ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.


Docker λ„€νŠΈμ›Œν¬λŠ” μ‚¬μš©μ— 따라 μ‚¬μš©μž μ •μ˜λ‘œ ꡬ성할 수 μžˆλŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. μ—¬λŸ¬λΆ„λ“€μ˜ μ„œλ²„ ν™˜κ²½μ— 따라, 단일 νšŒμ„ μΌ κ²½μš°μ—λŠ” ν•΄λ‹Ή μ‹€ μ„œλ²„μ˜ λ„€νŠΈμ›Œν¬μ— λ”°λ₯Έ host둜 μ—°κ²°ν•  μˆ˜λ„ 있고, μ»¨ν…Œμ΄λ„ˆλ§Œμ˜ 독립적인 λ„€νŠΈμ›Œν¬λ‘œλ„ ꡬ성할 μˆ˜λ„ 있으며 λ„€νŠΈμ›Œν¬μ—μ„œ μ•„μ˜ˆ 뢄리λ₯Ό μ‹œν‚¬ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.



Docker κΈ°λ³Έ λ„€νŠΈμ›Œν¬ ꡬ성 (bridge)

Docker의 κΈ°λ³Έ λ„€νŠΈμ›Œν¬ ꡬ성은 bridge λͺ¨λ“œμž…λ‹ˆλ‹€. bridge λͺ¨λ“œμ˜ λ„€νŠΈμ›Œν¬ ꡬ성은 Docker μ»¨ν…Œμ΄λ„ˆλ§Œμ˜ λ„€νŠΈμ›Œν¬λ₯Ό μ‹€ μ„œλ²„μ˜ λ„€νŠΈμ›Œν¬μ™€ 뢄리해 λ…λ¦½μ μœΌλ‘œ κ΅¬μ„±ν•˜λŠ” λ„€νŠΈμ›Œν¬ 방식 쀑에 ν•˜λ‚˜μž…λ‹ˆλ‹€. 



μœ„ 사진을 λ³΄μ‹œλ©΄, μ—¬λŸ¬λΆ„λ“€μ€ 사내 μ„œλ²„ ν˜Ήμ€ μžμ‹ μ˜ μ„œλ²„μ—μ„œ Dockerλ₯Ό μ„€μΉ˜ν•˜κ³ , κ·Έ μ»¨ν…Œμ΄λ„ˆλ₯Ό 3개λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. docker0 interfaceλ₯Ό bridge λ°©μ‹μœΌλ‘œ 섀정해놓고, Docker 데λͺ¬μ—μ„œ 슀슀둜 IPλ₯Ό 동적 ν• λ‹Ήν•˜λ„λ‘ μ„€μ •ν•΄λ†“μ•˜μŠ΅λ‹ˆλ‹€. 이것이 Docker λ„€νŠΈμ›Œν¬μ˜ κΈ°λ³Έ μ„€μ • λ°©μ‹μž…λ‹ˆλ‹€. λ¦¬λˆ…μŠ€ μ»¨ν…Œμ΄λ„ˆλ§Œμ˜ λ„€νŠΈμ›Œν¬λ₯Ό λ…λ¦½μ μœΌλ‘œ κ΅¬μ„±ν•œ κ²ƒμ΄μ§€μš”.


$ docker network inspect bridge 



μœ„μ— 있던 λ„€νŠΈμ›Œν¬ ꡬ성도 μ‚¬μ§„μ΄λž‘ λ¬΄κ΄€ν•˜κ²Œ, μ œκ°€ ν˜„μž¬ μ‚¬μš©ν•˜κ³  μžˆλŠ” Docker μ»¨ν…Œμ΄λ„ˆ λ„€νŠΈμ›Œν¬ ꡬ성 λͺ¨μŠ΅μž…λ‹ˆλ‹€. 두 개의 μ»¨ν…Œμ΄λ„ˆλ₯Ό μš΄μ˜ν•˜κ³  있고, ν˜„μž¬ bridge λͺ¨λ“œλ‘œ μš΄μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ§€λ‚œ ν¬μŠ€νŒ…μ—μ„œ μž‘μ„±ν•œ κ²ƒμ²˜λŸΌ μ„œλΈŒλ„·νŒ…ν•˜μ˜€κ³ , λ‚˜λ¨Έμ§€ 섀정은 λŒ€λΆ€λΆ„ κΈ°λ³Έ 섀정값을 μ‚¬μš©ν•˜μ˜€μœΌλ©°, IP MASQUERADE κΈ°λŠ₯을 μ‚¬μš© μ€‘μž…λ‹ˆλ‹€.


Bridge λ„€νŠΈμ›Œν¬ ꡬ성은 Docker λ„€νŠΈμ›Œν¬ μ„€μ •μ˜ 기본값이기 λ•Œλ¬Έμ—, 처음 Dockerλ₯Ό μ„€μΉ˜ν•˜μ‹œλŠ” 뢄듀이라면, Docker μ»¨ν…Œμ΄λ„ˆ 생성을 ν–ˆμ„ λ•Œκ°€ bridge λͺ¨λ“œκ°€ λ©λ‹ˆλ‹€.




Docker λ„€νŠΈμ›Œν¬ ꡬ성 - host

Docker λ„€νŠΈμ›Œν¬ ꡬ성 쀑에 또 λ‹€λ₯Έ λ°©λ²•μ—λŠ” μ„œλ²„μ˜ 호슀트 λ„€νŠΈμ›Œν¬λ₯Ό μ‚¬μš©ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€. 이 방법을 μš°λ¦¬λŠ” host 라고 μ •μ˜ν•˜λŠ”λ°, μ»¨ν…Œμ΄λ„ˆλ₯Ό λ³„λ„μ˜ 독립적인 λ„€νŠΈμ›Œν¬μ— μ†ν•˜μ§€ μ•Šκ³ , μ‹€ μ„œλ²„μ˜ 호슀트 λ„€νŠΈμ›Œν¬λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κ²Œ ν•˜λŠ” λ°©λ²•μœΌλ‘œ 단일 μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ›Ή μ„œλΉ„μŠ€λ₯Ό ν•  λ–„, 주둜 μ‚¬μš©ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.


λ¨Όμ € host λ°©μ‹μ˜ μ»¨ν…Œμ΄λ„ˆλ₯Ό ν•œ 번 μƒμ„±ν•΄λ΄…μ‹œλ‹€.


$ docker run -i -t --name TEST01 --net=host ubuntu 

μœ„ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜λ©΄, 호슀트 이름도, λ„€νŠΈμ›Œν¬ ꡬ성도 λͺ¨λ‘ 같은 TEST01의 μ»¨ν…Œμ΄λ„ˆκ°€ 생성이 λ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ νŒ¨ν‚€μ§€λ‚˜ 이런 뢀뢄은 λ˜‘κ°™μ§€ μ•ŠμœΌλ‹ˆ net-tools νŒ¨ν‚€μ§€λ₯Ό λ ˆν¬μ§€ν„°λ¦¬λ‘œ μ„€μΉ˜ν•˜μ—¬ ifconfig λͺ…λ Ήμ–΄λ‘œ ν™•μΈν•΄λ΄…μ‹œλ‹€.


$ apt update && apt install net-tools && ifconfig

λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯해보면, ν˜„μž¬ μžμ‹ μ˜ μ„œλ²„μ™€ 100% λ˜‘κ°™μ€ λ„€νŠΈμ›Œν¬ ꡬ성 정보가 좜λ ₯ν•˜κ²Œ λ©λ‹ˆλ‹€. 



$ docker network inspect host 

host λ„€νŠΈμ›Œν¬μ— λŒ€ν•œ 정보λ₯Ό ν™•μΈν•΄λ΄…μ‹œλ‹€. 그러면, ν˜„μž¬ λ„μ›Œμ ΈμžˆλŠ” μ»¨ν…Œμ΄λ„ˆμ˜ λ„€νŠΈμ›Œν¬ 정보가 λ‚˜μ˜€λŠ”λ°, bridge λ„€νŠΈμ›Œν¬μ™€λŠ” 달리 IPλ‚˜ MAC μ£Όμ†Œλ₯Ό λ³„λ„λ‘œ 가지고 μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ„€νŠΈμ›Œν¬ μ˜΅μ…˜ 사항도 host λ„€νŠΈμ›Œν¬λ₯Ό κ·ΈλŒ€λ‘œ 따라가기 λ•Œλ¬Έμ—, MASQUERADE λ“±μ˜ κΈ°λŠ₯ 여뢀도 ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.




Docker λ„€νŠΈμ›Œν¬ ꡬ성 - none

DockerλŠ” μ•„λ¬΄λŸ° λ„€νŠΈμ›Œν¬ ꡬ성이 λ˜μ–΄ μžˆμ§€ μ•Šμ€ 즉, λ„€νŠΈμ›Œν¬ ꡬ성이 μ „ν˜€ μ—†λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό 생성할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 단, 이 μ»¨ν…Œμ΄λ„ˆμ˜ 생성은 이미 νŒ¨ν‚€μ§€ μ•ˆμ— μžμ‹ μ΄ ν•„μš”ν•œ νŒ¨ν‚€μ§€λ‚˜ ν”„λ‘œκ·Έλž¨μ΄ μ„€μΉ˜λœ κ²½μš°μ—λ§Œ μ‚¬μš©ν•˜λŠ” 것을 μΆ”μ²œν•©λ‹ˆλ‹€. μ™œλƒλ©΄, 인터넷이 λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄μ£ ...



$ docker run -i -t --name TEST02 --net=none ubuntu 

ꡬ성 방법은 λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆμ˜ 생성과 λ™μΌν•˜κ²Œ 진행할 수 μžˆμŠ΅λ‹ˆλ‹€. --net의 인자 κ°’λ§Œ λ°”κΎΈλ©΄ λ©λ‹ˆλ‹€.



$ docker network inspect none 


ν•΄λ‹Ή λ„€νŠΈμ›Œν¬ λ°©μ‹μœΌλ‘œ κ΅¬μ„±λœ 정보 λ˜ν•œ λ§ˆμ§€λ§‰ λ‹¨μ–΄λ§Œ κ΅μ²΄ν•˜λ©΄, μ‰½κ²Œ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. 




Docker λ„€νŠΈμ›Œν¬ ꡬ성 - container

Docker λ„€νŠΈμ›Œν¬μ—λŠ” 호슀트의 λ„€νŠΈμ›Œν¬ ν™˜κ²½μ„ κ·ΈλŒ€λ‘œ 물렀받을 수 μžˆλŠ” host λ„€νŠΈμ›Œν¬ ꡬ성 방법이 μžˆμŠ΅λ‹ˆλ‹€. 그와 λ°˜λŒ€λ‘œ, μ»¨ν…Œμ΄λ„ˆμ˜ λ„€νŠΈμ›Œν¬ ν™˜κ²½μ„ κ·ΈλŒ€λ‘œ 물렀받을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.


$ docker run -i -t --name TEST03 --net=container:[CONTAINER ID] ubuntu 


μ»¨ν…Œμ΄λ„ˆλ₯Ό 생성할 λ–„, λ„€νŠΈμ›Œν¬ ν™˜κ²½μ„ κ³΅μœ ν•˜κ³  싢은 μ»¨ν…Œμ΄λ„ˆIDλ₯Ό μž…λ ₯ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€. 


ν•΄λ‹Ή μ»¨ν…Œμ΄λ„ˆμ™€ κ³΅μœ ν•˜κ³ μž ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆμ—μ„œ 각각의 ifconfig λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•΄ 확인해보면, MAC μ£Όμ†Œμ™€ IP μ£Όμ†Œκ°€ λͺ¨λ‘ μΌμΉ˜ν•˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.


λ°˜μ‘ν˜•
TAGS.

Tistory Comments