Moby: Docker ๋„คํŠธ์›Œํฌ๋Š” ๋ฐฉํ™”๋ฒฝ์„ ์šฐํšŒํ•˜๋ฉฐ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 04์›” 14์ผ  ยท  114์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: moby/moby

docker version ์ถœ๋ ฅ:

Client:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 15:54:52 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.10.3
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   20f81dd
 Built:        Thu Mar 10 15:54:52 2016
 OS/Arch:      linux/amd64

docker info ์ถœ๋ ฅ:

Containers: 14
 Running: 5
 Paused: 0
 Stopped: 9
Images: 152
Server Version: 1.10.3
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 204
 Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Plugins: 
 Volume: local
 Network: bridge null host
Kernel Version: 3.13.0-58-generic
Operating System: Ubuntu 14.04.4 LTS
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 7.793 GiB
Name: brm-pheonix-dev
ID: Y6Z4:6D53:RFOL:Z3CM:P7ZK:H6HL:RLV5:JT73:LZMC:DTBD:7ILK:2RS5
Username: benjamenmeyer
Registry: https://index.docker.io/v1/

์ถ”๊ฐ€ ํ™˜๊ฒฝ ์„ธ๋ถ€ ์ •๋ณด(AWS, VirtualBox, ๋ฌผ๋ฆฌ์  ๋“ฑ):
Rackspace Cloud Server, Ubuntu 14.04, ํ•˜์ง€๋งŒ ๋ณ„๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„:

  1. ์ž ๊ธด ๋ฐฉํ™”๋ฒฝ์œผ๋กœ ์‹œ์Šคํ…œ ์„ค์ •
  2. ๋…ธ์ถœ๋œ ํฌํŠธ๊ฐ€ ์žˆ๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์„ธํŠธ ์ƒ์„ฑ
  3. ๋ฐฉํ™”๋ฒฝ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. docker๋Š” "์–ด๋””์„œ๋‚˜"๋ฅผ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋Œ€์ค‘์—๊ฒŒ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.
root@brm-pheonix-dev :~/rse# iptables --list DOCKER
์ฒด์ธ DOCKER(1 ์ฐธ์กฐ)
๋Œ€์ƒ prot opt โ€‹โ€‹์†Œ์Šค ๋Œ€์ƒ
ACCEPT tcp -- ๋ชจ๋“  ์œ„์น˜ 172.17.0.2 tcp dpt:6379

์˜ˆ์ƒํ•œ ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•˜์„ธ์š”.
root@brm-pheonix-dev :~/rse# iptables --list DOCKER
์ฒด์ธ DOCKER(1 ์ฐธ์กฐ)
๋Œ€์ƒ prot opt โ€‹โ€‹์†Œ์Šค ๋Œ€์ƒ
TCP ์ˆ˜๋ฝ -- 127.0.0.0/24 172.17.0.2 tcp dpt:6379
TCP ์ˆ˜๋ฝ -- 172.16.0.0/16 172.17.0.2 tcp dpt:6379

์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ถ”๊ฐ€ ์ •๋ณด(์˜ˆ: ๋ฌธ์ œ๊ฐ€ ๊ฐ€๋” ๋ฐœ์ƒํ•จ):

๊ธฐ๋ณธ์ ์œผ๋กœ ๋„์ปค๋Š” ๋ณด์•ˆ์„ ๊นจ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐฉํ™”๋ฒฝ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ์žฅ์น˜์˜ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์ด ์ปจํ…Œ์ด๋„ˆ์˜ ๋…ธ์ถœ๋œ ํฌํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์ปจํ…Œ์ด๋„ˆ A๋Š” Nginx๋ฅผ ์‹คํ–‰ํ•˜๋Š” 443๊ฐœ๋ฅผ ๋…ธ์ถœํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ B๋Š” ํฌํŠธ 8000์—์„œ API๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ A๋Š” ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐœ๋ฐฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ B๋Š” ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์™€๋งŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์™„์ „ํžˆ ์ˆจ๊น๋‹ˆ๋‹ค. (์‚ฌ์šฉ์ž ํ…Œ์ŠคํŠธ์šฉ) ๋ฐ ๋„์ปค ๋„คํŠธ์›Œํฌ(์ปจํ…Œ์ด๋„ˆ A์™€ ํ†ต์‹ ์šฉ). ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ C๋ฅผ ๋™์ผํ•œ ์ข…๋ฅ˜์˜ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ B์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ _์ƒ๊ฐ_ํ–ˆ๋˜ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋กœ๊ทธ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋Œ€์ค‘์—๊ฒŒ ๊ณต๊ฐœ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์นจ์ž…์„ ์‹œ๋„ํ•˜๋Š” ์†Œ์Šค์—์„œ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ฐพ์€ ํ›„ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ํ™•์ธํ•˜๊ณ  ์†Œ์Šค ์ฃผ์†Œ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์— ์ œํ•œ์ด ์—†์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” UFW๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ด ํŠน์ • ์ƒ์ž์— ๋Œ€ํ•œ SSH๋งŒ ํ—ˆ์šฉํ•˜๊ณ  ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ๋žŒ๋“ค์ด ์ฃผ์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž ์žฌ์ ์ธ ๋ณด์•ˆ ๋ฌธ์ œ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ข‹์€ ๋ณด์•ˆ ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋„คํŠธ์›Œํ‚น์ด ์œ„์˜ ์›ํ•˜๋Š” ํšจ๊ณผ ์˜ˆ์ œ์™€ ๊ฐ™์ด ์ž‘๋™ํ•˜๋„๋ก ์ œํ•œํ•œ ๋‹ค์Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ ์ ˆํ•œ ๋ฐฉํ™”๋ฒฝ ๋“ฑ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋™์ž‘์„ ์žฌ์ •์˜ํ•˜๊ฑฐ๋‚˜ ํ˜„์žฌ ๋™์ž‘์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ๊ฐ–๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ ์ด์œ ๋กœ ์—…๋ฐ์ดํŠธ ์‹œ ๋งŽ์€ ๋ถ€๋ถ„์„ ๊นจ๋œจ๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ํฌ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ง€๊ธˆ ์ผค ์ˆ˜ ์žˆ๋Š” ์œ„์˜ ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ ๋‚˜์ค‘์— ๋งŽ์€ ๊ฒฝ๊ณ  ํ›„์— ๊ธฐ๋ณธ ๋™์ž‘์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋™์ž‘์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด docker-compose yml์—์„œ ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ(๋ฐฉํ™”๋ฒฝ->๊ณต์šฉ ํฌํŠธ ํ™œ์„ฑํ™”, ip)์„ ๊ฐ–๋Š” ๊ฒƒ์€ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์‹œ๊ฐ์ ์œผ๋กœ ์•Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

--iptables=false ์˜ต์…˜์„ ์ฐพ์•˜์ง€๋งŒ ๋ชจ๋“  ๊ทœ์น™์„ ์ง์ ‘ ์„ค์ •ํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฐ˜๋Œ€ํ•˜๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ ๊ทœ์น™์— ๋Œ€ํ•œ ์†Œ์Šค ์„ค์ •์ž…๋‹ˆ๋‹ค.

ํ™•์ธํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ docker์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๋ฐฉํ™”๋ฒฝ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.

arenetworking versio1.10

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Ben์ด ๋ฐํžˆ๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๋Š” ํ˜„์‹ค์ ์ด๊ณ  ๋†€๋ผ์šด ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‚˜์œ ์กฐํ•ฉ). ์ €์ฒ˜๋Ÿผ ๋งŽ์€ ๊ด€๋ฆฌ์ž๋“ค์ด ๊ฒ€์ฆ๋œ ufw ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Docker๋Š” ufw ์ฃผ๋ณ€์—์„œ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉฐ iptables ๊ทœ์น™์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ 1) ufw๊ฐ€ ํŒจํ‚ท ํ•„ํ„ฐ๋ง ๊ทœ์น™์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ž˜๋ชป ๋ณด๊ณ ํ•˜๊ฒŒ ํ•˜๊ณ  2) ๊ฒ‰๋ณด๊ธฐ์— ์‚ฌ์ ์ธ ์„œ๋น„์Šค๋ฅผ ๊ณต์šฉ ๋„คํŠธ์›Œํฌ์— ๋…ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. docker๊ฐ€ sysadmin ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ข‹์€ ์ ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ณ ์•ˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ Ben๊ณผ ๋‚˜์ฒ˜๋Ÿผ ์‹ค์ˆ˜๋กœ ๋” ๋„“์€ ์ธํ„ฐ๋„ท์— ํฌํŠธ๋ฅผ ๊ฐœ๋ฐฉํ•œ ๋งŽ์€ ๊ด€๋ฆฌ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Ben๊ณผ ๋‚˜์™€ ๋‹ฌ๋ฆฌ ๊ทธ๋“ค์€ ์•„์ง ๊ทธ๊ฒƒ์„ ์•Œ์•„๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค.

๋ชจ๋“  114 ๋Œ“๊ธ€

์ฐธ๊ณ : https://github.com/docker/docker/blob/master/vendor/src/github.com/docker/libnetwork/iptables/iptables.go ์—์„œ ์†Œ์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ธฐ์กด ์˜ต์…˜์กฐ์ฐจ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. , ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์€ ์†Œ์Šค ip/device์— ๋Œ€ํ•ด iptables ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋…ธ์ถœ๋œ ํฌํŠธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ #14041์ด ์•„๋‹™๋‹ˆ๋‹ค. ํฌํŠธ ๋…ธ์ถœ์€ ์™ธ๋ถ€ ์„ธ๊ณ„์— ์„œ๋น„์Šค๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฏ€๋กœ ๊ณต๊ฐœ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํ“จํ„ฐ ์™ธ๋ถ€์—์„œ ํฌํŠธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์„œ๋น„์Šค์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๊ฑฐ๋‚˜ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ์˜ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ๋„์ปค ๋„คํŠธ์›Œํ‚น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ์ถœ์„ ์ „ํ˜€ ์›ํ•˜์ง€ ์•Š๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์‚ฌ์„ค ๋„คํŠธ์›Œํฌ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค( https://docs.docker.com/engine/userguide/networking/ ์ฐธ์กฐ).

๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ๋จผ์ € ์ƒ๊ฐํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํฌํŠธ( EXPOSE )๋ฅผ _๋…ธ์ถœ_ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ๋Š” ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์ง€๋งŒ ํฌํŠธ( -p / -P )๋ฅผ _๊ฒŒ์‹œ_ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ์ฃผ์ธ.

์‹ค์ œ๋กœ _publishing_์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ์„ค๊ณ„๋œ ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์˜ˆ์—์„œ ์ปจํ…Œ์ด๋„ˆ B์™€ C๋Š” ํฌํŠธ๋ฅผ ๊ฒŒ์‹œํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ ์ปจํ…Œ์ด๋„ˆ A๋Š” Docker ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker network create mynet

docker run -d --net=mynet --name=api api-image
docker run -d --net=mynet --name=db database-image
docker run -d --net=mynet --name=web -p 443:443 nginx

์ด๊ฒƒ์€ "์›น" ์ปจํ…Œ์ด๋„ˆ๋งŒ ํ˜ธ์ŠคํŠธ์— ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ์›น ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฆ„์„ ํ†ตํ•ด "API" ๋ฐ "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค" ์ปจํ…Œ์ด๋„ˆ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ : http://api :80/ ๋ฐ db:3306(MySQL ๊ฐ€์ •)).

@justincormack ๊ทธ๋ž˜์„œ ๊ฐœ์ธ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ๊ฐœ์ธ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ˜ธ์ŠคํŠธ ๋ฐฉํ™”๋ฒฝ์ด ๊ฐœ์ธ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ๋…ธ์ถœ์„ ์ œํ•œํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ๋Š” ์—ฌ์ „ํžˆ ๊ณต๊ฐœ์ ์œผ๋กœ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

@thaJeztah ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ๋ฐฉํ™”๋ฒฝ ์ง€์›์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ํŠน์ • ๋„คํŠธ์›Œํฌ๋กœ ์ œํ•œํ•˜๋Š” ๋„์ปค์—๋Š” ๋ฐฉํ™”๋ฒฝ ์ง€์›์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฉํ™”๋ฒฝ์€ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ด ํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์— ๊ณ„์† ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ docker-compose๋ฅผ ํ†ตํ•ด ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ libnetwork ๊ธฐ๋Šฅ์—๋Š” ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์—์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ œํ•œํ•˜๋Š” _no_ ๊ธฐ๋Šฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํžˆ docker-compose ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. iptables ๊ทœ์น™์—๋Š” ์†Œ์Šค ์‚ฌ์–‘์ด ์—†์œผ๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์— ๊ด€๊ณ„์—†์ด docker์— ์˜์กดํ•˜์—ฌ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™(์ด ๊ทœ์น™์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์•ผ ํ•จ)์ด ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. docker-compose.yml ํŒŒ์ผ์—์„œ ๋‹ค์Œ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

nginx:
    build: ./docker/nginx/.
    ports:
        - "127.0.0.1:8080:80"
        - "127.0.0.1:443:443"
    environment:
        DESTINATION_HOST: repose
    links:
        - repose
repose:
    build: ./docker/repose/.
    ports:
        - "127.0.0.1:80:8080"
    environment:
        DESTINATION_HOST: phoenix
        DESTINATION_PORT: 8888
    links:
        - phoenix
curryproxy:
    build: ./docker/curryproxy/.
    ports:
        - "127.0.0.1:8081:8081"
    external_links:
        - rse_rse_1
        - rse_rse_2
        - rse_rse_3
phoenix:
    build: .
    ports:
        - '127.0.0.1:88:8888'
    links:
        - curryproxy:curry
    external_links:
        - rse_rse_1:rse
        - rse_rse_2
        - rse_rse_3
        - rse_cache_1:cache
    volumes:
        - .:/home/phoenix

์œ„์˜ ๋‚ด์šฉ์€ ๋‚ด ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์—์„œ ๋ฐœ์ทŒํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ํ˜ธ์ŠคํŠธ์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ๋กœ์ปฌ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด nginx ์ธ์Šคํ„ด์Šค ์ด์™ธ์˜ ๊ฒƒ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ท€ํ•˜์˜ ๋ช…๋ช…๋ฒ•์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋ฒˆ์—ญ๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค... ์ด๊ฒƒ์€ "์ถœํŒ" ์ธก๋ฉด์˜ ์ผ๋ถ€์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‚ด๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ถœํŒ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์˜๋„๋œ ๊ฒƒ์ด๋ผ๋ฉด ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋„คํŠธ์›Œํฌ(์˜ˆ: ์—ฌํ–‰)์— ์žˆ์„ ๋•Œ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ๊ทน๋„์˜ ์œ„ํ—˜์— ๋…ธ์ถœ์‹œํ‚ค๋ฏ€๋กœ ๋ณด์•ˆ์ด ์ทจ์•ฝํ•œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ๊ธฐ๋ณธ๊ฐ’์ด ์ฆ‰์‹œ ๋ณ€๊ฒฝ๋  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์˜ต์…˜์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ข‹์€ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•ฝ๊ฐ„ ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€์—์„œ ์—ฐ๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋Š” (๊ธฐ๋ณธ์ ์œผ๋กœ) 172.17.0.0/16 ๋„คํŠธ์›Œํฌ์— ์žˆ์œผ๋ฉฐ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํ˜ธ์ŠคํŠธ์—์„œ ์ •์˜๋œ ๊ฒฝ๋กœ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์ƒ๊ฐํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์™ธ๋ถ€ IP๊ฐ€ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ๋กœ ๋ผ์šฐํŒ…๋˜๋Š” ํŠธ๋ž˜ํ”ฝ์ด ์‚ญ์ œ๋˜์ง€ ์•Š๋Š” ๊ฐœ์ธ IP์ธ ๊ฒฝ์šฐ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(๊ณต์šฉ์—์„œ ๊ฐœ์ธ์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•จ). ์ด๊ฒƒ์ด ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ?

@justincormack ๊ทธ๋ž˜์„œ ์ผ๋ถ€ ์„œ๋น„์Šค๋Š” ํ”„๋ก์‹œ(nginx - ssl ์ข…๋ฃŒ)๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ์ค‘๋  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ์ ˆํ•œ ํ”„๋ก์‹œ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํ”„๋ก์‹œ๋Š” ์ธ์ฆ ํ”„๋ก์‹œ(repose)๋ฅผ ํ†ตํ•ด ํ•„ํ„ฐ๋งํ•˜๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค(phoenix)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค ๋ชจ๋‘๊ฐ€ 0.0.0.0 ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ์œผ๋ฉด ๋œ ์‹ ๊ฒฝ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” nginx๊ฐ€ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šค ๊ฐ€๋Šฅํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ์—ฌ๊ธฐ์— nginx๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ตœ์†Œํ•œ ํœด์‹ ๋ถ€๋ถ„). ์˜ˆ๋ฅผ ๋“ค์–ด ์‰ฌ์šด ์†”๋ฃจ์…˜์€ ๊ตฌ์„ฑ์—์„œ "127.0.0.1"์„ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ ๋„์ปค ๋„คํŠธ์›Œํฌ ๋ฐ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ(๋ฃจํ”„๋ฐฑ) ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

firewall:
    external:
        ports:
            - 80
            - 443

์ด์ œ _host_์˜ ๋„คํŠธ์›Œํฌ ๋งคํ•‘์„ ๊ธฐ๋ณธ 0.0.0.0 ๋งต ๋Œ€์‹  127.0.0.1๋กœ ์ œํ•œํ•˜์—ฌ ์ƒํ™ฉ์„ ์–ด๋Š ์ •๋„ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ฆฌ์ง•์ด ํ˜ธ์ŠคํŠธ ํฌํŠธ๋ฅผ ๋„์ปค ๋„คํŠธ์›Œํฌ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์™„ํ™”๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋ฆฌ๊ณ  ์˜ˆ, ๋‚˜๋Š” ๊ทธ ์ œํ•œ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์ž ์žฌ์ ์ธ ์ทจ์•ฝ์ ์ด ๋‚จ์•„ ์žˆ๊ณ  ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ์‹ค์ œ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ, IPtables์— ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ด๋ ค ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ ํฌํŠธ์™€ ๊ด€๋ จ๋œ Linux ์ปค๋„ ์ทจ์•ฝ์ ์ด ์ž ์‹œ ๋™์•ˆ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(ํ˜„์žฌ ์ฐพ๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ). ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์—ฐ๊ฒฐ๋˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. - ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ํฌํŠธ์— ์žˆ์ง€๋งŒ ๊ณต์šฉ IP ํฌํŠธ์—๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž ์žฌ์ ์œผ๋กœ ๊ทธ๊ฒƒ์„ ์„ค์ •ํ•˜๋ฉฐ, IPtables ๊ทœ์น™์„ ์–ด๋””์—์„œ๋‚˜ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ด์–ด ๋‘๋Š” ๋Œ€์‹  ์˜ˆ์ƒ๋˜๋Š” ๋„คํŠธ์›Œํฌ๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์ตœ์†Œํ•œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ทธ ํŠน์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์ง€๋งŒ ๊ฐ€๋Šฅ์„ฑ์„ ์—ด์–ด ๋‘๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

IOW, ๋ณด์•ˆ์— ๊ด€ํ•œ ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@BenjamenMeyer ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋ ค๋ฉด ํ•ด๋‹น ํฌํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ฆ‰, "127.0.0.1:8081:8081" ๋Š” ๋„์ปค ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์•ก์„ธ์Šค๋˜๋Š” ๊ฒฝ์šฐ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋‹ค๋ฅธ ์„œ๋น„์Šค๋Š” ๋„์ปค ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์—ฐ๊ฒฐ๋จ).

์ด๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” ํฌํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ์‹ถ์ง€๋งŒ ํŠน์ • IP ์ฃผ์†Œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ช‡ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ Jenkins ํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋Š” "๊ฒŒ์‹œ"๋˜์—ˆ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ 2๊ฐœ์˜ ์‚ฌ๋ฌด์‹ค๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž ๊ทธ๊ธฐ ์œ„ํ•ด ๊ฝค ๋ณต์žกํ•œ iptables ๊ทœ์น™์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ Docker์— ๋‚ด์žฅ๋œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ตœ์†Œํ•œ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๊นŒ? ๋ฌธ์„œ์—์„œ 1๊ฐœ์˜ IP ์ฃผ์†Œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ ๊ฐœ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ์ด๋ฏธ iptables ๊ตฌ์„ฑ์ด ์žˆ๋Š” ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ทœ์น™์„ ์ ์šฉํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ๊ทœ์น™์„ ์žฌ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๋ณต์žกํ•œ ๊ทœ์น™).

@SeerUK์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ๊ฒŒ์‹œ๋œ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ์— ์ ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ ์˜ˆ์ƒ์„ ๊นจ๋Š” ์ด์ƒํ•œ ์œ„๋ฐ˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋™์ž‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค(์ ์–ด๋„ ์ €์—๊ฒŒ๋Š”)

  1. ์‚ฌ์šฉ์ž ์—ฐ๊ฒฐ ์‹œ๋„๋Š” INPUT ๊ตฌ์„ฑ ๋“ฑ์— ๋”ฐ๋ผ ํ•„ํ„ฐ๋ง๋ฉ๋‹ˆ๋‹ค.
  2. ํŠธ๋ž˜ํ”ฝ ํฌ์›Œ๋”ฉ์€ ๋„์ปค๊ฐ€ ์ถ”๊ฐ€ํ•œ FORWARD ๊ทœ์น™์— ๋”ฐ๋ผ ํ‰์†Œ์™€ ๊ฐ™์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

iptables์—์„œ ์ด๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๊ฐ„๊ฒฐํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๊ทธ๋Ÿฌํ•œ ๊ตฌ์„ฑ์„ ์‰ฝ๊ฒŒ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ํŠนํžˆ iptables์— ๋Œ€ํ•œ ์ง€์‹์ด ์ œํ•œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์–‘ํ•ดํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์ตœ๊ทผ์— ๋„์ปค์™€ ๋„์ปค์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ดํ•ดํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด์„œ ์ด์— ๋Œ€ํ•œ ์ง€์‹์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๊ฝค ๊ฐ•๋ ฅํ•œ ์ „์šฉ ์„œ๋ฒ„์—์„œ ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹น๋ถ„๊ฐ„ ์‹ค์ œ๋กœ ์˜์ง€ํ•œ ๊ฒƒ์€ Docker๋ฅผ ์‹คํ–‰ํ•˜๋Š” KVM VM์„ ์„ค์ •ํ•œ ๋‹ค์Œ ํ˜ธ์ŠคํŠธ๋กœ๋ถ€ํ„ฐ์˜ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํ‘œ์ค€ iptables ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. . VM์—๋Š” ์„œ๋ฒ„์—์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ํ˜ธ์ŠคํŠธ์˜ iptables์— ์žˆ๋Š” ํฌํŠธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•˜๋Š” ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ด ์•ฝ๊ฐ„ ๋–จ์–ด์กŒ์ง€๋งŒ ๋งŽ์ด๋Š” ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@thaJeztah ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ ์•ก์„ธ์Šคํ•˜์—ฌ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Health ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์žˆ๋Š” RESTful HTTP API๋ฅผ ์„ค์ •ํ•˜๊ณ  localhost๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์— ๋Œ€ํ•ด curl ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ). ๋‚ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•˜๊ธฐ๋งŒ ์›ํ•˜์ง€๋งŒ ํ˜ธ์ŠคํŠธ์—์„œ๋„ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

@SeerUK ์˜ ๊ฒฝ์šฐ IP ๋ธ”๋ก(5.5.0.0/16 - iptables ๊ทœ์น™์˜ ์†Œ์Šค ์ฃผ์†Œ์— ๋Œ€ํ•œ ์œ ํšจํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜)์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ข‹์€ ์ผ์ž…๋‹ˆ๋‹ค. IPtables์—๋Š” ์ด๋ฏธ ์ œํ•œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ docker๋Š” ์ด๋ฅผ ํ™œ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@thaJeztah ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ ์ด๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ช…์‹œ์ ์œผ๋กœ "127.0.0.1:8081:8081" ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋…ธ์ถœ๋œ ํฌํŠธ๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ์— ํฌ๋ž™์„ ์‹œ๋„ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋กœ๊ทธ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹น์žฅ ๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‚ด๊ฐ€ ์™ธ๋ถ€์— ์žˆ๊ณ  ์‹ถ์€ ํ™˜๊ฒฝ์ด ์‹ค์ œ๋กœ ์™ธ๋ถ€์ธ์ง€ _is_ ์žˆ๋Š”์ง€ ๋˜๋Š” ๋ณด์•ˆ ๋ชฉ์ ์„ ์œ„ํ•ด ํ™˜๊ฒฝ์ด ์ ์ ˆํ•˜๊ฒŒ ์ œํ•œ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋ฃจ๋ฅผ ๋– ๋‚˜๊ธฐ ์ „์— ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@BenjamenMeyer ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•ด๋‹น ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

docker run --net -it --rm --net=mynetwork healthchecker 

Ben์ด ๋ฐํžˆ๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๋Š” ํ˜„์‹ค์ ์ด๊ณ  ๋†€๋ผ์šด ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‚˜์œ ์กฐํ•ฉ). ์ €์ฒ˜๋Ÿผ ๋งŽ์€ ๊ด€๋ฆฌ์ž๋“ค์ด ๊ฒ€์ฆ๋œ ufw ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Docker๋Š” ufw ์ฃผ๋ณ€์—์„œ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉฐ iptables ๊ทœ์น™์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ 1) ufw๊ฐ€ ํŒจํ‚ท ํ•„ํ„ฐ๋ง ๊ทœ์น™์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ž˜๋ชป ๋ณด๊ณ ํ•˜๊ฒŒ ํ•˜๊ณ  2) ๊ฒ‰๋ณด๊ธฐ์— ์‚ฌ์ ์ธ ์„œ๋น„์Šค๋ฅผ ๊ณต์šฉ ๋„คํŠธ์›Œํฌ์— ๋…ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. docker๊ฐ€ sysadmin ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ข‹์€ ์ ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ณ ์•ˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ Ben๊ณผ ๋‚˜์ฒ˜๋Ÿผ ์‹ค์ˆ˜๋กœ ๋” ๋„“์€ ์ธํ„ฐ๋„ท์— ํฌํŠธ๋ฅผ ๊ฐœ๋ฐฉํ•œ ๋งŽ์€ ๊ด€๋ฆฌ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Ben๊ณผ ๋‚˜์™€ ๋‹ฌ๋ฆฌ ๊ทธ๋“ค์€ ์•„์ง ๊ทธ๊ฒƒ์„ ์•Œ์•„๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค.

@thaJeztah ๋Š” ๋ช…๋ น์ค„์„ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•˜๊ณ  IP ์ฃผ์†Œ๋งŒ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ €๋Š” API ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ API๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ ๋ฐ API ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๋„๊ตฌ๊ฐ€ ๊ณ ์ •๋œ API๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ๋„์ปค์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ์•Œ์ง€ ๋ชปํ•˜๋ฉฐ ๋„์ปค์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ๋„์ปค์— ๋„ฃ๊ณ  ์‹ถ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์—๋งŒ ๋…ธ์ถœ๋œ ํฌํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@jcheroske ๋™์˜ํ•˜์ง€๋งŒ _that_ ์ธก๋ฉด์— ๋Œ€ํ•œ ์ข‹์€ ์†”๋ฃจ์…˜์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ufw ๋Š” ์ƒ์„ฑ์— ๊ด€์—ฌํ•˜์ง€ ์•Š์€ ๊ทœ์น™์„ ์กฐํšŒํ•˜๊ณ  ๋ณด๊ณ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋” ์Šค๋งˆํŠธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ufw (๋˜๋Š” AFAIK firewalld ๋“ฑ)์ด ์•Œ์ง€ ๋ชปํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ iptables ๊ทœ์น™์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…๋„ ์—†์Šต๋‹ˆ๋‹ค.

์ฆ‰, Docker๊ฐ€ ์ ์ ˆํ•œ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋คํ”„ํ•˜์—ฌ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น ๋„๊ตฌ์™€ ํ†ตํ•ฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋˜์–ด ์ •๋ณด๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๋คํ”„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” _๊ทธ_ ์ธก๋ฉด์ด ์‹ค์ œ๋กœ ํ•ด๊ฒฐ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š” ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์†Œ์Šค(lo, eth0, 127.0.0.0/24 ๋“ฑ)์˜ ์‚ฌ์–‘์„ ํ—ˆ์šฉํ•˜์—ฌ ์ž ์žฌ์ ์ธ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋˜๋Š” iptables ๊ทœ์น™์˜ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•  ์˜ํ–ฅ์ด ์žˆ๋‹ค๋ฉด iptables๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์™„์ „ํžˆ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค. https://gist.github.com/SeerUK/b583cc6f048270e0ddc0105e4b36e480

๋งจ ์•„๋ž˜์—์„œ 1.2.3.4์— ํฌํŠธ 8000(Docker์— ์˜ํ•ด ๋…ธ์ถœ๋จ)์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ๋ช…์‹œ์ ์œผ๋กœ ๋ถ€์—ฌ๋œ ๋‹ค์Œ ํ•ด๋‹น ํฌํŠธ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ์‚ญ์ œ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PRE_DOCKER ์ฒด์ธ์€ DOCKER ์ฒด์ธ ์•ž์— ์‚ฝ์ž…๋˜์–ด ๋จผ์ € ์ ์ค‘๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, DROP์€ ์ฐจ๋‹จ๋œ ์š”์ฒญ์ด DOCKER ์ฒด์ธ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

Docker์— ์ด ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ์ ์€ ์•ฝ๊ฐ„ ์งœ์ฆ๋‚˜์ง€๋งŒ ์ง€๊ธˆ ๋‹น์žฅ์€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋Œ€์•ˆ์€ ์™ธ๋ถ€ ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. AWS ๋ฐ Scaleway์™€ ๊ฐ™์€ ์ผ๋ถ€ ์žฅ์†Œ๋Š” ์™ธ๋ถ€์—์„œ ์ƒ์ž์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ๊ทธ๋ฃน๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—์„œ ๋ชจ๋“  ํฌํŠธ๋Š” ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ UFW์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์œผ๋กœ์„œ๋Š” iptables๋ฅผ ์†”๋ฃจ์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ์ €์—๊ฒŒ ์•„์ฃผ ์ž˜ ๋งž๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ UFW๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ƒ๋‹นํžˆ ๋ณต์žกํ•œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ์„ธํŠธ๋ฅผ ์ด๋ฏธ ๊ตฌ์ถ•ํ–ˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ iptables-persistent์™€ ๊ฐ™์€ ๊ฒƒ์„ ๋งค์šฐ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. iptables์—์„œ ๋” "์ •์ƒ์ ์ธ" ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@BenjamenMeyer ๋Š” ์„œ๋ธŒ๋„ท ๋ฐ IP ๋ฒ”์œ„ ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ์ž ์ •์˜ docker network ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ์— ๊ณ ์ • IP ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๋กœ์ปฌ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉํ•˜์—ฌ ์˜์กดํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐ ํ–ˆ์Šต๋‹ˆ๊นŒ? 127.0.0.1๊ณผ ๊ฐ™์€ ๊ฐ€์ƒ ๊ณ ์ • IP? ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ˜ธ์ŠคํŠธ ์ „์šฉ์ธ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ๋ชจ๋‘ ํ•จ๊ป˜ ํฌํŠธ ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

docker network create --subnet=30.1.0.0/16 --ip-range=30.1.0.0/24 mynetwork
docker run --net=mynetwork --ip=30.1.1.1 --name=myservice1 xxxx
docker run --net=mynetwork --ip=30.1.1.2 --name=myservice2 yyyy

์ด ์„ค์ •์œผ๋กœ myservice2๋Š” myservice1 ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ myservice1์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ณ ์ • IP์— ์˜์กดํ•  ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜ธ์ŠคํŠธ๋Š” ํฌํŠธ ๋งคํ•‘ ์—†์ด๋„ ๊ณ ์ • IP์— ์ž์œ ๋กญ๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ compose 1.7์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์˜ ๊ณ ์ • IP ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๊ณ  ๋„คํŠธ์›Œํฌ ์„œ๋ธŒ๋„ท ๋ฐ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค.

1) /etc/default/docker ํŽธ์ง‘: DOCKER_OPTS="--iptables=false"

2) ufw ๊ทœ์น™ ์ถ”๊ฐ€: ufw allow to <private_ip> port <port>

๋„ˆ๋ฌด ๊ฐ„๋‹จํ•ด์„œ --iptables=false ์˜ต์…˜์ด ๊ธฐ๋ณธ๊ฐ’์ด ์•„๋‹Œ ์ด์œ ๊ฐ€ ์ •๋ง ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋„์ปค๊ฐ€ "์ด๋ด, ๋ฐฉํ™”๋ฒฝ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋ฐฉํ™”๋ฒฝ์— ๊ตฌ๋ฉ์„ ๋šซ์–ด์•ผ ํ•  ๊ฒƒ"์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ๋ฟ์ธ ์ƒํ™ฉ์„ ๋งŒ๋“œ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

https://fralf.me/docker-and-iptables.html
http://blog.viktorpetersson.com/post/101707677489/the-dangers-of-ufw-docker

๋‚ด ์ƒ๋ช…์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด iptables ์ˆ˜์ •์„ ์ค‘์ง€ํ•˜๋„๋ก ๋„์ปค๋ฅผ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Ubuntu 16.04์—์„œ ์†Œ์šฉ์ด ์—†๋„๋ก /etc/default/docker ์—…๋ฐ์ดํŠธ๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

@enzeart /lib/systemd/system/docker.service ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.

@SeerUK ๋‹น์‹ ์˜ ์˜ํ˜ผ์„ ์ถ•๋ณตํ•ฉ๋‹ˆ๋‹ค

@enzeart ๊ฐ€ systemd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ฐ๋ชฌ์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด docker.unit ํŒŒ์ผ ์ž์ฒด๋ฅผ ํŽธ์ง‘ํ•˜์ง€ ์•Š๊ณ  "๋“œ๋กญ ์ธ" ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋„์ปค๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ตœ์‹  docker.unit ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ). ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://docs.docker.com/engine/admin/systemd/#custom -docker-daemon-options๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

daemon.json ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค( https://docs.docker.com/engine/reference/commandline/daemon/#daemon -configuration-file ์ฐธ์กฐ).

@mavenugo ์ด๋ฏธ ๋„์ปค ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@jcheroske ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด _end-user_(๋‚˜)๋Š” ๋ชจ๋“  iptables ๊ทœ์น™์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ตœ์ ์ด ์•„๋‹ˆ๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. docker ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์˜ฌ๋ ค์ฃผ์„ธ์š”. ๋‚˜๋Š” ๊ทธ๊ฒƒ์˜ ๋ฌธ์ œ๋„ ์ƒ๊ฐํ•œ๋‹ค. Iptables์˜ ์ปจํ…Œ์ด๋„ˆ ์ฒด์ธ์€ ๊ธฐ๋ณธ ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธ์ƒ์— ๋…ธ์ถœ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Docker(๋ฐ docker-compose)๊ฐ€ ํ•ด๋‹น ํฌํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” IP๋ฅผ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋˜๋Š” ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

nginx:
    ports:
      - "8000:8000"
    whitelist:
      - 10.6.20.2

10.6.20.2์˜ ์†Œ์Šค IP๋งŒ ์ด ํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ 8000์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

@StefanPanait ์ €๋Š” ๊ทธ ์•„์ด๋””์–ด๊ฐ€ ์ •๋ง ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณผ๋ฅจ ๋ฐ ์•ก์„ธ์Šค/๊ฑฐ๋ถ€ ๋ชฉ๋ก๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

nginx:
  access:
  - "10.0.1.6:allow"
  - "deny"

๋ฌผ๋ก  ์—ฌ์ „ํžˆ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@SeerUK ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ์€ ๊ธฐ๋ณธ์ด์–ด์•ผ ํ•˜์ง€๋งŒ ์™œ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ†ต์‹ ํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•  ์ˆ˜ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋””๋ฒ„๊น…์— ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...

๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์€ ๋„์ปค ๋„คํŠธ์›Œํฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ...์—ฌ์ „ํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

nginx: access: - "10.0.1.6:allow" - "webapi:allow" - "database:deny" - "deny"
์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...์งˆ๋ฌธ์€ ๊ตฌํ˜„์„ ๊ทธ ์ •๋„๋กœ ์ •๋‹นํ™”ํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๊นŒ? ๋ชจ๋ฅด๊ฒ ์–ด์š”.

ํ˜„์žฌ๋กœ์„œ๋Š” ์›๋ž˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‹œ์ž‘ํ•  ํ•ด์ƒ๋„๋กœ ๋””์ž์ธํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿด ์ˆ˜๋„ ์žˆ์Œ).

ํ•œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์™€ ๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋””๋ฒ„๊น…์— ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker network disconnect ? ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์—ฐ๊ฒฐ์„ ๋Š๊ณ  docker network attach ๋‹ค์‹œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธํ„ฐ๋„ท์— ๋…ธ์ถœ๋œ ์„œ๋ฒ„์—์„œ ์ˆ˜๋งŽ์€ ํฌํŠธ๊ฐ€ ์—ด๋ ค ์žˆ์Œ์„ ๋ฐฉ๊ธˆ ๋ฐœ๊ฒฌํ•œ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด UFW๋ฅผ ์‚ฌ์šฉํ•œ ํ›„ ๋‹ค์Œ์„ ํŒŒํ—ค์ณค์Šต๋‹ˆ๋‹ค.

UFW ๋ฐ Docker๊ฐ€ ํฌํ•จ๋œ Ubuntu 16.04๋Š” ์ƒˆ๋กœ์šด ๊ณผ์ œ๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋Š” ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผํ–ˆ๋‹ค : https://svenv.nl/unixandlinux/dockerufw๋ฅผ ํ•˜์ง€๋งŒ 16.04์— ๋Œ€ํ•œ ์ž‘์—…์— ๊ณ ์ • ํ‘œ์‹œ๊ธฐ ํ”Œ๋Ÿฌ์Šค UFW๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋“  ๋ชจ๋“  ๋„์ปค ํฌํŠธ๊ฐ€ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€: http://blog.samcater.com/how-to-set-docker-1-12-to-not-interfere-with-iptables-firewalld/
/etc/docker/daemon.json ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๋‹ค์Œ์„ ๋„ฃ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

{
"iptables": ๊ฑฐ์ง“
}

๊ทธ๋Ÿฐ ๋‹ค์Œ sudo service docker stop ๋ฅผ ๋ฐœํ–‰ํ•œ ๋‹ค์Œ sudo service docker start FINALLY ๋„์ปค๋Š” UFW์˜ ์ ์ ˆํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ: https://chjdev.com/2016/06/08/docker-ufw/

@tajeztah

ํ•œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์™€ ๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋””๋ฒ„๊น…์— ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒŒ ๋„์ปค ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋Š๊น€์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์—ฐ๊ฒฐ์„ ๋Š๊ณ  docker network attach๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์˜ˆ: ์ปจํ…Œ์ด๋„ˆ C, D ๋ฐ E์—์„œ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๊ณ„์† ์œ ์ง€ํ•˜๋ฉด์„œ ์ปจํ…Œ์ด๋„ˆ A์— ๋Œ€ํ•œ ์ปจํ…Œ์ด๋„ˆ B์˜ ์„œ๋ฒ„์—์„œ ์ƒํƒœ ํ™•์ธ ์‹คํŒจ ํ…Œ์ŠคํŠธ. ์ „์ฒด ๋„คํŠธ์›Œํฌ๋ฅผ ๋‹ซ๋Š” ๊ฒƒ๋ณด๋‹ค ์ปจํ…Œ์ด๋„ˆ B๊ฐ€ ์ปจํ…Œ์ด๋„ˆ A๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ƒํƒœ ํ™•์ธ์„ ํ†ต๊ณผํ•˜๋ ค๋ฉด ์ปจํ…Œ์ด๋„ˆ B์— ๋Œ€ํ•œ ์•ก์„ธ์Šค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ "์›๋ž˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ž"๋Š” ๋ง์€ ์ฐธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@gts24 ํฅ๋ฏธ๋กœ์šด ๋ฐœ๊ฒฌ.

IMHO, ์ „์ฒด ๋ฌธ์ œ๋Š” Docker๊ฐ€ ๋ง ๊ทธ๋Œ€๋กœ ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฉํ™”๋ฒฝ(iptables ๋˜๋Š” ๊ธฐํƒ€)์„ ์ „ํ˜€ ๊ฑด๋“œ๋ ค์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. I (์˜ˆ) ์•„ํŒŒ์น˜๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” ๊ฒฝ์šฐ 0.0.0.0:80 ์€ ๋‚ด๊ฐ€ํ•˜๊ณ ์žํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ์–ด๋–ค ๊ทœ์น™์„ ์ง€์ •ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉํ™”๋ฒฝ์—์„œ ํฌํŠธ 80์„ ์—ด๊ฑฐ ๋‚˜ํ•˜์ง€, ๋‚ด ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๋„์ปค(๋ฐ/๋˜๋Š” ์ž‘์„ฑ) ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์žฌ๋ฐœ๋ช…ํ•˜๋Š” ๋Œ€์‹  ์ „์ฒด PUBLISH ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋„๋ก ์ƒˆ๋กœ์šด LISTEN ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ปํ•ด์•ผ docker๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ๊ฐ ํฌํŠธ/์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋œ ๋ฐฉํ™”๋ฒฝ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@gcscaglia ๋Š” ๋ฐ๋ชฌ์— --iptables=false ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ด๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@thaJeztah ์ด ๊ธฐ๋Šฅ์€ Docker๊ฐ€ ๋ฐ๋ชฌ์—์„œ ํ•„์š”ํ•œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™(๋˜๋Š” ๊ด€๋ จ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ํŠธ๋ฆฌ๊ฑฐ ์Šคํฌ๋ฆฝํŠธ ํ›„ํฌ)์„ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์•ˆ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ •์  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๊ณ  ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ(์˜ˆ: ๊ฒŒ์‹œ๋œ ํฌํŠธ)์—๋งŒ ๊ฑฐ์˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒฝ์šฐ์—๋Š” ์žŠ์–ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@thaJeztah ์ •ํ™•ํžˆ taladar๊ฐ€ ๋งํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

--iptables=false ๋Š” ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ ๋‚ด๋ถ€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ๋„คํŠธ์›Œํ‚น๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ --networking=false ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ธ๋ฐ”์šด๋“œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์— ๊ตฌ๋ฉ์„ ๋šซ์ง€ ์•Š๊ณ  ์ผ๋ถ€ ํฌํŠธ/์ธํ„ฐํŽ˜์ด์Šค ์กฐํ•ฉ์—์„œ ์ˆ˜์‹ ํ•˜๋„๋ก ํ•˜๋Š” ์˜ต์…˜(์˜ˆ: LISTEN )์€ ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ณ  ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋ฉฐ --iptables=true ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. .

์ด๋Ÿฌํ•œ ์ฒญ์ทจ ๋ชจ๋“œ์—์„œ "๊ทธ๋ƒฅ ์ž‘๋™"ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๊ณ„์† PUBLISH ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ œ์–ด๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ LISTEN ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@gcsaglia ok, docker๊ฐ€ ๊ธฐ๋ณธ ๊ทœ์น™์„ ์„ค์ •ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ-์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํ‚น์„ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ "๊ฒŒ์‹œ"๋Š” ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด. --iptables ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ -p / --publish _์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ํฌํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌํ•˜๋„๋ก IPTable ๊ทœ์น™์„ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ ์ž์ฒด ๊ฐœ์ธ IP ์ฃผ์†Œ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ์„œ๋น„์Šค๊ฐ€ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋Š” ํฌํŠธ์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค.

@thaJeztah ์•„๋‹ˆ, ๋‹น์‹ ์€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ์‹œ์ž‘ํ–ˆ๊ณ  ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์‹ ํ•˜๋Š” ํ˜ธ์ŠคํŠธ ํฌํŠธ์—์„œ API๋ฅผ ์‹œ์ž‘ํ•œ ์‚ฌ๋žŒ์—๊ฒŒ ์•Œ๋ฆด ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์˜ˆ. Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Jenkins ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Docker๊ฐ€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก SSH ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” ์ฆ‰์‹œ ํŒŒ๊ดด๋ฉ๋‹ˆ๋‹ค. Docker๋Š” Jenkins์— ํ˜ธ์ŠคํŠธ ํฌํŠธ(Docker API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘)์— ์•Œ๋ฆด ๋ฐฉ๋ฒ•์ด ์—†๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค์ •ํ•˜๋„๋ก ํŠธ๋ฆฌ๊ฑฐํ•  ๋ฐฉ๋ฒ•๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— --iptables=false์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™.

๊ท€ํ•˜์˜ ์•„์ด๋””์–ด๋Š” ์˜๊ตฌ์ ์ด๊ณ  ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์— ๊ณ ์ • IP๊ฐ€ ์—†์œผ๋ฉด ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ๊ฐ„๋‹จํ•œ --restart=always๋„ ์ด ์„ค์ •์—์„œ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

@taladar ๋„์ปค๊ฐ€ ํฌํŠธ๋ฅผ ์—ด๊ธฐ ์œ„ํ•ด IPTable์„ ๊ด€๋ฆฌํ•˜์ง€ IPTable ์„ @gcsaglia ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‚ด ํšŒ์‹ ์—์„œ --iptables=false ์‚ฌ์šฉํ•˜์ง€ _not_ ์„ค๋ช…ํ–ˆ์ง€๋งŒ ๊ณ„์† ์‚ฌ์šฉํ•˜๋ ค๋ฉด -p / --publish ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. IPTable์„ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ํฌํŠธ).

@thaJeztah ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€

ํ˜„์žฌ ๋‚ด ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์œ ์ผํ•œ ์†”๋ฃจ์…˜์€ ๋„์ปค ํ˜ธ์ŠคํŠธ์™€ ๋ชจ๋“  ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ ์‚ฌ์ด์— ๋‹ค๋ฅธ ๋ฐฉํ™”๋ฒฝ(๋„์ปค๊ฐ€ ๋งŒ์งˆ ์ˆ˜ ์—†์Œ)์„ ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Docker๊ฐ€ ํฌํŠธ๋ฅผ ์„ธ๊ณ„์— ๊ฐœ๋ฐฉํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ์ด๋ฏธ

๋ชจ๋“  ๊ฒƒ์„ ๊ฐ€์งˆ ์ˆ˜๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ํ™•์‹คํžˆ ๋‹ต๋‹ตํ•ฉ๋‹ˆ๋‹ค. ๋‚ด LISTEN ์•„์ด๋””์–ด์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์—ฌ๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด Docker ํŒ€์ด ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์— ๊ด€์‹ฌ์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

LISTEN ์€(๋Š”) ๋ฌด์—‡์„ ํ• ๊นŒ์š”? EXPOSE ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋Š” ํฌํŠธ์— ์ฃผ์„์„ ๋‹ฌ ์ˆ˜ ์žˆ๋Š” events ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๊ฐœ์„ ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ(๊ฒ€ํ†  ์ค‘์ธ ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ์Œ), ๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋‹น์‹ ์ด ๋งํ–ˆ๋“ฏ์ด ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ์„œ๋น„์Šค๋Š” ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์„ค IP์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค( --net=host ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ). ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ์ด๋Ÿฌํ•œ ๊ฒฉ๋ฆฌ๊ฐ€ ์ •ํ™•ํžˆ Docker ํŒ๋งค ํฌ์ธํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ํ›Œ๋ฅญํ•˜๊ณ  ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ(ํ˜ธ์ŠคํŠธ ๋˜๋Š” ๋„คํŠธ์›Œํฌ์˜ ๋‹ค๋ฅธ ์œ„์น˜)์ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ํ•ด๋‹น ์„œ๋น„์Šค๊ฐ€ ํ˜ธ์ŠคํŠธ์˜ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ์ค‘ ํ•˜๋‚˜์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋„๋ก ํ•˜๋Š” ์ˆ˜๋‹จ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Docker๋Š” -p / --publish ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ์„ ํƒํ•œ ํ˜ธ์ŠคํŠธ์˜ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์„ ํƒํ•œ ํฌํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์„ค IP์˜ ์„ ํƒ๋œ ํฌํŠธ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ iptables ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. (์ž‘์—…์— ์ „๋‹ฌ ๋ถˆํ•„์š”ํ•˜๊ณ  ๋”ฐ๋ผ์„œ ๋†€๋ผ๊ฒŒ ์šฐ๋ฆฌ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ์„ ์žก๋Š”๋‹ค ์–ด๋–ค) ์„ ํƒํ•œ ํ˜ธ์ŠคํŠธ์˜ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํ•ด๋‹น ํฌํŠธ์— ์„ธ๊ณ„ ์•ก์„ธ์Šค์˜ ์–ด๋””์—์„œ ๋ˆ„๊ตฌ๋ฅผ ํ—ˆ์šฉ iptables์— ์ง€์‹œ

๋‚ด๊ฐ€ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ๋ชจ๋“  ์„œ๋น„์Šค/ํ”„๋กœ๊ทธ๋žจ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ "1"๋งŒ ์ˆ˜ํ–‰ ํ•˜๊ณ  "2"๋ฅผ ์‚ฌ์šฉ์ž์˜ ์žฌ๋Ÿ‰์œผ๋กœ ํ—ˆ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ( LISTEN ๋˜๋Š” ๊ธฐํƒ€)์ž…๋‹ˆ๋‹ค.

EXPOSE ๊ฒฝ์šฐ AFAIK๋Š” Docker ์ด๋ฏธ์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ผ ๋ฟ์ด๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ -P (๋ชจ๋“  ๊ฒƒ์„ ๊ฒŒ์‹œ)๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋ฐ๋ชฌ์ด ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋‚ด๊ฐ€ ํ‹€๋ ธ๊ณ  "๋…ธ์ถœ๋œ" ํฌํŠธ๋ฅผ ์žฌ์‹œ์ž‘ ๋ฐฉ์ง€ ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(์ „ ์„ธ๊ณ„ ์•ก์„ธ์Šค ์—†์Œ)?

--์ฃผ์ œ๋ฅผ ๋ฒ—์–ด--

์ด๋Ÿด์ด ๋ฌธ์ œ์˜ ์˜์—… ์ด์ต์€ ์ด์œ ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์š”๊ตฌํ•˜๊ณ ์žˆ๋‹ค -p "2"์–ด๋–ป๊ฒŒ ๊ทธ ์ผ์—์„œ ๋ถ€๋‘ ๋…ธ๋™์ž๋ฅผ ์ค‘์ง€ํ•˜๋ ค๋ฉด ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ๋ชฌ ์ˆ˜์ค€ ์„ค์ •(๋„คํŠธ์›Œํ‚น ๋น„ํ™œ์„ฑํ™” ์ œ์™ธ)์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ(์˜ˆ: LISTEN ๋˜๋Š” ๋‹ค๋ฅธ ์ด๋ฆ„)์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ "์ฆ‰์‹œ ์ž‘๋™" ํšจ๊ณผ์™€ ๊ฐ™์€ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์ง€๋งŒ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋Š” iptables / firewalld ์ด์™ธ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐฉํ™”๋ฒฝ์˜ ํฌํŠธ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฉํ™”๋ฒฝ ๊ด€๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋ณด๊ณ ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์€ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค.

  1. Docker์˜ ํฌํŠธ ๊ฒŒ์‹œ/๋…ธ์ถœ ๋ฐฉ์‹์€ UFW์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์šฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  2. ์œ„์˜ ์‚ฌ์‹ค์€ ์ž˜ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ์ž์ฒด๋ฅผ ์šฐํšŒํ•˜๋Š” ๋‹ค๋ฅธ Linux ์„œ๋น„์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํžˆ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ž…๋‹ˆ๋‹ค).
  3. iptables๋ฅผ Docker์˜ ํฌํŠธ ๊ฒŒ์‹œ/๋…ธ์ถœ ๋ฐฉ์‹์— ์ ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ FILTER ํ…Œ์ด๋ธ”์—์„œ ํฌํŠธ ๋…ธ์ถœ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ์ˆ ์ ์œผ๋กœ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ 1์„ ๊ณ ์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ์ด๊ฒƒ์€ ์–ด๋”˜๊ฐ€์— ํฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜์ง€๋งŒ(์ˆ˜์ • 2), ์ด์ƒ์ ์œผ๋กœ 3์€ ์ถ”๊ฐ€ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  allow ๋˜๋Š” deny ์™€ ๊ฐ™์ด ์—ฌ๊ธฐ ์‚ฌ๋žŒ๋“ค์ด ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์˜ต์…˜์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ์ถœ/๊ฒŒ์‹œ๋œ ํฌํŠธ์— ๋Œ€ํ•ด ํŠน์ • IP๋ฅผ ์ž๋™์œผ๋กœ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด "elasticsearch" ๊ฒŒ์‹œ ํฌํŠธ 9200์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ allow: "tcp:{your_trusted_ip}" ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

iptables -t mangle -N DOCKER-elasticsearch
iptables -t mangle -A DOCKER-elasticsearch -s {your_trusted_ip} -j RETURN
iptables -t mangle -A DOCKER-elasticsearch -j DROP
iptables -t mangle -I PREROUTING -p tcp --dport 9200 -j DOCKER-elasticsearch

Docker ๋ฌธ์„œ์—์„œ ์ด๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. https://docs.docker.com/engine/userguide/networking/default_network/container-communication/#communicating -to-the-outside-world

Docker์˜ ์ „๋‹ฌ ๊ทœ์น™์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์™ธ๋ถ€ ์†Œ์Šค IP๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • IP ๋˜๋Š” ๋„คํŠธ์›Œํฌ๋งŒ ์ปจํ…Œ์ด๋„ˆ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด DOCKER ํ•„ํ„ฐ ์ฒด์ธ ์ƒ๋‹จ์— ๋ถ€์ • ๊ทœ์น™์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์†Œ์Šค IP 8.8.8.8๋งŒ ์ปจํ…Œ์ด๋„ˆ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์™ธ๋ถ€ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ iptables -I DOCKER -i ext_if ! -s 8.8.8.8 -j ๋“œ๋กญ

@jmimico ์˜ˆ, ๋‚˜๋Š” ์ „์— ๊ทธ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. 2๊ฐœ ์ด์ƒ์˜ IP์—์„œ ์•ก์„ธ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ œํ•œํ•ฉ๋‹ˆ๊นŒ?

Docket์ด ์ด์ œ ์Šคํฌ๋ฆฝํŠธ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๋ชจ๋“  Docker ๋‚ด๋ถ€ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ iptables ๊ทœ์น™์„ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ์œ„์น˜์—์„œ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด๊ฐ€์š”? ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ํ•„์š”ํ•œ ๊ทœ์น™์„ ์ •ํ™•ํžˆ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด iptables-restore๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ด์œ ๋กœ ์ฒด์ธ์„ ํ”Œ๋Ÿฌ์‹œํ•œ ํ›„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ™œ์„ฑ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์Šคํฌ๋ฆฝํŠธ์˜ ์žฌ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

Docker๋Š” ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์‚ฌ์ „ ๊ตฌ์ถ•๋œ ๋ฐฉํ™”๋ฒฝ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ํ›„ํฌ ์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐฐํฌ ์„ธํŠธ์— ์˜ํ•ด ์ด์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ ์œ„์— ๊ตฌ์ถ•๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๊ปํ•ด์•ผ localhost์—๋งŒ ๋…ธ์ถœํ•˜๊ณ  ์ „์—ญ์ ์œผ๋กœ(Docker๊ฐ€ ํ˜„์žฌ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ) ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IPTables๋Š” Docker๊ฐ€ ์„ค์ •์—์„œ ์ง์ ‘ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ‹ฐ์ผ“์€ ๊ฒ‰๋ณด๊ธฐ์—๋Š” ์˜์›ํžˆ ์กด์žฌํ•ด ์™”์œผ๋ฉฐ ํ˜„์žฌ ๋™์ž‘์œผ๋กœ ์ธํ•ด Docker ๊ฒฝ๊ณ„์„ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ ์ ˆํ•œ ๋‚ด์žฅ GC๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ปค๋„ ๋ฒ„๊ทธ๊ฐ€ ์—†๋Š” ์„ฑ๋Šฅ์ด ์ข‹์€ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ๊ฑฐ์˜ ์—†์Œ๊ณผ ๊ฐ™์ด ์ด ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ,...) ๊ทธ๋ฆฌ๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์ž์‹ ์˜ ํ™˜๊ฒฝ์— ๋งž๋Š” ์ž์ฒด ์†”๋ฃจ์…˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์‰ฌ์šด ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@StefanPanait ์ข‹์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚ด ์ƒ๊ฐ์— ๋‹น์‹ ์€ ๊ฐ์ฒด ๊ทธ๋ฃน์˜ ์‚ฌ์šฉ์„ ํ™œ์šฉํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด ๊ทธ๋ฃน์„ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ IP๋กœ ์ฑ„์šด ๋‹ค์Œ DOCKER ์ฒด์ธ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—์„œ ํ•ด๋‹น ๊ฐ์ฒด ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:
iptables -N ๋„์ปค ํ—ˆ์šฉ
iptables -A docker-allow -s 1.1.1.1 -j ACCEPT
iptables -A docker-allow -s 2.2.2.2 -j ACCEPT
iptables -A docker-allow -s 3.3.3.3 -j ACCEPT
iptables -A ๋„์ปค ํ—ˆ์šฉ -j DROP

iptables -I DOCKER -i ext_if -j docker-allow

DOCKER ์ฒด์ธ์— ์ถ”๊ฐ€๋œ ๊ทœ์น™์ด ๋ฐ๋ชฌ ์žฌ์‹œ์ž‘๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ฐฉํ•ด๋ฅผ ๋ฐ›์€ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ˆ˜๋™ ์†”๋ฃจ์…˜์˜ ๋ฌธ์ œ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ(๊ฐœ๋ณ„ IP ์ฐจ๋‹จ/ํ—ˆ์šฉ)๋ฅผ ๋ณด๋‹ค ์ง์ ‘์ ์œผ๋กœ ๋” ์ž˜ ์ง€์›ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ด๊ฒƒ์„ ์ง€์›ํ•˜๋Š” ์ ์ ˆํ•œ ์žฅ์†Œ๊ฐ€ ๋ ๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด "ufw" ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ufw ํ˜ธํ™˜ ๋ฐฉ์‹์œผ๋กœ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ผ๋ฐ˜ ๋ฐฉํ™”๋ฒฝ ๋„๊ตฌ ์ฒด์ธ์œผ๋กœ ๋ฐฉํ™”๋ฒฝ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ  ๋„์ปค ์„œ๋น„์Šค๊ฐ€ ์ผ๋ฐ˜ ํ˜ธ์ŠคํŠธ ์„œ๋น„์Šค์ฒ˜๋Ÿผ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DOCKER ์ฒด์ธ์— ์ถ”๊ฐ€๋œ ๊ทœ์น™์ด ๋ฐ๋ชฌ ์žฌ์‹œ์ž‘๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ฐฉํ•ด๋ฅผ ๋ฐ›์€ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ˆ˜๋™ ์†”๋ฃจ์…˜์˜ ๋ฌธ์ œ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ(๊ฐœ๋ณ„ IP ์ฐจ๋‹จ/ํ—ˆ์šฉ)๋ฅผ ๋ณด๋‹ค ์ง์ ‘์ ์œผ๋กœ ๋” ์ž˜ ์ง€์›ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

DOCKER-USER ์ฒด์ธ์— ์‚ญ์ œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋„์ปค๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋Š” ๋™์•ˆ ์ง€์†๋˜๋„๋ก ํ•˜๋Š” ๋ฐ ๋” ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Docker v.17.06์—๋Š” DOCKER-USER๋ผ๋Š” ์ƒˆ๋กœ์šด iptables ์ฒด์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. serverfault์— ๋Œ€ํ•œ ๋‚ด ๋‹ต๋ณ€์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. https://serverfault.com/questions/704643/steps-for-limiting-outside-connections-to-docker-container-with-iptables/886257#886257

SF์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ด DOCKER-USER ์ฒด์ธ์ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์ถ”๊ฐ€ ์ฒด์ธ๊ณผ ๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ๊ทธ๋ฆฌ์›Œ์š”. ๋ฏธ๋ฆฌ ์ ์šฉ๋œ ํ•„ํ„ฐ๊ฐ€ ์—†๊ณ  docker-container-destination ํŠธ๋ž˜ํ”ฝ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ํ•„ํ„ฐ๋งํ•˜๋ฏ€๋กœ ์—ฌ์ „ํžˆ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์„ ์ง์ ‘ ์ง€์ •ํ•ด์•ผ ํ•˜๋ฉฐ iptables๊ฐ€ ์•„๋‹Œ ์ „๋ฌธ๊ฐ€๊ฐ€ ์‹ฌ๊ฐํ•œ ์‹ค์ˆ˜๋ฅผ ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— iptables๋ฅผ Docker ์ด์ƒ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์งœ์ฆ๋‚˜๋Š” "Docker๊ฐ€ ์œ ์ผํ•œ iptables ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค"๋ผ๋Š” ์‚ฌ๊ณ  ๋ฐฉ์‹์ด ์—ฌ์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ „์ฒด ํ˜ธ์ŠคํŠธ๋ฅผ Docker์—๋งŒ ์ „๋…ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค ์™ธ์— ์ž ์žฌ์ ์ธ ์ „์ฒด ๋ฒ”์œ„์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. DOCKER-USER๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ Docker ๊ด€๋ จ ๊ทœ์น™๋ณด๋‹ค ๋จผ์ € ์ฒด์ธ์— ์‚ฝ์ž…๋˜๋„๋ก ํ•˜์—ฌ ์‚ฝ์ž… ์ˆœ์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์‹œ์ ์—์„œ --dport ๋Š” ๋…ธ์ถœ๋œ ํฌํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์˜ ์„œ๋น„์Šค ํฌํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์„ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์‰ฌ์›Œ์ง€์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

ํฌํŠธ 9900์„ ๊ฒŒ์‹œํ•˜์—ฌ 9000์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋Š” ๋„์ปค ์„œ๋น„์Šค๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

$ sudo iptables -A DOCKER-USER -m limit --limit 20/min -j LOG --log-prefix "IPTables: "
$ docker run --rm -it -p '192.168.56.101:9900:9000' alpine nc -l 9000

๋„คํŠธ์›Œํฌ์˜ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ:

$ telnet 192.168.56.101 9900

๊ธฐ๋ก๋˜๋Š” ๋‚ด์šฉ:

IPTables: IN=enp0s8 OUT=docker0 MAC=08:00:27:b6:8d:d6:0a:00:27:00:00:04:08:00 SRC=192.168.56.1 DST=172.17.0.2 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=14127 DF PROTO=TCP SPT=51208 DPT=9000 WINDOW=64240 RES=0x00 SYN URGP=0
IPTables: IN=docker0 OUT=enp0s8 PHYSIN=veth05ba007 MAC=02:42:0f:f9:76:4c:02:42:ac:11:00:02:08:00 SRC=172.17.0.2 DST=192.168.56.1 LEN=40 TOS=0x00 PREC=0x00 TTL=63 ID=23041 DF PROTO=TCP SPT=9000 DPT=51208 WINDOW=0 RES=0x00 ACK RST URGP=0

๋ณด์‹œ๋‹ค์‹œํ”ผ ์ด ์‹œ์ ์—์„œ๋Š” ํฌํŠธ 9900์œผ๋กœ ๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ํ•„ํ„ฐ๋งํ•  ๊ธฐํšŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํŠธ๋ž˜ํ”ฝ์„ 9000์œผ๋กœ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด๋ถ€ ํฌํŠธ๊ฐ€ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์„œ๋น„์Šค ๊ฐ„์— ์˜๋„์น˜ ์•Š๊ฒŒ ๊ฒน์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ํฌํŠธ ์ถฉ๋Œ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๋„์ปค์˜ ํ›Œ๋ฅญํ•œ ํŒ๋งค ํฌ์ธํŠธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งŽ์€ ์ปจํ…Œ์ด๋„ˆ๋Š” ํฌํŠธ์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž๋Š” --publish ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ํฌํŠธ๊ฐ€ ์–ด๋–ค ์ธํ„ฐํŽ˜์ด์Šค์— ํ‘œ์‹œ๋˜๋Š”์ง€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ docker run -d -p 7777:6379 --name data1 redis
$ docker run -d -p 8888:6379 --name data2 redis

๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋‚ด์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์‹œ์ ์ธ ๋Œ€์ƒ ์ปจํ…Œ์ด๋„ˆ IP๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ์•Š๋Š” ํ•œ DOCKER-USER(ํ‹€๋ฆฐ ๊ฒฝ์šฐ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ data1์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŒ… ๋ฐ ๋‚ด๋ถ€ ๊ฒ€์‚ฌ ์—†์ด ๊ฒŒ์‹œ๋œ ์„œ๋น„์Šค๋ฅผ ๋ฐฉํ™”๋ฒฝ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์•ˆ์ •์ ์ธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$ sudo iptables -A DOCKER-USER -p tcp -m tcp -s 192.168.56.0/24 --dport 7777 -j RETURN
$ sudo iptables -A DOCKER-USER -p tcp -m tcp -s 10.0.24.0/24 --dport 8888 -j RETURN
$ sudo iptables -A DOCKER-USER -p tcp -m tcp --dport 7777 -j DROP
$ sudo iptables -A DOCKER-USER -p tcp -m tcp --dport 8888 -j DROP

์ด๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ๋‘ ์„œ๋น„์Šค๊ฐ€ ๋ชจ๋‘ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” CIDR์— ๋…ธ์ถœ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$ sudo iptables -A DOCKER-USER -p tcp -m tcp -s 192.168.56.0/24 --dport 6379 -j RETURN
$ sudo iptables -A DOCKER-USER -p tcp -m tcp -s 10.0.24.0/24 --dport 6379 -j RETURN
$ sudo iptables -A DOCKER-USER -p tcp -m tcp --dport 6379 -j DROP

๋”ฐ๋ผ์„œ DOCKER-USER๋Š” ๋‚ด๋ถ€ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก iptables ๊ทœ์น™์„ ์ž‘์„ฑํ•˜๊ณ  ๋™์ผํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋“  ํฌํŠธ๋ฅผ ํŠน์ • IP์— ๋…ธ์ถœํ•˜๋Š” ๋ฐ๋งŒ ์œ ์šฉํ•˜์ง€๋งŒ ํŠน์ • IP์— ํŠน์ • ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ํฌํŠธ ๋ฒˆํ˜ธ. ๋ชจ๋‘๊ฐ€ ์ด๋Ÿฌํ•œ ์ ์„ ๋†“์น˜๊ณ  DOCKER-USER๋ฅผ ์†”๋ฃจ์…˜์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ์ด๊ฒƒ์ด ์ƒˆ๋กญ๊ณ  ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@SeerUK
https://gist.github.com/SeerUK/b583cc6f048270e0ddc0105e4b36e480์— ๊ฒŒ์‹œ๋œ ์†”๋ฃจ์…˜์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋„์™€์ฃผ์‹œ๊ฒ ์–ด์š”?

docker ์˜ค๋ฅ˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ผ์šฐํŒ…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด iptables(์‹œ์Šคํ…œ ๋ฐฉํ™”๋ฒฝ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์˜์›ํžˆ ๋ฌธ์ œ์™€ ํ˜ผ๋ž€์„ ์ผ์œผํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. iptables๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. docker์— ํฌํ•จ๋œ ์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ๋น„์‹ธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ docker๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋ฉด ๋™์‹œ์— ์ผ๊ด€์„ฑ์ด ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„์ปค๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ iptables๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด iptables์— ์ด์ƒํ•œ ๋™์ž‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. docker๋ฅผ ์ค‘์ง€ํ•˜๋ฉด iptables๋ฅผ ์„ค์ •ํ•˜๊ณ  docker๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ชจ๋‘ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๊ฑฑ์ •์€ ... ํ”„๋กœ๋•์…˜์—์„œ iptables๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋ฉด?

๋„์ปค๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ iptables๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด iptables์— ์ด์ƒํ•œ ๋™์ž‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

iptables๋Š” iptables์ด๋ฉฐ ๋„์ปค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ์—ฌ๋ถ€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

iptables๊ฐ€ iptables๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ๋™์–ด๋ฐ˜๋ณต์— ๋ถˆ๊ณผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋งํ•˜๊ธฐ ์ „์— ... ์ „์— ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ œ ์ œ์•ˆ์ž…๋‹ˆ๋‹ค :)

๋‚˜๋Š” ๊ทธ์˜ ์š”์ ์ด ๋‹น์‹ ์˜ ์˜๊ฒฌ์ด ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Docker๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ iptables๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ๋™์ผํ•œ ์‹œ์Šคํ…œ์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ iptables๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์˜ Docker ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

DOCKER-USER ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
iptables๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ํฌํŠธ, ๋Œ€์ƒ ํฌํŠธ, ์†Œ์Šค ์ฃผ์†Œ, ๋กœ์ปฌ์ด ์•„๋‹Œ ํŠธ๋ž˜ํ”ฝ ๋“ฑ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

DOCKER-USER ์š”์ ์€ ๋„์ปค ๊ทœ์น™์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ํ•˜๋ ค๋Š” ๊ทœ์น™์„ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋„์ปค์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ํŠธ๋ž˜ํ”ฝ์œผ๋กœ ์›ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@cpuguy83 ํ•ต์‹ฌ ๋ฌธ์ œ๋Š” ๋„์ปค๊ฐ€ ๋…ธ์ถœ๋œ ํฌํŠธ๋ฅผ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค(eth0 ๋˜๋Š” lo์™€ ๊ฐ™์€) ๋˜๋Š” ํŠน์ • IP(fe 127.0.0 0.1, 172.16.1.1); Docker๊ฐ€ ๋„์ž…ํ•œ ๊ทœ์น™์€ UFW์™€ ๊ฐ™์€ iptables ๊ด€๋ฆฌ ๋„๊ตฌ์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๋Š” ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋„คํŠธ์›Œํฌ์˜ ๋ชจ๋“  ์‹œ์Šคํ…œ์—์„œ ๋‹ค์–‘ํ•œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ชจ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DOCKER-USER๋Š” ๋„์ปค ๋„คํŠธ์›Œํฌ๋ฅผ ํŠน์ • ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๋˜๋Š” ํŠน์ • IP(fe 127.0.0.1)์— ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ์›๋ž˜ ์š”์ฒญ์— ๋”ฐ๋ผ:
1.Docker๋Š” Docker ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ • IP์— ์—ฐ๊ฒฐํ•œ ๋‹ค์Œ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์Šคํ…œ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜๋Š” ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋Š” ์‹œ์Šคํ…œ ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

  1. ์ ์–ด๋„ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ์—ญ์‚ฌ์ ์ธ ํ–‰๋™์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „ํ™˜ ๊ธฐ๊ฐ„ ์—†์ด๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

IMHO, ์ „์ฒด ๋ฌธ์ œ๋Š” Docker๊ฐ€ ๋ง ๊ทธ๋Œ€๋กœ ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฉํ™”๋ฒฝ(iptables ๋˜๋Š” ๊ธฐํƒ€)์„ ์ „ํ˜€ ๊ฑด๋“œ๋ ค์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ (์˜ˆ๋ฅผ ๋“ค์–ด) ์•„ํŒŒ์น˜๋ฅผ ์„ค์น˜ํ•˜๊ณ  0.0.0.0:80์—์„œ ์ˆ˜์‹ ํ•˜๋„๋ก ์ง€์‹œํ•  ๋•Œ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ทœ์น™์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ™”๋ฒฝ์—์„œ ํฌํŠธ 80์„ ์—ด์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๋‚ด ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค.
๋„์ปค(๋ฐ/๋˜๋Š” ์ž‘์„ฑ) ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์žฌ๋ฐœ๋ช…ํ•˜๋Š” ๋Œ€์‹  ์ „์ฒด PUBLISH ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋„๋ก ์ƒˆ๋กœ์šด LISTEN ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ปํ•ด์•ผ docker๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ๊ฐ ํฌํŠธ/์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋œ ๋ฐฉํ™”๋ฒฝ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@gcscaglia ! ๋” ๋‹นํ™ฉ์Šค๋Ÿฌ์šด ๊ฒƒ์€ https://docs.docker.com/engine/reference/run/#expose -incoming-ports ์—์„œ ์ด ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ๊ฑฐ์˜ ๋˜๋Š” ์ „ํ˜€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ๋ฅผ ํ†ตํ•œ ํ•™์Šต์„ โ€‹โ€‹๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ์•ฝ๊ฐ„์˜ ๋ฌธ์„œ๊ฐ€ ๋๋‚ฉ๋‹ˆ๋‹ค. Docker๊ฐ€ ๊ธฐ์กด iptables ๊ทœ์น™์„ ๋ฌด์‹œํ•˜๋Š” ์œ„ํ—˜์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ์€ ๋นจ๊ฐ„์ƒ‰ ์ƒ์ž๊ฐ€ ์–ด๋”˜๊ฐ€์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

docker๊ฐ€ iptables๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์œผ๋ฉด --iptables-=false
๋„์ปค๊ฐ€ ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค์˜ ํฌํŠธ๋งŒ ์—ด๋„๋ก ํ•˜๋ ค๋ฉด ๋ฐ๋ชฌ ๊ตฌ์„ฑ์—์„œ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@BenjamenMeyer
DOCKER-USER ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ์ฐจ๋‹จํ•˜๊ณ  ์›ํ•˜๋Š” ๊ฒƒ๋งŒ ํ†ต๊ณผ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DOCKER-USER์˜ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ์ฐจ๋‹จํ•˜๊ณ  ์›ํ•˜๋Š” ๊ฒƒ๋งŒ ํ†ต๊ณผ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@cpuguy83 ๋‚ด๊ฐ€ ์—ฌ๊ธฐ์— ๋งํ•œ ๋‚ด์šฉ์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์„ธ์š”.

$ docker run -d -p 7777:6379 --name data1 redis
$ docker run -d -p 8888:6379 --name data2 redis

๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋‚ด์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์‹œ์ ์ธ ๋Œ€์ƒ ์ปจํ…Œ์ด๋„ˆ IP๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ์•Š๋Š” ํ•œ DOCKER-USER(ํ‹€๋ฆฐ ๊ฒฝ์šฐ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ data1์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŒ… ๋ฐ ๋‚ด๋ถ€ ๊ฒ€์‚ฌ ์—†์ด ๊ฒŒ์‹œ๋œ ์„œ๋น„์Šค๋ฅผ ๋ฐฉํ™”๋ฒฝ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์•ˆ์ •์ ์ธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$ sudo iptables -A DOCKER-USER -p tcp -m tcp -s 192.168.56.0/24 --dport 7777 -j RETURN
$ sudo iptables -A DOCKER-USER -p tcp -m tcp -s 10.0.24.0/24 --dport 8888 -j RETURN
$ sudo iptables -A DOCKER-USER -p tcp -m tcp --dport 7777 -j DROP
$ sudo iptables -A DOCKER-USER -p tcp -m tcp --dport 8888 -j DROP

์ด๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ๋‘ ์„œ๋น„์Šค๊ฐ€ ๋ชจ๋‘ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” CIDR์— ๋…ธ์ถœ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$ sudo iptables -A DOCKER-USER -p tcp -m tcp -s 192.168.56.0/24 --dport 6379 -j RETURN
$ sudo iptables -A DOCKER-USER -p tcp -m tcp -s 10.0.24.0/24 --dport 6379 -j RETURN
$ sudo iptables -A DOCKER-USER -p tcp -m tcp --dport 6379 -j DROP

๋”ฐ๋ผ์„œ DOCKER-USER ์‚ฌ์šฉํ•˜์—ฌ data2 ์ปจํ…Œ์ด๋„ˆ์™€ ๋…๋ฆฝ์ ์œผ๋กœ data1 ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ DOCKER-USER ๊ฐ€ ๊ทธ๋‹ค์ง€ ํ•ด๊ฒฐ์ฑ…์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@colinmollenhour

DOCKER-USER ์— ์ผ๋ฐ˜ ์‚ญ์ œ ๊ทœ์น™์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋„์ปค๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ์™€ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ์˜ ๊ธฐ๋ณธ ์ ํ”„ ๊ทœ์น™๊ณผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๊นŒ?

@ cpuguy83 ๋‚ด ์š”์ ์€ ์žฌ์ •์˜ ์ž์ฒด์— ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด ๋ง์€ Docker๊ฐ€ ๊ธฐ์กด iptables ๊ทœ์น™์„ ์žฌ์ •์˜ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ์˜ตํŠธ์•„์›ƒ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ์˜ตํŠธ์ธ ๊ธฐ๋Šฅ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์˜ตํŠธ์•„์›ƒ์ด๋ผ๊ณ  ํ•ด๋„(๊ทธ๋ ‡์ง€ ์•Š์•„์•ผ ํ•จ) ์™„์ „ํžˆ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋””๋ฒ„๊ทธ์ด๊ณ  ์ƒ๋‹นํžˆ ์ง๊ด€์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์ž˜ ๋ฌธ์„œํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ufw ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ๋งค์šฐ ๋ช…์‹œ์ ์ธ ๊ฒฝ๊ณ  ์—†์ด ์ด์™€ ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐœ์ธ์ ์œผ๋กœ ๊ทธ๋Ÿฌํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ฉ€๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ Docker ์‚ฌ์šฉ์ž(์ ์–ด๋„ ๋‚ด ๊ฒฝํ—˜์ƒ)๋Š” ์ถ”๊ฐ€ ๋„คํŠธ์›Œํฌ ์ธํ”„๋ผ๊ฐ€ ๋ฌธ์ œ๋ฅผ ์€ํํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์—ฌ ์‹œ์Šคํ…œ์ด ๊ทธ๋“ค์ด ๋ฏฟ๋Š” ๋Œ€๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๋‹ค๋Š” ๊ฐ€์ •์„ ๊ฐ•ํ™”ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์— ์ด๋Š” ๋”์šฑ ์•…ํ™”๋ฉ๋‹ˆ๋‹ค.

@gcsaglia ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด Docker๊ฐ€ LISTEN ์ „์šฉ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

DOCKER-USER์— ์ผ๋ฐ˜ ์‚ญ์ œ ๊ทœ์น™์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋„์ปค๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ์™€ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ์˜ ๊ธฐ๋ณธ ์ ํ”„ ๊ทœ์น™๊ณผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๊นŒ?

๊ท€ํ•˜์˜ ์งˆ๋ฌธ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค... 2017๋…„ 4์›” 22์ผ ๋‚ด ์˜๊ฒฌ์€ DOCKER-USER๊ฐ€ ์‹ค์ œ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ์ง€์†์„ฑ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๋ฌด์‹œํ•˜์‹ญ์‹œ์˜ค. ๋‚ด๊ฐ€ ์ง€์ ํ•˜๋Š” ๋ฌธ์ œ๋Š” ์ง€์†์„ฑ์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

@taladar ๋‹น์‹ ์€ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์—„์ง€ ์†๊ฐ€๋ฝ์œผ๋กœ

@jacoscaz

์ฒซ์งธ, ๊ธฐ์กด์˜ ํ–‰๋™์ด ์ด์ƒ์ ์ด์ง€ ์•Š๋‹ค๋Š” ์ ์—๋Š” ๋ชจ๋“  ์œ ์ง€๋ณด์ˆ˜ ๋‹ด๋‹น์ž๊ฐ€ ๋™์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๊ทธ ํ–‰๋™์€ ์˜์›ํžˆ ์กด์žฌํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์ˆ˜๋ฐฑ๋งŒ ๋ช…์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ์—ฌ๊ธฐ์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ DOCKER-USER ์ถ”๊ฐ€ํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜์ด๋ฏ€๋กœ ์ตœ์†Œํ•œ ์‚ฌ๋žŒ๋“ค์ด ํ•„์š”ํ•œ ๊ทœ์น™์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” iptables(๋˜๋Š” ebpf ๋˜๋Š” ๊ธฐํƒ€ ๊ธฐ๋ณธ ์†”๋ฃจ์…˜)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ  -p ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ํ”ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค... ๋ฐ˜๋Œ€๋กœ ์‚ฌ๋žŒ๋“ค์ด ๋ฐฉํ™”๋ฒฝ์— ๊ตฌ๋ฉ์„ ๋šซ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด, -p ์‚ฌ์šฉ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. docker์— (๊ธฐ๋ณธ์ ์œผ๋กœ) ํŠน์ • ์ฃผ์†Œ์— ๋ฐ”์ธ๋”ฉํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ ์ฃผ์†Œ๋Š” ๋ฌผ๋ก  0.0.0.0 ๋˜๋Š” ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค)... ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ -p ์—์„œ ์ฃผ์†Œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. -p 1.2.3.4:80:80 )
  2. ๋ชจ๋‘ ๊ฑฐ๋ถ€๋ฅผ ํฌํ•จํ•˜์—ฌ DOCKER-USER ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™ ์‚ฝ์ž…
  3. --iptables=false iptables ๊ด€๋ฆฌ ๋น„ํ™œ์„ฑํ™”

๊ธฐ์กด ์‚ฌ์šฉ์ž๋ฅผ ๊นจ๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ์ œ์•ˆํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@cpuguy83 ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค . ๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ๋ณ€ํ™”๊ฐ€ ํ•œ ๋ฒ„์ „์—์„œ ๋‹ค๋ฅธ ๋ฒ„์ „์œผ๋กœ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ์˜นํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฒ„์ „์— ๊ฑธ์ณ ๊ณ„ํšํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ณ€๊ฒฝ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Docker๊ฐ€ iptables ์‚ฌ์šฉ์„ ์™„์ „ํžˆ ์ค‘๋‹จํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „๋‹ฌ์€ ํ—ˆ์šฉํ•˜๊ณ  ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ๋„์ปค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ˆ„๊ตฌ๋“ ์ง€ ์–ด๋””์„œ๋‚˜ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ง€๊ธˆ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์— ๊ด€ํ•ด์„œ๋Š” ์ด์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ฌธ์„œ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. docker.com์˜ ๊ด€๋ฆฌ์ž์™€ ํ•จ๊ป˜ ์ด๋ฅผ ์ œ๊ธฐํ•˜๋Š” ๊ฐ€์žฅ ์ ์ ˆํ•œ ์ฑ„๋„์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ทธ๋“ค์˜ ๊ด€์‹ฌ์ด ์—†๋Š” ์ƒํƒœ์—์„œ ์ด ๋Œ€ํ™”๋ฅผ ๊ณ„์† ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋งˆ๋„ ์ด ํ–‰๋™์ด ๋” ๋„๋ฆฌ ์•Œ๋ ค์งˆ ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ๋Œ€ํ™”ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ผ๋Š” ์š”์ฒญ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ https://docs.docker.com/network/iptables/ ์—์„œ๋งŒ ์–ธ๊ธ‰๋ฉ๋‹ˆ๋‹ค

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ Docker์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์žฅ๊ธฐ์ ์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํฌํŠธ์—์„œ LISTEN์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ๊ทธ ์œ„์— ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค.

์ œ์•ˆํ•œ ๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹ค์ˆ˜๋กœ ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด DOCKER-USER์— DROP ๊ทœ์น™์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ ๊ณต๊ฐœํ•˜๊ณ  ์‹ถ์€ ์„œ๋น„์Šค๊ฐ€ ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ @colinmollenhour ๊ฐ€ ์„ค๋ช…ํ–ˆ๋“ฏ์ด NAT๋Š” ํ•„ํ„ฐ๋ง ์ „์— ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ์ •๋˜์ง€ ์•Š์€ docker ip์™€ ๋‚ด๋ถ€ ํฌํŠธ ๋ฒˆํ˜ธ(์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋™์ผํ•  ์ˆ˜ ์žˆ์Œ)๋กœ๋งŒ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@SystemParadox ์ด๋Š” DOCKER-USER๊ฐ€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง„์ •ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹Œ ๋งŽ์€ ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

@cpuguy83
๋‚˜๋Š” ์ œ์•ˆ๋œ LISTEN ์†”๋ฃจ์…˜์ด ๋งˆ์Œ์— ๋“ค๊ณ  ํ•œ ๋ฆด๋ฆฌ์Šค์—์„œ ๋‹ค๋ฅธ ๋ฆด๋ฆฌ์Šค๋กœ์˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์˜นํ˜ธํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜คํžˆ๋ ค ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Docker๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ•œ ๋ฒ„์ „์—์„œ ๋‹ค๋ฅธ ๋ฒ„์ „์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๋ชจ๋‘์—๊ฒŒ ํ•ด๋กœ์šธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ -p ๋ฐ EXPOSE ๋“ฑ์— ๊ด€ํ•œ Docker ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์ ์–ด๋„ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ธ์‹์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ฆ‰์‹œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๊ฒฝํ—˜์ƒ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ๋ฐฉํ™”๋ฒฝ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋„์ปค๊ฐ€ ํ˜„์žฌ ์„ค๊ณ„์— ์—†๋Š” ๊ธฐ๋Œ€๋Œ€๋กœ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์‹ ๋ขฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ https://github.com/moby/moby/issues/22054#issuecomment -425580301์˜ ์š”์•ฝ ์†”๋ฃจ์…˜๋„ ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ์š”? Docker๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  YAML ๊ธฐ๋ฐ˜ Docker Compose๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. IP ์ฃผ์†Œ๋Š” ๋™์ ์ด๋ฉฐ(Docker์— ์˜ํ•ด ์ œ์–ด๋จ) ์ข…์ข… ์„œ๋กœ ์ƒํ˜ธ ์ž‘์šฉํ•ด์•ผ ํ•˜๋Š” ๋™์ผํ•œ Docker ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ -p ์‚ฌ์šฉ ๋ฐ ์ฃผ์†Œ ๋ฐ”์ธ๋”ฉ ์‚ฌ์šฉ(์š”์•ฝ์—์„œ ์˜ต์…˜ 1)์€ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. DOCKER-USER๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ง€์ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‹ค์ œ๋กœ ์•„๋ฌด ๊ฒƒ๋„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๊ณ (์š”์•ฝ์˜ ์˜ต์…˜ 2) IP ํ…Œ์ด๋ธ”์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”(์š”์•ฝ์˜ ์˜ต์…˜ 3)๋„ b/c๋Š” ์•„๋ฌด ๋„์›€๋„ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(IP๋Š” ๋™์ ์ด๋ฏ€๋กœ ์†”๋ฃจ์…˜์„ ์Šคํฌ๋ฆฝํŒ…ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ๋„คํŠธ์›Œํ‚น์ด ์ค‘๋‹จ๋จ b/c Docker๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด IPTable์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ด ์Šค๋ ˆ๋“œ์—๋Š” ๋‘ ๋ฒ„์ „ ๊ฐ„์˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ๋žŒ๋“ค์ด ์ ์ ˆํ•˜๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ณ„ํš๋œ ๋‹จ๊ณ„์  ์ ‘๊ทผ ๋ฐฉ์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด -m conntrack --ctorigdstport ์‚ฌ์šฉํ•˜์—ฌ ์›๋ž˜ ๋Œ€์ƒ ํฌํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ œ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

-A DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Allow docker out
-A DOCKER-USER -s 172.17.0.0/16 -j ACCEPT
# Allow access to docker service mapped to host 8702 (the service is actually listening on port 8088 in the container)
-A DOCKER-USER -p tcp -m conntrack --ctorigdstport 8702 -j ACCEPT
# Prevent access to docker from outside
-A DOCKER-USER -j DROP

@SystemParadox

์˜ฌ๋ฐ”๋ฅธ iptables ์†”๋ฃจ์…˜์„ ์œ„ํ•œ ๋งŒ์„ธ! ๐Ÿป

๋‚˜๋Š” --ctorigdstport ์— ๋Œ€ํ•ด ๋“ค์–ด๋ณธ ์ ์ด ์—†์ง€๋งŒ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  iptables ํ™•์žฅ์— ๋Œ€ํ•ด ์ฝ์ง€ ์•Š๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋งฅ๋ฝ์—์„œ ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ๋‹น์‹ ์ด ์ฒ˜์Œ์œผ๋กœ ์–ธ๊ธ‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ…Œ์ŠคํŠธํ–ˆ๊ณ  ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

$ docker run -d -p 7777:6379 --name data1 redis
$ docker run -d -p 8888:6379 --name data2 redis
$ sudo iptables -N DOCKER-USER-redis1
$ sudo iptables -A DOCKER-USER-redis1 -s 192.168.56.0/24 -p tcp -m tcp -j RETURN
$ sudo iptables -A DOCKER-USER-redis1 -j REJECT --reject-with icmp-port-unreachable
$ sudo iptables -N DOCKER-USER-redis2
$ sudo iptables -A DOCKER-USER-redis2 -s 10.0.24.0/24 -p tcp -m tcp -j RETURN
$ sudo iptables -A DOCKER-USER-redis2 -j REJECT --reject-with icmp-port-unreachable
$ sudo iptables -A DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 7777 -j DOCKER-USER-redis1
$ sudo iptables -A DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 8888 -j DOCKER-USER-redis2

์‚ฌ์šฉ ํฌํŠธ๋ฅผ ๋…ธ์ถœ ํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ : ๋‚˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ทธ๊ฒƒ์€ ์•„๋งˆ ์ปค๋ฒ„ ๋ฌด์—‡ 99 %๊ฐ€ ์ฐพ๊ณ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์ด ๊ฐ™์€ ์˜ˆ๋Š” ๋ฌธ์„œ์— ์†ํ•˜๋Š” ์ƒ๊ฐ -p ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋“ค์—๊ฒŒ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ํ•  ์ˆ˜์žˆ์„ -s .

iptables์— ๊ด€ํ•œ Docker ์„ค๋ช…์„œ ์—…๋ฐ์ดํŠธ ์š”์ฒญ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/docker/docker.github.io/issues/8087

https://unrouted.io/2017/08/15/docker-firewall/์— ๋‚˜์—ด๋œ ์†”๋ฃจ์…˜
FILTERS๋ผ๋Š” ์ถ”๊ฐ€ iptables ์ฒด์ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
INPUT ๋ฐ DOCKER-USER ์ฒด์ธ์ด ์ ํ”„ํ•˜๋Š” ๊ณณ์œผ๋กœ.

@SystemParadox @colinmollenhour --ctorigdstport ํ…Œ์ŠคํŠธ ํ›„ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•ฝ๊ฐ„์˜ ์ฃผ์˜ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” ํฌํŠธ 80์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋Š” Apache์— ๊ณ ์ •๋œ PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. 1.2.3.4๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

-A DOCKER-USER -s 1.2.3.4/32 -i eth0 -p tcp -m conntrack --ctorigdstport 80 -j ACCEPT
-A DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 80 -j DROP

๊ทธ๋ž˜์„œ ๋‚ด ์‚ญ์ œ ๊ทœ์น™์€ ๋‚ด ์›น ์„œ๋ฒ„์— ๋„๋‹ฌํ•˜๋Š” ํŒจํ‚ท๋งŒ ์‚ญ์ œํ•˜๋Š” ๋‹น์‹ ์˜ ๊ทœ์น™๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๊ตฌ์ฒด์ ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๊ทธ๊ฒƒ์€ ์ œ ์›น์„œ๋ฒ„๋กœ ํ–ฅํ•˜๋Š” ํŒจํ‚ท๋ฟ๋งŒ ์•„๋‹ˆ๋ผ PHP ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ œ3์ž ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ ์š”์ฒญ์—์„œ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ ๋˜๋Š” ํŒจํ‚ท์„ ์‚ญ์ œํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” --ctorigdstport ๊ฐ€ ํ•„ํ„ฐ๋ง๋˜๋Š” ํŒจํ‚ท์˜ ๋Œ€์ƒ ํฌํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฐ๊ฒฐ์„ ์‹œ์ž‘ํ•œ ํŒจํ‚ท๊ณผ ์ผ์น˜ SPT=80 ์ด๊ณ  --ctorigdstport 80 ์™€๋„ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ DROP ๊ทœ์น™์„ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ์ œ์–ดํ•˜๋ ค๋ฉด --ctdir ๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

-A DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 80 --ctdir ORIGINAL -j DROP

์‹ค์ œ๋กœ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ทœ์น™์—๋Š” ์˜๋ฏธ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด --ctdir ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

-A DOCKER-USER -s 1.2.3.4/32 -i eth0 -p tcp -m conntrack --ctorigdstport 80 --ctdir ORIGINAL -j ACCEPT

@jest ์™€์šฐ

@SystemParadox ์˜ˆ, ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ๋‚˜ ์ž์‹ ์—๊ฒŒ ์•Œ๋ฆด ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ๊ณ  ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋˜ Docker์˜ ์š”์ฒญ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. :)

๋‚˜๋Š” --ctdir ORIGINAL ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ์™€ ํ•จ๊ป˜ ๊ณ„์† ์›์„ ๊ทธ๋ฆฌ๋ฉฐ ๋Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œํŽธ์œผ๋กœ๋Š” @jest ์˜ ์„ค๋ช…์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ด๊ฐ€ ๋˜์ง€๋งŒ, ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‘๋‹ต ํŒจํ‚ท์„ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋Š”๋ฐ ์™œ ์—ฌ๊ธฐ์—์„œ

์ฐจ์ด์ ์€ ์ฒซ ๋ฒˆ์งธ ๊ทœ์น™์œผ๋กœ -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋‚˜๋จธ์ง€ ๊ทœ์น™์—๋Š” ์‘๋‹ต ํŒจํ‚ท์ด ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ --ctdir ORIGINAL ๊ฐ€ ๊ผญ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jest , ์ด์— ๋™์˜ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ์ดˆ๊ธฐ ESTABLISHED,RELATED -j ACCEPT ๊ทœ์น™์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ์ฐจ์ด๋ฅผ ๋งŒ๋“œ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

@jest ๊ท€ํ•˜์˜ ๊ฒŒ์‹œ๋ฌผ์€ ํฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ ‘๊ทผ ๋ฐฉ์‹์€ docker์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ•ญ๋ชฉ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋ชจ๋“  ํ•ญ๋ชฉ์— ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ssh ํฌํŠธ(22)๋Š” ๋„์ปค์™€ ์•„๋ฌด ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ‰์†Œ์™€ ๊ฐ™์ด -m tcp --dport 22 ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด -m conntrack --ctorigdstport 22 --ctdir ORIGINAL ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด๋Ÿฌํ•œ ํŒจํ‚ท์ด ํ•„ํ„ฐ ํ…Œ์ด๋ธ”์— ๋„์ฐฉํ•˜๊ธฐ ์ „์— ๋งน๊ธ€๋ง/๋‚ดํŒ…์„ ๊ฑฐ์น˜๋ฏ€๋กœ ๋„์ปค ๊ด€๋ฆฌ ํŠธ๋ž˜ํ”ฝ์—๋งŒ ์ ‘๊ทผ ๋ฐฉ์‹์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” iptables๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋ณด๋‹ค ๋” ์ž˜ ์•„๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ํ™•์‹ ์„ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค!

@lonix1 ๊ทœ์น™์€ ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ, ์•„๋งˆ๋„ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ๋งŒ DOCKER ์ฒด์ธ์— docker์— ์˜ํ•ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋‘ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‘์—์„œ ํฌํŠธ 22๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ์ˆ˜์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@SystemParadox ์‹œ๊ฐ„์ด ESTABLISHED,RELATED ๊ทœ์น™(UFW์—์„œ ๊ด€๋ฆฌ, ufw-before-input ์ฒด์ธ)์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ œ ๊ฒฝ์šฐ์—๋Š” ํฌํŠธ 80์—์„œ docker์—์„œ ์ธํ„ฐ๋„ท ํ˜ธ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ท(SYN)์—์„œ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  DOCKER-USER ๊ฐ€ ์—†์„ ๋•Œ --ctdir .

@Ionix1 , ํ˜ธ์ŠคํŠธ์˜ ์„œ๋น„์Šค ํŒจํ‚ท์€ INPUT๋งŒ ํ†ต๊ณผํ•˜๋Š” ๋ฐ˜๋ฉด ๋„์ปค ์„œ๋น„์Šค ํŒจํ‚ท์€ FORWARD ๋ฐ DOCKER-USER๋งŒ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์™ธ๋ถ€ IP๊ฐ€ 10.0.0.1์ด๊ณ  -p 4000:80 ๋ฐ -p 4001:80 ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ์†์„ฑ์„ ๊ฐ€์ง„ ํŒจํ‚ท์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

INPUT:
dst 10.0.0.1 dport 80 ctorigdst 10.0.0.1 ctorigdstport 80
FORWARD/DOCKER-USER:
dst 172.17.0.5 dport 80 ctorigdst 10.0.0.1 ctorigdstport 4000
dst 172.17.0.6 dport 80 ctorigdst 10.0.0.1 ctorigdstport 4001

๋”ฐ๋ผ์„œ INPUT ๊ทœ์น™์€ ์™„์ „ํžˆ ๋ณ„๋„์˜ ์ฒด์ธ์— ์žˆ์œผ๋ฏ€๋กœ --dport 80 ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ --ctorigdstport 80 ๋Š” ์—ฌ์ „ํžˆ ์ผ์น˜ํ•˜์ง€๋งŒ ์–ด๋–ค ์ด์œ ๋กœ ์ž…๋ ฅ์„ ๋งน๊ธ€๋งํ•˜์ง€ ์•Š๋Š” ํ•œ ์•„๋งˆ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŠน์ • ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ํŒจํ‚ท์„ ํ•„ํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ๋กœ --dport 80 ๋ฅผ --dst 172.17.0.5 --dport 80 ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ด๋‹น IP๋Š” ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ --ctorigdstport .

๊ถ๊ทน์ ์œผ๋กœ ์–ด๋–ค ์ฒด์ธ์— ์žˆ๋Š”์ง€, ๋ชฉ์ ์ง€๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๋งน๊ธ€๋ง์ด ์ง„ํ–‰ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ฃผ์–ด์ง„ ๊ทœ์น™์ด ์ผ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ‚ท์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@jest ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ƒ๊ฐ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ UFW์—์„œ iptables๋กœ ์ „ํ™˜ํ•˜๋ ค๋ฉด ์•ฝ๊ฐ„์˜ ๋ฐฉํ–ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค...
- "ufw disable"์„ ํ†ตํ•ด UFW๋ฅผ ๋„๋‚˜์š”?
-๋‚ด ์ž์‹ ์˜ .sh ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๊ธฐ์กด ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๊นŒ(์ €๋Š” DigitalOcean์˜ Ubuntu์ž…๋‹ˆ๋‹ค)?
-๋„์ปค์—๊ฒŒ "--iptables=false"๋ผ๊ณ  ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๊นŒ? (๋„์ปค์šฉ์ธ๊ฐ€์š”?)
-DOCKER-USER๋Š” ์ด๋ฏธ Docker์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

@fredjohnston ์›ํ•œ๋‹ค๋ฉด UFW ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ•„์€ /etc/ufw ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” /etc/ufw/applications.d ๋‚˜์—ด๋œ ์•ฑ ํ”„๋กœํ•„์ด ์—†๋Š” ๊ฒฝ์šฐ Docker๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‹ค๋ฅธ ๋ฐฉํ™”๋ฒฝ ๋„๊ตฌ ๋ฐ ํ•ด๋‹น ๊ตฌ์„ฑ๋„ ๋™์ผ).

Docker์—์„œ IPTables๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด Docker์—์„œ ๋„คํŠธ์›Œํ‚น์ด ๋งŽ์ง€ ์•Š๊ณ  IP ์ฃผ์†Œ์™€ ์ปจํ…Œ์ด๋„ˆ๋งŒ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. DOCKER_USER ๋Š” ์ผ๋ถ€ ์ œ์–ด ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๋Š” ํ•ดํ‚น์ด์ง€๋งŒ ์‹ค์ œ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„คํŠธ์›Œํฌ์—์„œ ๊ณต๊ฐœํ•˜์ง€ ์•Š๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ IP ์ฃผ์†Œ๋กœ ์ž ๊ทธ๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น๋ถ„๊ฐ„์€ ๊ฐ€์žฅ ํŽธํ•œ ๋ฐฉํ™”๋ฒฝ ๋„๊ตฌ(ufw ๋“ฑ)๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ Docker ์ปจํ…Œ์ด๋„ˆ๋Š” ๋„คํŠธ์›Œํฌ์—์„œ ๊ณต๊ฐœ๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

์–ด๋–ค ์‹ ์œผ๋กœ๋“  ์—ฌ๊ธฐ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Linux ์ด์™ธ์˜ ํ”Œ๋žซํผ์—์„œ๋„ ๋ฌธ์ œ๊ฐ€๋˜๋Š” ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ๊ณ ๋ คํ•˜์„ธ์š”:

  • ํ”„๋กœ์ ํŠธ A์—๋Š” ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์šฉ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ์ž…๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ B์—๋Š” ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์šฉ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ์ž…๋‹ˆ๋‹ค.
  • ๋‘ ํ”„๋กœ์ ํŠธ๋Š” ์„œ๋กœ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(๋ณ„๋„์˜ ์†Œ์Šค ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ๊ตฌ์„ฑ ๋“ฑ).
  • ๋‘ ํ”„๋กœ์ ํŠธ ๋ชจ๋‘ Docker Compose์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋‘ ํ”„๋กœ์ ํŠธ ๋ชจ๋‘ ๋กœ์ปฌ ๊ฐœ๋ฐœ ๋ชฉ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ๋‘ ํ”„๋กœ์ ํŠธ ๋ชจ๋‘ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„(postgres, mysql ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋‘ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋‘ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ž‘์—…ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ๋กœ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ฐฉํ™”๋ฒฝ ์ƒํ˜ธ ์ž‘์šฉ ์„ค๊ณ„์—์„œ - ๊ทธ๋ฆฌ๊ณ  ๋ถ€๋ถ„์ ์œผ๋กœ ์‚ฌ์šฉ์ž ๋ชจ๋ฅด๊ฒŒ ๊ณต์šฉ ๋„คํŠธ์›Œํฌ์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์œ„์˜ ๋ฌธ์ œ๋กœ ์ด์–ด์ง€๋Š” ๋ถ€๋ถ„ - ๋‘ ํ”„๋กœ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋„์ปค๋Š” ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋…ธ์ถœ๋œ ํฌํŠธ์ž…๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํฌํŠธ๋ฅผ ๋ชจ๋‘ ๋…ธ์ถœํ•˜๊ณ  ์‹ถ์—ˆ๊ณ  ๋‘˜ ๋‹ค ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„์— ๋Œ€ํ•ด ๋™์ผํ•œ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. HTTP ๊ธฐ๋ฐ˜ API ๋ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํŠนํžˆ ํด๋ผ์šฐ๋“œ ์ง€ํ–ฅ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ด์ œ ๋งค์šฐ ์ผ๋ฐ˜์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ํ•˜๋‚˜์˜ DB ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋‘˜ ๋‹ค ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•ดํ‚นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ์ ํŠธ ๋””์ž์ธ์— ๋”ฐ๋ผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๊ตฌ์„ฑ ๋“ฑ์— ๋Œ€ํ•ด ๋”์šฑ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ ์ ˆํ•œ ์†”๋ฃจ์…˜์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ด๋‹น IP์—๋งŒ ๋ฐ”์ธ๋”ฉ๋˜๊ณ  ๋…ธ์ถœ๋œ ํฌํŠธ๋Š” ์‹œ์Šคํ…œ์—์„œ ๋ชจ๋“  IP( 0.0.0.0 , :: )๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น Docker ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ IP์—๋งŒ ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.
  2. Docker๋Š” ๋˜ํ•œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œ์Šคํ…œ ์™ธ๋ถ€์˜ Docker ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ๊ณต๊ฐœ์ ์œผ๋กœ ๋…ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Docker ๋„คํŠธ์›Œํ‚น์€ ํ˜„์žฌ ์„ค๊ณ„๋œ ๋Œ€๋กœ ๋„คํŠธ์›Œํฌ ๊ฐ„(๋„์ปค ๋„คํŠธ์›Œํฌ์—์„œ ๋„์ปค ๋„คํŠธ์›Œํฌ๋กœ) ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž๋Š” ์ ์ ˆํ•œ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์™ธ๋ถ€ ์„ธ๊ณ„์— ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ํฌํŠธ 443์„ ์„ ํƒํ•œ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ 443์œผ๋กœ ํฌํŠธ ์ „๋‹ฌ).

๋‹ค์‹œ, ์ด๊ฒƒ์€ ์ ์ง„์ ์œผ๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฆด๋ฆฌ์Šค 1: 1๋‹จ๊ณ„ ๋ฐ 2๋‹จ๊ณ„ ๊ตฌํ˜„ ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ๋น„ localhost ๋ผ์šฐํŒ…๋„ (์ผ์‹œ์ ์œผ๋กœ) ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ํฌํŠธ๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ์„ ์ฐฉ์ˆœ์˜ ํ˜„์žฌ ๋™์ž‘์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด ๋™์ž‘์ด ์‚ฌ๋ผ์ง์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ๋ฆด๋ฆฌ์Šค 1+N: ๊ฒฝ๊ณ ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๋ผ์šฐํŒ…์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. Docker๊ฐ€ ์‹œ์Šคํ…œ ์™ธ๋ถ€์˜ ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜๊ณ  ๋ฌธ์„œํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ 3๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

DOCKER_USER ๋Š” ์ผ๋ถ€ ์ œ์–ด ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๋Š” ํ•ดํ‚น์ด์ง€๋งŒ ์‹ค์ œ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„คํŠธ์›Œํฌ์—์„œ ๊ณต๊ฐœํ•˜์ง€ ์•Š๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ IP ์ฃผ์†Œ๋กœ ์ž ๊ทธ๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น๋ถ„๊ฐ„์€ ๊ฐ€์žฅ ํŽธํ•œ ๋ฐฉํ™”๋ฒฝ ๋„๊ตฌ(ufw ๋“ฑ)๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ Docker ์ปจํ…Œ์ด๋„ˆ๋Š” ๋„คํŠธ์›Œํฌ์—์„œ ๊ณต๊ฐœ๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๊ธฐ https://github.com/docker/docker.github.io/pull/8357 ์— ๋ณผํŠธ ์˜จ iptables ์ •์  ๊ตฌ์„ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ ์š”์ฒญ์ด ์žˆ์ง€๋งŒ ์ƒํƒœ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: DOCKER-USER์˜ ์˜๋ฏธ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. "์ปจํ…Œ์ด๋„ˆ์˜ IP ์ฃผ์†Œ์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž ๊ทธ๋Š”" ๋ฐ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  iptables ๊ทœ์น™์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

@aki-k per DOCKER_USER ๋‚˜๋Š” DOCKER_USER ๊ฐ€ IP ์ฃผ์†Œ์— ๋Œ€ํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž ๊ทธ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ๊ทธ๋ ‡๊ฒŒํ–ˆ๋‹ค๊ณ  ์ฃผ์žฅํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. DOCKER_USER ๋‹จ์ˆœํžˆ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌํ•˜๋„๋ก ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๋Š” ์‹ค์ œ๋กœ ์•ˆ์ „ํ•œ ํ™˜๊ฒฝ์„ ๊ฐ–๋„๋ก ๋ฐฉํ™”๋ฒฝ์„ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ๋ฐฉํ™”๋ฒฝ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์‚ฌ์šฉ์ž ๋ฌธ์ œ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์šฉ๋‚ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์€ ์–ด๋ ต๊ณ  ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ์ž‘์„ฑ์— ๋Œ€ํ•ด ์–ด๋Š ์ •๋„ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๋„ ์—ฌ์ „ํžˆ ์ข…์ข… ์ž˜๋ชป๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ์š”์ ์€ Docker๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ˆ์ „ํ•ด์•ผ ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ๋ชจ๋ฅด๊ฒŒ ๋˜๋Š” ๋ช…์‹œ์ ์ธ ๊ฐœ์ž… ์—†์ด ์™ธ๋ถ€ ์„ธ๊ณ„์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด ๋งˆ์ง€๋ง‰ ์˜๊ฒฌ(https://github.com/moby/moby/issues/22054#issuecomment-552951146)์— ๋”ฐ๋ผ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค๋ฅธ ๊ธฐ์ˆ ์  ์ด์ ๋„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ์š”์ ์€ Docker๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ˆ์ „ํ•ด์•ผ ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ๋ชจ๋ฅด๊ฒŒ ๋˜๋Š” ๋ช…์‹œ์ ์ธ ๊ฐœ์ž… ์—†์ด ์™ธ๋ถ€ ์„ธ๊ณ„์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ์ฐพ์€ ์ตœ์ดˆ์˜ ๋ฌธ์ œ ๋ณด๊ณ ์„œ๋Š” 2014๋…„ 3์›” 18์ผ์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://github.com/moby/moby/issues/4737

๊ทธ๋“ค์€ ์•„๋งˆ๋„ DOCKER-USER iptables ์ฒด์ธ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ์„ค๊ณ„ ๊ฒฐ์ •์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„์ปค ์‹คํ–‰์— -p ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„์ปค ํ˜ธ์ŠคํŠธ(-p 127.0.0.1:port:port)์—๋งŒ ํฌํŠธ๋ฅผ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.

Docker ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. Docker์—๊ฒŒ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•˜๋ผ๊ณ  ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋กœ ํ†ต์‹ ํ•ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ํฌํŠธ ํฌ์›Œ๋”ฉ์ด ์•„๋‹Œ ๋„คํŠธ์›Œํฌ( docker network )๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Docker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ _Is_ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. Docker์—๊ฒŒ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•˜๋ผ๊ณ  ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •๋œ iptables ๋ณดํ˜ธ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋˜๋Š” ๋„์ปค์˜ ์‹ค์ œ ๋ฌธ์ œ๋ฅผ ๋ฌด์‹œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” ์ˆ˜๋งŽ์€ ๋ฌธ์ œ ๋ณด๊ณ ์„œ๋ฅผ ๋ณด์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Docker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ _Is_ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. Docker์—๊ฒŒ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•˜๋ผ๊ณ  ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋กœ ํ†ต์‹ ํ•ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ํฌํŠธ ํฌ์›Œ๋”ฉ์ด ์•„๋‹Œ ๋„คํŠธ์›Œํฌ( docker network )๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ํ•˜์ž. Docker๋Š” Docker ๋„คํŠธ์›Œํฌ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ์‹œ์Šคํ…œ์„ ํ™•๋ณดํ•˜์ง€ ์•„๋ฌด๊ฒƒ๋„ ์šฐํšŒ - ๋‹น์‹ ๋„ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ (127.0.0.1)์—์„œ ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ์ผ๋‹จ์€ 0.0.0.0์— ๋Œ€ํ•ด ๊ฒฐํ•ฉ ์‹œ์Šคํ…œ ์˜คํ”„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…ธ์ถœ๋กœ ๋‹ค์Œ ๋„์ปค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค iptables ์˜ ์ง์ ‘์ ์ธ ์‚ฌ์šฉ ์ด์™ธ์˜ ๋„๊ตฌ์—์„œ. DOCKER_USER๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋ณธ ๋ฐฉํ™”๋ฒฝ ์‹œ์Šคํ…œ(Linux์˜ iptables, Mac์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ๊ณผ Windows์˜ Windows ๋ฐฉํ™”๋ฒฝ)์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์ด ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์ด ์•„๋‹ˆ๋ฉฐ ์•ž์œผ๋กœ๋„ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•ž์„œ https://github.com/moby/moby/issues/22054#issuecomment -552951146์— ์„ค๋ช…๋˜์–ด ์žˆ๊ณ  ์ด ๋ฌธ์ œ ์ „๋ฐ˜์— ๊ฑธ์ณ ์—ฌ๋Ÿฌ ๋ฒˆ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋งค์šฐ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค(ํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ๊ทธ๊ฒƒ๋งŒํผ ๋ช…ํ™•ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๋…ผํ‰).

ํฌํŠธ ๋…ธ์ถœ์— ๋Œ€ํ•œ ๋ฌธ์„œ์—์„œ๋„ ์ด ๋ณด์•ˆ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•  ๋•Œ Docker๊ฐ€ ์‹œ์Šคํ…œ ๋ฐฉํ™”๋ฒฝ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .

Docker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ _Is_ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. Docker์—๊ฒŒ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•˜๋ผ๊ณ  ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์„œ๋กœ ํ†ต์‹ ํ•ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ํฌํŠธ ํฌ์›Œ๋”ฉ์ด ์•„๋‹Œ ๋„คํŠธ์›Œํฌ( docker network )๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ํ•˜์ž. Docker๋Š” Docker ๋„คํŠธ์›Œํฌ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ(127.0.0.1)์—์„œ๋„ ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ๊ฒฝ์šฐ Docker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 0.0.0.0์— ๋ฐ”์ธ๋”ฉ๋˜๋ฏ€๋กœ _not_ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. [...]

์ •ํ™•ํžˆ ๋งํ•˜๋ฉด Docker๋Š” 0.0.0.0์— ๋ฐ”์ธ๋”ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‚ฌ์šฉ์ž์˜ (ํ•ฉ๋ฆฌ์ ์ธ) ๊ธฐ๋Œ€์ž…๋‹ˆ๋‹ค. CLI์—์„œ --publish ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์ž‘๋™ํ•˜๋ฉด ์ง€์ •๋œ ํฌํŠธ์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๊ณ  ๋“ค์–ด์˜ค๋Š” ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๊ณ  ์•ž๋’ค๋กœ ํ‘ธ์‹œํ•˜๋Š” ์ผ์ข…์˜ ํ”„๋ก์‹œ ๋ฐ๋ชฌ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. Docker์™€ ์™ธ๋ถ€ ์„ธ๊ณ„ ์‚ฌ์ด์˜ ๋ชจ๋“  ํŒจํ‚ท.

๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์‹  Docker๋Š” ๋งˆ๋ฒ•์˜ DNAT/masquarading ๊ทœ์น™์„ ๋ฐฉํ™”๋ฒฝ์— ์ฃผ์ž…ํ•˜์—ฌ ํŒจํ‚ท์˜ ์ฃผ์†Œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ฏ€๋กœ ์‚ฌ์ „ ์„ค์น˜๋œ ๊ทœ์น™ ์‹œ์Šคํ…œ์„ ๋ฌด์ž‘์œ„๋กœ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค.

์ œ ์ƒ๊ฐ์—๋Š” ์ถ”์ƒํ™” ์ˆ˜์ค€์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ด๋ฉฐ ์‚ฌ์šฉ์ž๋ฅผ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” --publish ๊ธฐ๊ณ„๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ Docker ํŒ€์—์„œ ์–ด๋–ค ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณ ๋ คํ–ˆ๋Š”์ง€ ๋ชจ๋ฅด์ง€๋งŒ ๊ฒฐ์ •์„ ์ •๋‹นํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค(์„ฑ๋Šฅ์ƒ์˜ ์ด์œ  ์™ธ์—).

Docker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. Docker์—๊ฒŒ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•˜๋ผ๊ณ  ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

... Docker์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค์ƒ, Docker์˜ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜ ๋‚ด์—์„œ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ๊ธฐ์กด ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™ ์žฌ์ •์˜๊ฐ€ Docker๋ฅผ _๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ_ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ๋ฐฉ๊ธˆ ๋ง์”€ํ•˜์…จ์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‹น์‹ ์„ ์œ„ํ•ด ๋ฌด์—‡์ด๋“  ํ•  ๊ฒƒ ๊ฐ™์•„์š”. ๋‚˜์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋Œ€์ฒด ์ปจํ…Œ์ด๋„ˆ ํ”Œ๋žซํผ์„ ์‚ดํŽด๋ณด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ฉ๋ฆฌ์ ์ธ ๋ณด์•ˆ ๊ธฐ๋Œ€์น˜๋ฅผ ๋…ธ๊ณจ์ ์œผ๋กœ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ์ง์Šน์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ์™€ โ€‹โ€‹๊ฐ™์€ ์ƒํ™ฉ์„ ํ‰๊ฐ€ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํŠธ๋Š” ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Docker์—๊ฒŒ ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋„๋ก ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ณผ๊ฑฐ์— Docker๋Š” ๋ธŒ๋ฆฌ์ง€ ๋„คํŠธ์›Œํฌ๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ปจํ…Œ์ด๋„ˆ IP์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก iptables๋ฅผ ์„ค์ •ํ–ˆ์ง€๋งŒ(์ „๋‹ฌ ์ •์ฑ…์„ "์ˆ˜๋ฝ"์œผ๋กœ ์„ค์ •ํ•˜์—ฌ) ๋” ์ด์ƒ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค.

-p ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์„œ๋กœ์—๊ฒŒ ๋…ธ์ถœํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ์—์„œ --link ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ปจํ…Œ์ด๋„ˆ๋Š” DNS๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ด ์•„๋‹Œ ๋„คํŠธ์›Œํฌ(์‚ฌ์šฉ์ž ์ •์˜ ๋„คํŠธ์›Œํฌ)์—์„œ ์ปจํ…Œ์ด๋„ˆ๋Š” --link ๋ฅผ ํ†ตํ•œ ๋ณ„์นญ ์„ค์ •์„ ํฌํ•จํ•˜์—ฌ DNS๋ฅผ ํ†ตํ•ด ์„œ๋กœ ์•ก์„ธ์Šคํ•˜๊ฑฐ๋‚˜ ์ง€์ •๋œ ๋ณ„์นญ์ด ์žˆ๋Š” ๋„คํŠธ์›Œํฌ์—๋„ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

-p ๋Š” ์™ธ๋ถ€ ์‚ฌ๋ฌผ์ด ์ด ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
-p ์˜ ๊ธฐ๋ณธ๊ฐ’์€ ์‹ค์ œ๋กœ ์–ด๋””์„œ๋‚˜ ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. -p ๋˜๋Š” ๋ฐ๋ชฌ ์ „์ฒด ์„ค์ •์—์„œ ํ—ˆ์šฉํ•  ์ฃผ์†Œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
-p ๋Š” iptables๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— DOCKER-USER ์ฒด์ธ์ด ์ƒ์„ฑ๋˜์–ด ์ปจํ…Œ์ด๋„ˆ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ํ•„ํ„ฐ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-p ๋Š” Ingress์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ž˜ํ”ฝ์„ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ์‹œํ‚ค๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Docker ๊ทœ์น™์ด ํ•„ํ„ฐ ํ…Œ์ด๋ธ”์˜ ๋งจ ์œ„์— ์‚ฝ์ž…๋œ ๊ฒƒ์ด ๋ถˆํ–‰ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

-p ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. -p ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  ์ปจํ…Œ์ด๋„ˆ IP์— ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์‹ญ์‹œ์˜ค. IP๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€๋งŒ ์ด ๋ฐ์ดํ„ฐ๋Š” API์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฉํ™”๋ฒฝ์˜ ์ „๋‹ฌ ์ •์ฑ…์ด ์ด๋ฅผ ํ—ˆ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ์—ฐ๊ฒฐํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค)
  2. ํ˜ธ์ŠคํŠธ์˜ ๋„คํŠธ์›Œํฌ(์ฆ‰, ์ˆ˜์‹ )์—์„œ ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ์„œ๋น„์Šค์— macvlan ๋˜๋Š” ipvlan ๋„คํŠธ์›Œํ‚น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„คํŠธ์›Œํ‚น ์˜ต์…˜์€ ์ปจํ…Œ์ด๋„ˆ์— ํ˜ธ์ŠคํŠธ์˜ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ง์ ‘ IP๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(๋ฐ”์ธ๋“œ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์„ ํƒ).
  3. --net=host ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ธ์ŠคํŠธ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์ธํ”„๋ผ์— ๋Œ€ํ•œ ์„œ๋น„์Šค ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

"๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ ์„ค์ •"์ด๋ผ๊ณ  ๋งํ–ˆ์ง€๋งŒ ํฌํŠธ ๋…ธ์ถœ์€ ์ •์˜์ƒ ์ž ์žฌ์ ์œผ๋กœ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ž‘์—…์ž…๋‹ˆ๋‹ค. localhost์—๋งŒ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๋Š” ์ƒ๊ฐ๋„ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ๊ฒƒ์ด localhost์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค(๋ฐ์Šคํฌํ†ฑ์ธ ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €์˜ javascript ํฌํ•จ).

-p ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ?
์‹ค์ œ๋กœ ๋ณด๊ณ  ์‹ถ์€ ๋ณ€ํ™”์— ๋Œ€ํ•œ ์ƒ๊ฐ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์›Œํฌํ”Œ๋กœ์— ๋” ์ ํ•ฉํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์œผ๋ฉฐ ํ•œ ๊ฐ€์ง€ ํฌ๊ธฐ๊ฐ€ ๋ชจ๋‘์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค( -p ๋Œ€ํ•œ ๋ถˆ๋งŒ ์ฐธ์กฐ).

@ cpuguy83 ๋ชจ๋“  ๊ฒƒ์ด ํ›Œ๋ฅญํ•˜๊ณ  ๋ฉ‹์ง€์ง€๋งŒ ์ด ์š”์ฒญ์—์„œ ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ ๋„์ปค๋กœ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์—ฐ๊ฒฐํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํŠนํžˆ ๋„์ปค์— ์žˆ์ง€ ์•Š์ง€๋งŒ ๋„์ปค์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์ง„๋‹จ์„ ์‹œ๋„ํ•  ๋•Œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. (๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด). Docker์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ข‹๊ฑฐ๋‚˜ ์žฌ๋ฏธ์žˆ๊ฑฐ๋‚˜ ์œ ์šฉํ•œ ๊ฒฝํ—˜์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ ๊ธˆ์ง€์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋„๊ตฌ๊ฐ€ Docker ์นœํ™”์ ์ด์ง€ ์•Š์œผ๋ฉฐ ๊ทธ๋ž˜์•ผ ํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. Docker์—์„œ ์‹คํ–‰๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์™„์ „ํžˆ Docker ์•„๋ž˜์— ์žˆ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒฝ์šฐ ๊ด€๋ฆฌ์ž๋Š” ๋ฐฉํ™”๋ฒฝ ๊ตฌ์„ฑ์„ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์—†๊ณ  Expose Port ๊ธฐ๋Šฅ์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜๋˜์ง€๋งŒ(๋ช…๋ น์ค„, Dockerfile, Docker Compose Config) ์™„์ „ํžˆ ์†์ƒ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์‚ฌ๋žŒ๋“ค์€ Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŽ์€ ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๊ณ  docker-compose.yml ๋˜๋Š” Dockerfile ๋ฅผ ํ†ตํ•ด ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•ด์•ผ ๋กœ์ปฌ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ use the -p ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ docker ๋ช…๋ น๊ณผ ์ง์ ‘ ์ธํ„ฐํŽ˜์ด์Šคํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ณด์•ˆ์ด ๊นจ์ ธ์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋ณด์•ˆ(https://github.com/moby/moby/issues/22054#issuecomment-552951146)์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ ์‹œ์Šคํ…œ์— ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ–ˆ์œผ๋ฉฐ ์™ธ๋ถ€ ๋…ธ์ถœ ๊ด€๋ฆฌ(ํ•ด์ œ ์‹œ์Šคํ…œ)์„ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ์กด ๋„๊ตฌ๋กœ ์‰ฝ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…:

  • ๋„์ปค ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ
  • Docker ๋„คํŠธ์›Œํฌ ๋‹จ๋… ๋ฐ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ ๋…ธ์ถœ
  • 0.0.0.0์—์„œ ํฌํŠธ ๋ฐ”์ธ๋”ฉ์„ ์ค‘์ง€ํ•˜๊ฑฐ๋‚˜ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฒด ๋ฐฉํ™”๋ฒฝ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌํŠธ ์˜คํ”„ ์‹œ์Šคํ…œ(ufw, firewalld ๋“ฑ)์„ ๋…ธ์ถœํ•˜๋„๋ก ์š”๊ตฌ
  • ์ด๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณตํ†ต ๋ฐฉํ™”๋ฒฝ์— ๋Œ€ํ•œ ํ†ตํ•ฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, 127.0.0.1:<port> ๋ฅผ ํ†ตํ•ด ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์˜ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋Œ€์‹  ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์—์„œ๋„ <docker container ip>:<service port> ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์„œ๋น„์Šค ์˜คํ”„ ์‹œ์Šคํ…œ์„ ๋…ธ์ถœํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋„๊ตฌ(ufw ๋“ฑ)๋ฅผ ํ†ตํ•ด ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฃผ์–ด์ง„ ํฌํŠธ์—์„œ <docker container ip>:<service port> ๋กœ ํฌํŠธ ํฌ์›Œ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜๋Š” https://github.com/moby/moby/issues/22054#issuecomment -554665865์—์„œ ์ œ์•ˆํ•œ @jest๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ”„๋ก์‹œ ์„ค๊ณ„๋กœ Kubernetes ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์— ๋…ธ์ถœํ•  ๋•Œ๊นŒ์ง€ ๋กœ์ปฌ ์‹œ์Šคํ…œ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” Docker๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉํ™”๋ฒฝ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์†์ƒ์‹œํ‚ค๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „ํ˜€ ์•Œ๋ฆฌ์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž ๋„๊ตฌ์— ํ†ตํ•ฉํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ์ œ์–ดํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค.

์‹œ์žฅ์— ์ˆ˜๋งŽ์€ ๋ฐฉํ™”๋ฒฝ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. iptables์—๋„ firewalld, ufw ๋ฐ ๊ธฐํƒ€ ์ˆ˜์‹ญ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Docker๊ฐ€ ๊ทธ๊ฒƒ๋“ค๊ณผ ํ†ตํ•ฉ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ(์ข‹๊ฒ ์ง€๋งŒ), Docker๊ฐ€ ๊ทธ๊ฒƒ๋“ค์„ ์šฐํšŒํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ๋ณด์•ˆ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค:

  • Debian ๊ธฐ๋ฐ˜ ์„œ๋ฒ„ ์„ค์ •(Debian, Ubuntu)
  • ufw, OpenSSH ์„œ๋ฒ„ ์„ค์น˜
  • ufw allow OpenSSH
  • ufw enable

์ด ์‹œ์ ์—์„œ ๋‹น์‹ ์€ ๊ฝค ์•ˆ์ „ํ•œ ์„œ๋ฒ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ์œ ์ผํ•œ ํŠธ๋ž˜ํ”ฝ์€ (a) ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ๊ณผ ๊ด€๋ จ๋˜๊ฑฐ๋‚˜ (b) SSH ์„œ๋ฒ„ ํŠธ๋ž˜ํ”ฝ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋…ธ์ถœ๋œ ํฌํŠธ๋กœ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์€ ๋‹ค์Œ์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค.

  • ํฌํŠธ๋Š” ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฉํ™”๋ฒฝ์€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์—์„œ ๊ณ„์† ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํฌํŠธ๋Š” ๋กœ์ปฌ ์ปดํ“จํ„ฐ(localhost)์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋Š” ๋™์ผํ•œ ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ์ถœ๋œ ํฌํŠธ๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋Š” ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋Š” ๋ฐฉํ™”๋ฒฝ ๊ตฌ์„ฑ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

firewalld ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CentOS/Fedora/RHEL ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ž‘์—…์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

@cpuguy83 IMO ์‚ฌ๋žŒ๋“ค์€ -p ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, I -p 80:80 ์ด๋ฉด ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ 80์— ๋ฐ”์ธ๋”ฉ๋œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

VirtualBox ๋˜๋Š” SSH ๋ชจ๋ธ ํฌํŠธ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌ๋˜๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์€ Docker์˜ ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋” ๋„“์€ ๊ธฐ๋Œ€์น˜๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ํ˜ธ์ŠคํŠธ ๋ฐ”์ธ๋”ฉ ๋ณผ๋ฅจ์œผ๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด "๋งˆ๋ฒ•์ฒ˜๋Ÿผ" ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ, ํ• ๋‹น๋Ÿ‰ ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ ๋‹ค๋ฅธ ์ชฝ์—์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

-p ๋ฌธ์ œ๋ฅผ ๋ฐฉํ™”๋ฒฝ ์‚ฌ๋ก€๋กœ ์ขํžˆ๊ธฐ: ์ผ๋ฐ˜ ์„ธ๊ณ„์—์„œ ์‚ฌ์šฉ์ž๋Š” 0.0.0.0:80์— ๋ฐ”์ธ๋”ฉ๋œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์™ธ๋ถ€ ์„ธ๊ณ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  INPUT ์ฒด์ธ์— ๊ทœ์น™์„ ์„ค์ •ํ•˜๋ผ๋Š” ์ˆ˜๋งŽ์€ ๊ฐ€์ด๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

-P INPUT DROP
-A INPUT -s 1.2.3.4/32 -p tcp --dst-port 80 -j ACCEPT

๋˜๋Š” UFW์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

ufw enable
ufw allow http

๊ทธ๋Ÿฌ๋‚˜ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ๊ฐ‘์ž๊ธฐ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

-A DOCKER-USER -s 1.2.3.4/32 -i eth0 -p tcp -m conntrack --ctorigdstport 80 --ctdir ORIGINAL -j ACCEPT
-A DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 80 --ctdir ORIGINAL -j DROP

Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ํฌ๊ด„์ ์ธ ๊ฐ€์ด๋“œ๋ฅผ ๋ณด์—ฌ์ฃผ์„ธ์š”.

๊ทธ๋ฆฌ๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด, ์ „์ฒด "์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ปจํ…Œ์ด๋„ˆํ™”" ๊ฐœ๋…์„ ํŒ๋งคํ•œ ์ผ๋ฐ˜ ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ ํฌํŠธ ๋…ธ์ถœ์˜ ๊ฒฐ๊ณผ๋Š” ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์š”์ฆ˜์€ ์ง€์‹์ด ๋ถ€์กฑํ•˜์—ฌ ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  Traefik๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. --expose ๋˜ํ•œ CLI ๋ฌธ์„œ์—์„œ ๋ฒ”์šฉ์œผ๋กœ ์ œ์•ˆ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. IMO๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•„๋ฌด๋Ÿฐ ๋„์›€์ด ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋˜๋Š” Dell์ด๋‚˜ Lenovo์™€ ๊ฐ™์€ Linux ๋…ธํŠธ๋ถ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋„๊ตฌ์— ๋Œ€ํ•œ ์‹ฌ์ธต ์ง€์‹์ด ์—†๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ œ๊ณตํ•˜๊ณ , ๋ฐฉํ™”๋ฒฝ์„ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•˜๋ ค๋Š” ์ง„์ •ํ•œ ๋…ธ๋ ฅ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋™์•ˆ ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์Šคํƒ€๋ฒ…์Šค์—์„œ ์ปคํ”ผ ๋งˆ์‹œ๊ธฐ.

์ด ์ •ํ™•ํ•œ ๋ฌธ์ œ๋กœ ์ธํ•ด ์ฃผ๋ง์— ๋ฐœ๊ฒฌํ•œ ์‹œ์Šคํ…œ ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. @jacoscaz ์— ๋”ฐ๋ฅด๋ฉด ๊ฒŒ์‹œ๋œ ํฌํŠธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์˜ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š๋„๋ก ์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘๊ฐ€ ์ด๊ฒƒ์„ ์†Œ๊ฐœ ๋ฌธ์„œ์— ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๊ณ  ์ปจํ…Œ์ด๋„ˆ์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์ปจํ…Œ์ด๋„ˆํ™”๋˜์ง€ ์•Š์€ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ Docker ๋„คํŠธ์›Œํฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๋” ๋‚˜์€ ์•„์ด๋””์–ด๊ฐ€ ์—†๋Š” ํ•œ ๋กœ์ปฌ ์ปจํ…Œ์ด๋„ˆ IP์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@dentonmwood ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ดํ•ด์•ผ ํ•  ์ผ๊ณผ ์ •ํ™•ํžˆ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ผ๋ฐ˜ ๋„คํŠธ์›Œํฌ์—์„œ ์ง์ ‘ IP๋ฅผ ์ œ๊ณตํ•˜๋Š” macvlan ๋˜๋Š” ipvlan์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@BenjamenMeyer @jest @jacoscaz

์ถ”๊ฐ€ ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ํฌ์ฆˆ๋ฅผ ์š”๊ตฌํ•˜๋Š” ์ง€์‹์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ -p ์„ ์ดํ•ดํ•˜๊ณ  ์„œ๋น„์Šค๊ฐ€ ๋…ธ์ถœ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ๋งŒ ๋…ธ์ถœ๋˜๋„๋ก ์ ์ ˆํ•œ ์˜ˆ๋ฐฉ ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ์ฑ…์ž„์„ ์‚ฌ์šฉ์ž(์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž ๋˜๋Š” ๊ฐœ๋ฐœ์ž)์—๊ฒŒ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ข…์ข… iptables๋ฅผ ์•Œ ์ด์œ ๊ฐ€ ์—†๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐœ์ž…ํ•˜์—ฌ ์ž์‹ ์˜ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•จ์œผ๋กœ์จ ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ‘๋‹ˆ๋‹ค( DOCKER-USER ).
์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋‘๋ ค์›€ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ƒํ™ฉ์— ์ฒ˜ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ง ์™„์ „ํžˆ ์ƒ๊ฐํ•  ์‹œ๊ฐ„์ด ์—†์—ˆ๋˜ ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ API ๋ฒ„์ „์„ ๊ธฐ๋ฐ˜์œผ๋กœ -p ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ˆ˜์‹ ์„ ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋‚˜๋ฅผ ๊ฑฑ์ •์‹œํ‚ค๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด์ง€๋งŒ ์ด์ „ API ๋ฒ„์ „์—์„œ๋Š” ์ตœ์†Œํ•œ ์ด์ „ ๋™์ž‘์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ ์•ก์„ธ์Šค์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๋กœ์ปฌ ํ”„๋ก์‹œ(ala kubectl proxy )๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์ด๋Š” ๋‹ค์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์ด ์•Œ๊ณ  ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋‹ด์„ ์ค๋‹ˆ๋‹ค. .

์ƒ๊ฐ?

ํ”„๋ก์‹œ๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฐฉํ–ฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” "ํฌํŠธ ํฌ์›Œ๋”ฉ"์ด Swarm ๋ชจ๋“œ์™€ ์œ ์‚ฌํ•œ ์ •์‹ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์™€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ๊ฐ„์˜ ๊ณต๋™ ์ฑ…์ž„์ด๋ผ๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ์†Œํ•œ์˜ ํ˜ธ์ŠคํŠธ ํ†ตํ•ฉ์€ ํ•ญ์ƒ ํ•„์š”ํ•˜๋ฉฐ -p ์™€ ๊ฐ™์€ ์˜ต์…˜์„ (๋น„์ „๋ฌธ๊ฐ€) ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•  ๋•Œ ์ œ์•ˆ๋œ ์†”๋ฃจ์…˜์€ ๊ทธ๋Ÿฌํ•œ ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

-p ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—(์ ์–ด๋„ CLI ์ˆ˜์ค€์—์„œ๋Š”) ์ž‘๋™ ๋ฐฉ์‹์˜ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๊ตฌ์„ฑ์„ ๋„์ž…ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆœ๊ฐ„๊ฐ€ iptables ์˜ /etc/docker/daemon.json ์กฐ์ž‘ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” DOCKER ๋˜๋Š” ์—†์Œ. ๊ตฌ์„ฑ์€ iptables==true && expose_with_network_proxy==true ์™€ ๊ฐ™์€ ์กฐํ•ฉ์ด ํ”„๋ก์‹œ์™€ ๊ฐ™์€ ๋™์ž‘์„ ์ผœ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ํ•ญ๋ชฉ์œผ๋กœ ํ™•์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒˆ๋กœ์šด ์„ค์น˜์— ๋Œ€ํ•ด ์•ˆ์ „ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ „์— aufs ๋ณด๋‹ค overlay2 ๋ฅผ ์„ ํ˜ธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์ œ ๊ธฐ์–ต์ด ๋งž๋‹ค๋ฉด). ๋˜ํ•œ ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ๊ธฐ์กด ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒˆ๋กœ์šด ์„ค์น˜๋Š” ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋‘๋ ค์›€ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ƒํ™ฉ์— ์ฒ˜ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ ์–ด๋„ ์ œ ๋ˆˆ์—๋Š” ์ด ๋ฌธ์ œ์˜ ์‹ฌ๊ฐ์„ฑ์ด -p ์˜ ํ˜„์žฌ ๊ธฐ์ˆ  ํ† ๋Œ€๋ณด๋‹ค ๋ฌธ์„œ ๋ถ€์กฑ๊ณผ ๋” ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ, ํ˜„์žฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด _์•ˆ์ „ํ•˜๋‹ค๊ณ  ๋งํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ๋ณด์•ˆ ๊ฒฐํ•จ์€ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์ด์–ด์ง„ ์ด์œ ๋ฅผ ๋น„ํŒํ•  ์œ„์น˜์— ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์‚ฌํ›„ ํŒ๋‹จ์€ ํ•ญ์ƒ 20/20์ด๋ฉฐ, ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์— ๋Œ€ํ•œ ์•ฝ์†๊ณผ ๊ทธ๋Ÿฌํ•œ ์•ฝ์†์ด ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ์ˆ ์  ๋ฌธ์ œ์— ๊ธฐ๊บผ์ด ๋งž์„œ๋ ค๋Š” ์˜์ง€๋ฅผ ์กด๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์€ -p ์‚ฌ์šฉ์˜ ๋ถ€์ž‘์šฉ์— ๋Œ€ํ•ด ๋ช…์‹œ์ ์œผ๋กœ ๊ฒฝ๊ณ ํ•˜๋Š” Docker ๋ฌธ์„œ ์ „์ฒด์— ์—ฌ์ „ํžˆ ๋ฐ๊ณ  ํฐ ๋นจ๊ฐ„์ƒ‰ ์ƒ์ž๊ฐ€ ์—†๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์•˜๋‹ค๋ฉด ์• ์ดˆ์— ์—ฌ๊ธฐ๊นŒ์ง€ ์˜ฌ ์ƒ๊ฐ์กฐ์ฐจ ํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒ๊ฐ?

ํ”„๋ก์‹œ ์˜ต์…˜์€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ docker run ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋™์•ˆ ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํฌํŠธ๋ฅผ ๋…ธ์ถœ ๋ฐ ๋…ธ์ถœ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค.

@BenjamenMeyer @jest @jacoscaz

์ถ”๊ฐ€ ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ž์„ธํžˆ ๋ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ํฌ์ฆˆ๋ฅผ ์š”๊ตฌํ•˜๋Š” ์ง€์‹์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ -p ์„ ์ดํ•ดํ•˜๊ณ  ์„œ๋น„์Šค๊ฐ€ ๋…ธ์ถœ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ๋งŒ ๋…ธ์ถœ๋˜๋„๋ก ์ ์ ˆํ•œ ์˜ˆ๋ฐฉ ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ์ฑ…์ž„์„ ์‚ฌ์šฉ์ž(์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž ๋˜๋Š” ๊ฐœ๋ฐœ์ž)์—๊ฒŒ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ข…์ข… iptables๋ฅผ ์•Œ ์ด์œ ๊ฐ€ ์—†๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐœ์ž…ํ•˜์—ฌ ์ž์‹ ์˜ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•จ์œผ๋กœ์จ ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ‘๋‹ˆ๋‹ค( DOCKER-USER ).
์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋‘๋ ค์›€ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ƒํ™ฉ์— ์ฒ˜ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ง ์™„์ „ํžˆ ์ƒ๊ฐํ•  ์‹œ๊ฐ„์ด ์—†์—ˆ๋˜ ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ API ๋ฒ„์ „์„ ๊ธฐ๋ฐ˜์œผ๋กœ -p ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ˆ˜์‹ ์„ ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋‚˜๋ฅผ ๊ฑฑ์ •์‹œํ‚ค๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด์ง€๋งŒ ์ด์ „ API ๋ฒ„์ „์—์„œ๋Š” ์ตœ์†Œํ•œ ์ด์ „ ๋™์ž‘์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ƒ๊ฐ?

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“  ๋ฐฉ๋ฒ•(-p, Dockerfile, docker-compose.yml)์˜ EXPOSE ํšจ๊ณผ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋งŒํผ ๋นจ๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ข‹์€ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๋ฐ ์กฐ์–ธ/์ „๋ฌธ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์— ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์š”๊ตฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ต๋ณ€์„ ๋•๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ์–ป๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. Docker๊ฐ€ ์žˆ๋Š” ํ˜„์žฌ ์œ„์น˜์—์„œ Docker๊ฐ€ ํ•„์š”ํ•œ ์œ„์น˜๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ„ํšํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํŠน์ • ์‹œ์ ์˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ƒํ™ฉ์˜ ์ค‘๋Œ€์„ฑ์ด ๊ทธ๊ฒƒ์„ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” ๋ธŒ๋ ˆ์ดํ‚น ์ฒด์ธ์ง€๋ฅผ ํ™•์‹คํžˆ ํ—ˆ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์•Œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋งŽ์ด ๋…ผ์˜๋˜๋Š” ์ผ์ •(6๊ฐœ์›”? 12๊ฐœ์›”?)์„ ์„ค์ •ํ•˜๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ "์ฃผ์š”" ๋ฒ„์ „์—์„œ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค. ๋ฒ„์ „ ์Šคํ‚ค๋งˆ์— ๋”ฐ๋ผ ์ฒซ ๋ฒˆ์งธ ์„ธํŠธ๊ฐ€ ์—ฐ๋„(19)์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. 2019๋…„ ๋ง์— 2019๋…„์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•˜๊ณ  2020๋…„์„ ์‚ฌ์šฉํ•˜์—ฌ ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ๊ด‘๊ณ ํ•˜์‹ญ์‹œ์˜ค. 2020๋…„์— ์„ ํƒ์  ๊ธฐ๋Šฅ์œผ๋กœ ๋„์ž…ํ•œ ๋‹ค์Œ 2021๋…„์— 1์œ„/๊ธฐ๋ณธ ์‚ฌ์šฉ์œผ๋กœ ์Šน๊ฒฉํ•ฉ๋‹ˆ๋‹ค.

Dockerfile ๋ฒ„์ „๊ณผ Docker Compose Schema Version๋„ ๊ธฐ๋ณธ ๋™์ž‘์„ ์„ค์ •ํ•˜๋Š” ํ•œ ์ข‹์€ ๋„๊ตฌ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์ „ ๋ฒ„์ „์ด ์ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฐ•๋ ฅํ•œ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์—๋„.

๊ทธ๋Ÿฌ๋‚˜ ๋กค์•„์›ƒ๋˜์—ˆ์ง€๋งŒ, ์™œ ๊ทธ๋ฆฌ๊ณ  ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๊ณ  ๊ทธ๊ฒƒ์— ๋ˆˆ์ด ๋ฉ€์–ด์ง€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๋ผ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ „์ฒด ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ทธ๋Ÿฌํ•œ ๋ณ€ํ™”๋ฅผ ํ›จ์”ฌ ๋” ์ง€์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ ์•ก์„ธ์Šค์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๋กœ์ปฌ ํ”„๋ก์‹œ(ala kubectl proxy )๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์ด๋Š” ๋‹ค์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์ด ์•Œ๊ณ  ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋‹ด์„ ์ค๋‹ˆ๋‹ค. .

๋‚˜๋Š” ํ”„๋ก์‹œ ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“œ๋Š”๋ฐ @jest๊ฐ€ ์ œ์•ˆํ•œ ํ”„๋ก์‹œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ, ์‹œ์Šคํ…œ ์™ธ๋ถ€์—์„œ ์ด๋ฅผ ๋…ธ์ถœ์‹œํ‚ค๋ ค๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ UFW ๋˜๋Š” firewalld๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ผ์ง€๋ผ๋„ ๋ฐฉํ™”๋ฒฝ์— ์–ด๋Š ์ •๋„ ์ต์ˆ™ํ•˜๊ฑฐ๋‚˜ ์ต์ˆ™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์†”๋ฃจ์…˜์ด ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฉํ™”๋ฒฝ์„ ํ†ตํ•ด ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉํ™”๋ฒฝ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๋ฐฉํ™”๋ฒฝ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ๋„๊ตฌ๋ฅผ ์šฐํšŒํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฉํ™”๋ฒฝ ๋„๊ตฌ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ Docker๊ฐ€ ๋ชจ๋“  ๋„๊ตฌ์™€ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๋น„ํ•ฉ๋ฆฌ์ ์ด๋ผ๋Š” ๊ฒƒ๋„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋ฌธ์„œํ™” ๊ฒฝ๋กœ๋ฅผ ํƒํ•˜๊ณ  ์ธ๊ธฐ ์žˆ๋Š” ๊ฒƒ๋“ค๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ•์กฐํ•˜๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๋” ์ถ”๊ฐ€ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ์ œ์•ˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ”„๋ก์‹œ ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“œ๋Š”๋ฐ @jest๊ฐ€ ์ œ์•ˆํ•œ ํ”„๋ก์‹œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ, ์‹œ์Šคํ…œ ์™ธ๋ถ€์—์„œ ์ด๋ฅผ ๋…ธ์ถœ์‹œํ‚ค๋ ค๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ UFW ๋˜๋Š” firewalld๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ผ์ง€๋ผ๋„ ๋ฐฉํ™”๋ฒฝ์— ์–ด๋Š ์ •๋„ ์ต์ˆ™ํ•˜๊ฑฐ๋‚˜ ์ต์ˆ™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์†”๋ฃจ์…˜์ด ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฉํ™”๋ฒฝ์„ ํ†ตํ•ด ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉํ™”๋ฒฝ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฐ˜์„ฑํ•œ๋‹ค. ํ”„๋ก์‹œ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ํฌํŠธ ์กฐํ•ฉ์— ํ”„๋ก์‹œ๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ(๋‚ด๊ฐ€ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค!) ๋˜๋Š” ๋‹ค๋ฅธ ์ด์œ ๋กœ ํƒ€ํ˜‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ ์™ธ๋ถ€ ๋…ธ์ถœ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์œ„์ž„ํ•˜๋Š” ๋Œ€๊ฐ€๋ฅผ ์น˜๋ฅด๋”๋ผ๋„ ํ•ฉ๋‹นํ•œ ๋ณด์•ˆ ๊ธฐ๋Œ€์น˜์™€ ์ผ์น˜ํ•˜๋„๋ก ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์ฃผ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์˜๊ฒฌ์— ๋”ํ•˜์—ฌ ํ”„๋ก์‹œ๋Š” ์‹ค์ œ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐฉํ™”๋ฒฝ ๋„๊ตฌ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ๋ฐฉํ™”๋ฒฝ ๊ตฌ์„ฑ ๋„๊ตฌ๊ฐ€ ๊ฐ์ง€๋˜๋ฉด ํ”„๋ก์‹œ๊ฐ€ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ์ ˆํ•œ ์ „๋‹ฌ ๊ทœ์น™์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ์˜ ์กด์žฌ๋Š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํ”„๋ก์‹œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜์ค€ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Docker๋Š” Linux์—์„œ์™€ ๋™์ผํ•˜๊ฒŒ macOS ๋ฐฉํ™”๋ฒฝ์„ ์šฐํšŒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ฐœ๋ฐœ ์ปดํ“จํ„ฐ(Mac์šฉ Docker Desktop)์—์„œ Docker ๋ฐ๋ชฌ ๊ตฌ์„ฑ์— "ip": "127.0.0.1" ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋“  ๊ฐœ๋ฐœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ localhost์—์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์•ฑ์„ ํ‘œ์‹œํ•ด์•ผ ํ•˜๋Š” ๋“œ๋ฌธ ๊ฒฝ์šฐ์—๋Š” -p 0.0.0.0:8080:8080 ํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ์•ฑ์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: Docker ๋ฐ๋ชฌ ๊ตฌ์„ฑ์— ๊ด€๊ณ„์—†์ด Docker Compose๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ์ „ํžˆ 0.0.0.0์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ํŠธ๋ฆญ์€ ๋ช…๋ น์ค„์—์„œ Docker๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  Compose ํŒŒ์ผ์€ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ์ด ๋‹ค๋ฅธ ํŒ€์›๊ณผ ๊ณต์œ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— Compose ํŒŒ์ผ์— 127.0.0.1์„ ๋ช…์‹œ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@luontola ์ •๋ง ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๊ฒƒ์€ ์˜ˆ๋ฅผ ๋“ค์–ด Docker compose์—์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์†Œ์˜ ํ—ˆ์šฉ/์ฐจ๋‹จ ๋ชฉ๋ก์„ ๊ฐ–๋Š” ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž๋™์œผ๋กœ DOCKER-USER iptables ์ฒด์ธ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ์ค‘์š”์„ฑ์„ ๊ฐ•์กฐํ•˜๋Š” ์ž‘์€ oopsie ๋ฐ์ด์ง€: https://github.com/docker/for-linux/issues/810 (์š”์•ฝ: DOCKER-USER๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋„์ปค ์™ธ๋ถ€ ์•ก์„ธ์Šค๋ฅผ ์ฐจ๋‹จํ•˜๋„๋ก iptables๋ฅผ ๊ตฌ์„ฑํ–ˆ๋”๋ผ๋„, ์ถ”๊ฐ€ ๊ตฌ์„ฑ์„ ๋ฌด์‹œํ•˜๊ณ  ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค)

@danhallin ๋‹˜ ๊ณผ ๊ฐ™์€ ๋Œ“๊ธ€์€ ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋Š” ์ •๋ง ํ•˜๋ฃจ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ  ํฅ๋ฏธ๋กญ๊ฒŒ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค!

์ €๋Š” Mac OS X์—์„œ ์‹คํ–‰ ์ค‘์ด๋ฉฐ LittleSnitch๋ผ๋Š” ๋กœ์ปฌ ๋ฐฉํ™”๋ฒฝ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 185.156.177.252๊ฐ€ com.docker.backend ํ”„๋กœ์„ธ์Šค์— ์—ฐ๊ฒฐํ•ด๋„ ๊ดœ์ฐฎ์€์ง€ ๋ฌป๋Š” ๋Œ€ํ™” ์ƒ์ž๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฑฐ๋ถ€๋ฅผ ๋ˆŒ๋ €๋‹ค.

์–ด๋–ป๊ฒŒ ๋‚ด ๋ผ์šฐํ„ฐ์—์„œ ํฌํŠธ ํฌ์›Œ๋“œ๋ฅผ ์—ด ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ–ˆ์ง€๋งŒ ์ด๊ฒƒ์ด ๋ฌผ๋ก  UPnP๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค! ๋ชจ๋“  ๋ผ์šฐํ„ฐ๊ฐ€ ์ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ œ๊ฐ€ ๊ถ๊ธˆํ•œ ๊ฒƒ์€ ๊ทธ ์ด์œ ์ž…๋‹ˆ๋‹ค. 185.156.177.252์˜ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์™ธ๋ถ€์—์„œ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚ด ๋กœ์ปฌ Docker ํ”„๋กœ์„ธ์Šค์— ํ•„์š”ํ•œ ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์™ธ๋ถ€์—์„œ ํฌํŠธ๋ฅผ ์—ด์ง€ ๋ง๊ณ  ๋‚ด๋ถ€์—์„œ ์ง‘์œผ๋กœ ๋ถˆ๋Ÿฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@ cpuguy83 ๋ชจ๋“  ๊ฒƒ์ด ํ›Œ๋ฅญํ•˜๊ณ  ๋ฉ‹์ง€์ง€๋งŒ ์ด ์š”์ฒญ์—์„œ ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ ๋„์ปค๋กœ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์—ฐ๊ฒฐํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํŠนํžˆ ๋„์ปค์— ์žˆ์ง€ ์•Š์ง€๋งŒ ๋„์ปค์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์ง„๋‹จ์„ ์‹œ๋„ํ•  ๋•Œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. (๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด). Docker์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ข‹๊ฑฐ๋‚˜ ์žฌ๋ฏธ์žˆ๊ฑฐ๋‚˜ ์œ ์šฉํ•œ ๊ฒฝํ—˜์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ ๊ธˆ์ง€์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋„๊ตฌ๊ฐ€ Docker ์นœํ™”์ ์ด์ง€ ์•Š์œผ๋ฉฐ ๊ทธ๋ž˜์•ผ ํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. Docker์—์„œ ์‹คํ–‰๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์™„์ „ํžˆ Docker ์•„๋ž˜์— ์žˆ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒฝ์šฐ ๊ด€๋ฆฌ์ž๋Š” ๋ฐฉํ™”๋ฒฝ ๊ตฌ์„ฑ์„ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์—†๊ณ  Expose Port ๊ธฐ๋Šฅ์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜๋˜์ง€๋งŒ(๋ช…๋ น์ค„, Dockerfile, Docker Compose Config) ์™„์ „ํžˆ ์†์ƒ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์‚ฌ๋žŒ๋“ค์€ Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŽ์€ ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๊ณ  docker-compose.yml ๋˜๋Š” Dockerfile ๋ฅผ ํ†ตํ•ด ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•ด์•ผ ๋กœ์ปฌ์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ use the -p ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ docker ๋ช…๋ น๊ณผ ์ง์ ‘ ์ธํ„ฐํŽ˜์ด์Šคํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ณด์•ˆ์ด ๊นจ์ ธ์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋ณด์•ˆ์„ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋กœ์ปฌ ์‹œ์Šคํ…œ์— ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ–ˆ์œผ๋ฉฐ( #22054(comment) ) ์™ธ๋ถ€ ๋…ธ์ถœ(์˜คํ”„ ์‹œ์Šคํ…œ) ๊ด€๋ฆฌ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ๋„๊ตฌ๋กœ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…:

* Use Docker Network

* Expose the Ports on the Docker Network alone and local host

* Stop binding the port on 0.0.0.0 - or effectively doing so

* Require users to use their own firewall tooling to expose the port off system (ufw, firewalld, etc)

* Provide integrations for common firewalls to make this easy

์ฆ‰, 127.0.0.1:<port> ๋ฅผ ํ†ตํ•ด ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์˜ ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋Œ€์‹  ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์—์„œ๋„ <docker container ip>:<service port> ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์„œ๋น„์Šค ์˜คํ”„ ์‹œ์Šคํ…œ์„ ๋…ธ์ถœํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋„๊ตฌ(ufw ๋“ฑ)๋ฅผ ํ†ตํ•ด ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฃผ์–ด์ง„ ํฌํŠธ์—์„œ <docker container ip>:<service port> ๋กœ ํฌํŠธ ํฌ์›Œ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜๋Š” #22054(comment) ์—์„œ ์ œ์•ˆํ•œ @jest๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ”„๋ก์‹œ ์„ค๊ณ„๋กœ Kubernetes ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์— ๋…ธ์ถœํ•  ๋•Œ๊นŒ์ง€ ๋กœ์ปฌ ์‹œ์Šคํ…œ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” Docker๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉํ™”๋ฒฝ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์†์ƒ์‹œํ‚ค๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „ํ˜€ ์•Œ๋ฆฌ์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž ๋„๊ตฌ์— ํ†ตํ•ฉํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ์ œ์–ดํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค.

์‹œ์žฅ์— ์ˆ˜๋งŽ์€ ๋ฐฉํ™”๋ฒฝ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. iptables์—๋„ firewalld, ufw ๋ฐ ๊ธฐํƒ€ ์ˆ˜์‹ญ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Docker๊ฐ€ ๊ทธ๊ฒƒ๋“ค๊ณผ ํ†ตํ•ฉ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ(์ข‹๊ฒ ์ง€๋งŒ), Docker๊ฐ€ ๊ทธ๊ฒƒ๋“ค์„ ์šฐํšŒํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ๋ณด์•ˆ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค:

* Setup a Debian-based server (Debian, Ubuntu)

* Install ufw, OpenSSH Server

* run `ufw allow OpenSSH`

* run `ufw enable`

์ด ์‹œ์ ์—์„œ ๋‹น์‹ ์€ ๊ฝค ์•ˆ์ „ํ•œ ์„œ๋ฒ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ์œ ์ผํ•œ ํŠธ๋ž˜ํ”ฝ์€ (a) ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ๊ณผ ๊ด€๋ จ๋˜๊ฑฐ๋‚˜ (b) SSH ์„œ๋ฒ„ ํŠธ๋ž˜ํ”ฝ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋…ธ์ถœ๋œ ํฌํŠธ๋กœ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์€ ๋‹ค์Œ์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค.

* The port should not be accessible from another computer; the firewall should continue to block it from outside systems.

* The port should be accessible from the local computer (localhost).

* Multiple docker containers should be able to expose the same port and have everything work; all containers with an exposed port should be accessible from the local system only.

* The user should not have to know about their firewall configuration details to make this happen.

firewalld ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CentOS/Fedora/RHEL ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ž‘์—…์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

ํฌํŠธ๊ฐ€ ๊ฒŒ์‹œ๋  ๋•Œ๋งˆ๋‹ค ๋‚ด ๋ฐฉํ™”๋ฒฝ ์ž…๋ ฅ ๊ทœ์น™์„ ์šฐํšŒํ•˜์ง€ ์•Š๋„๋ก ๋„์ปค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋™์•ˆ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ฃผ์„์€ ์ „์ฒด๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ๋” ๋ฐ”๋žŒ์งํ•œ IMO ์ ‘๊ทผ ๋ฐฉ์‹์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์–ด์ œ ์šฐ์—ฐํžˆ ์ด ๋ฌธ์ œ๋ฅผ ์ ‘ํ–ˆ์Šต๋‹ˆ๋‹ค. VPS์— ๋Œ€ํ•œ iptables ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์„ธ์‹ฌํ•˜๊ฒŒ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” ๋ฐ ๋ช‡ ์ฃผ๋ฅผ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‹ ์ค‘ํ•˜๊ณ  ์ œํ•œํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•„ํ„ฐ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ญ์ œ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ํŠธ๋ž˜ํ”ฝ์€ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋ž˜ํ”ฝ์ด ๊ธฐ๋ก๋˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

Docker๊ฐ€ ์ˆœ๋ฐฉํ–ฅ ์ฒด์ธ ๋ฐ NAT ํ…Œ์ด๋ธ”์„ ์ž์ฒด์ ์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ํ”„๋กœ์„ธ์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์กด์ค‘ํ•˜๋Š” ๋ฐ _๊ทน๋„์˜_ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‚ด ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํฌ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ ์—๋Š” ํ•˜์ง€ ๋ง๋ผ๊ณ  ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋†€๋ผ์›€์€ ์ปจํ…Œ์ด๋„ˆํ™”๋œ Nginx Proxy๊ฐ€ ์ „์ฒด ์ธํ„ฐ๋„ท์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์— ์ „ ์„ธ๊ณ„์˜ ์ธ๋ฐ”์šด๋“œ ์›น ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋Š” ์˜ต์…˜ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์•„์ง ๊ทธ ๊ธฐ๋Šฅ์„ ์ผœ์ง€ ์•Š์•˜๋‹ค. ๋‚ด iptables์˜ ์–ด๋””์—๋„ HTTP 80/443์ด ํ—ˆ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค‘ ์ผ๋ถ€๋Š” MySQL๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” Docker Compose์—์„œ -p ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ _์•Š์Šต๋‹ˆ๋‹ค_. ๋‚ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ db ์„œ๋ฒ„๊ฐ€ ๋™์ผํ•œ ์‚ฌ์šฉ์ž ์ •์˜ Docker ๋„คํŠธ์›Œํฌ๋ฅผ ๊ณต์œ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ „์ง DBA๋กœ์„œ ์ €๋Š” ํ•ญ์ƒ ๋ฐฑ์—…์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ˜ธ์ŠคํŠธ์˜ cron ์ž‘์—…๊ณผ ๋ฐฑ์—… ๋„๊ตฌ๊ฐ€ ์ ์‹œ์— ๋ฐฑ์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก -p ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ SQL ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉํ™”๋ฒฝ _option_์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์‹œ, ์•„์ง ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

Nginx์—์„œ ๋†€๋ž€ ํ›„์— MySQL๋„ ๋…ธ์ถœ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ๋‹ค์‹œ ํ™•์ธํ•˜๊ธฐ๋กœ ํ˜„๋ช…ํ•˜๊ฒŒ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋žฉํ†ฑ์—์„œ ์›๊ฒฉ VPS์˜ MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฆ‰์‹œ ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์„ ๋•Œ ๋‹ค์‹œ ์ถฉ๊ฒฉ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์€ ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์—์„œ ๊ธธ๊ฒŒ ๋…ผ์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋„์›€์ด ๋˜๋Š” ์กฐ์‚ฌ์™€ ์ œ์•ˆ์— ๋Œ€ํ•ด @BenjamenMeyer @jest @jacoscaz ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„๋Œ€์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ๊ฒฝํ—˜์„ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด? ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋œ ์ง€ 4๋…„์ด ๋„˜์—ˆ์ง€๋งŒ ๋‚˜ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ์ถฉ๊ฒฉ์„ ๋ฐ›์œผ๋ฉฐ ๋ฉ€์–ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€๋ฅผ ์ฆ‰์‹œ ์ถ”์ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋จผ์ € ์ด ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‚˜๋ฅผ ๊ฐ€์žฅ ์‹ค๋ง์‹œํ‚จ๋‹ค. Docker ๊ฐœ๋ฐœ์ž๊ฐ€ ์ข‹๋“  ๋‚˜์˜๋“  ํŠน์ • ๋””์ž์ธ ๊ฒฐ์ •์„ ๋‚ด๋ฆฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด "๋ฐฉํ™”๋ฒฝ ์šฐํšŒ ๋™์ž‘"์€ ๋ช…ํ™•ํ•˜๊ฒŒ ์–ธ๊ธ‰๋˜์ง€ ์•Š๊ณ , ํฐ ์†Œ๋ฆฌ๋กœ ๊ฒฝ๊ณ ๋˜๋ฉฐ, ๋” ๋„๋ฆฌ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋†€๋ผ์›€์€ ๊ฒฐ์ฝ” ์ข‹์€ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. iptables ๋ฐ ipset ์‚ฌ์šฉ. Ubuntu, CentOS 7 ๋ฐ RHEL 7์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”" IP๊ฐ€ ํ•ญ์ƒ ๋™์ผํ•œ IP ๋ฒ”์œ„์— ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ipset์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(iptables์˜ ์ œํ•œ ์ˆ˜์ •).
์ผ๋ฐ˜ Docker ๋ฐ Docker Swarm(SwarmKit์ด๋ผ๊ณ ๋„ ํ•จ)์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ์„ ๋ณด์žฅํ•˜๋ฉฐ, ์ง€์ •ํ•œ IP๋งŒ ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๋Š” OS ํฌํŠธ ๋ฐ Docker ํฌํŠธ(iptables ๋ฐ ipset ์‚ฌ์šฉ)์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ OS ํฌํŠธ ๋˜๋Š” Docker ํฌํŠธ๋ฅผ "๊ณต๊ฐœ"(๋ชจ๋“  IP์— ๊ฐœ๋ฐฉ)๋กœ ๋งŒ๋“œ๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Ansible์€ ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Ansible ์—ญํ• : https://github.com/ryandaniels/ansible-role-iptables-docker
CentOS/RHEL์— ๋Œ€ํ•œ ์ˆ˜๋™ ๋‹จ๊ณ„:
https://github.com/ryandaniels/ansible-role-iptables-docker#manual -commands-centosrhel
๊ทธ๋ฆฌ๊ณ  ์šฐ๋ถ„ํˆฌ 18.04/20.04:
https://github.com/ryandaniels/ansible-role-iptables-docker#manual -commands-ubuntu-2004

iptables ์™ธ์— ipset์„ ์„ค์น˜/๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์œ„ ๋งํฌ ์ฐธ์กฐ).
iptables ์„ค์ • ์˜ˆ(ssh ํฌํŠธ 22๋Š” ๋ชจ๋‘์—๊ฒŒ ์—ด๋ ค ์žˆ์Œ):

*filter
:DOCKER-USER - [0:0]
:FILTERS - [0:0]
#Can't flush INPUT. wipes out docker swarm encrypted overlay rules
#-F INPUT
#Use ansible or run manually once instead to add -I INPUT -j FILTERS
#-I INPUT -j FILTERS
-A DOCKER-USER -m state --state RELATED,ESTABLISHED -j RETURN
-A DOCKER-USER -i docker_gwbridge -j RETURN
-A DOCKER-USER -s 172.18.0.0/16 -j RETURN
-A DOCKER-USER -i docker0 -j RETURN
-A DOCKER-USER -s 172.17.0.0/16 -j RETURN
#Below Docker ports open to everyone if uncommented
#-A DOCKER-USER -p tcp -m tcp -m multiport --dports 8000,8001 -j RETURN
#-A DOCKER-USER -p udp -m udp -m multiport --dports 9000,9001 -j RETURN
-A DOCKER-USER -m set ! --match-set ip_allow src -j DROP
-A DOCKER-USER -j RETURN
-F FILTERS
#Because Docker Swarm encrypted overlay network just appends rules to INPUT
-A FILTERS -p udp -m policy --dir in --pol ipsec -m udp --dport 4789 -m set --match-set ip_allow src -j RETURN
-A FILTERS -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FILTERS -p icmp -j ACCEPT
-A FILTERS -i lo -j ACCEPT
#Below OS ports open to everyone if uncommented
-A FILTERS -p tcp -m state --state NEW -m tcp -m multiport --dports 22 -j ACCEPT
#-A FILTERS -p udp -m udp -m multiport --dports 53,123 -j ACCEPT
-A FILTERS -m set ! --match-set ip_allow src -j DROP
-A FILTERS -j RETURN
COMMIT
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰