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, ํ์ง๋ง ๋ณ๋ก ์ค์ํ์ง ์์ต๋๋ค.
๋ฌธ์ ๋ฅผ ์ฌํํ๋ ๋จ๊ณ:
๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช
ํ์ญ์์ค.
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์์ ์ง์ํ๋ ๋ชจ๋ ๋ฐฉํ๋ฒฝ์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ผ๋ก ์๊ฐ๋ฉ๋๋ค.
์ฐธ๊ณ : 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์์ ์ธ๊ธํ ๊ฒ๊ณผ ์ ์ฌํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ธฐ์กด ๋ฐฉํ๋ฒฝ ๊ท์น์ด ๊ฒ์๋ ์ปจํ ์ด๋ ํฌํธ์ ์ ์ฉ๋์ง ์์ ๋ ์์์ ๊นจ๋ ์ด์ํ ์๋ฐ์ด ์์ต๋๋ค. ์ํ๋ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค(์ ์ด๋ ์ ์๊ฒ๋)
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"๋ง ์ํ ํ๊ณ "2"๋ฅผ ์ฌ์ฉ์์ ์ฌ๋์ผ๋ก ํ์ฉํ๋ ๊ธฐ๋ฅ( LISTEN
๋๋ ๊ธฐํ)์
๋๋ค.
EXPOSE
๊ฒฝ์ฐ AFAIK๋ Docker ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ์ผ ๋ฟ์ด๋ฏ๋ก ์ฌ์ฉ์๊ฐ -P
(๋ชจ๋ ๊ฒ์ ๊ฒ์)๋ฅผ ์ง์ ํ๋ฉด ๋ฐ๋ชฌ์ด ๋ฌด์์ ํด์ผ ํ๋์ง ์ ์ ์์ต๋๋ค. ์๋ง๋ ๋ด๊ฐ ํ๋ ธ๊ณ "๋
ธ์ถ๋" ํฌํธ๋ฅผ ์ฌ์์ ๋ฐฉ์ง ๋ฐฉ์์ผ๋ก ์ ๋ฌํ ์ ์์ต๋๊น(์ ์ธ๊ณ ์ก์ธ์ค ์์)?
์ด๋ด์ด ๋ฌธ์ ์ ์์
์ด์ต์ ์ด์ ๋ฅผ ์ ํํ๊ฒ ์๊ตฌํ๊ณ ์๋ค -p
"2"์ด๋ป๊ฒ ๊ทธ ์ผ์์ ๋ถ๋ ๋
ธ๋์๋ฅผ ์ค์งํ๋ ค๋ฉด ์์ต๋๋ค. ๋ฐ๋ชฌ ์์ค ์ค์ (๋คํธ์ํน ๋นํ์ฑํ ์ ์ธ)์ผ๋ก ํด๊ฒฐํ ์ ์์ง๋ง ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ์งํ๋ ค๋ฉด ์๋ก์ด ๊ธฐ๋ฅ(์: LISTEN
๋๋ ๋ค๋ฅธ ์ด๋ฆ)์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ด๋ฌํ "์ฆ์ ์๋" ํจ๊ณผ์ ๊ฐ์ ๋ง์ ์ฌ์ฉ์๊ฐ ์์ง๋ง ์์คํ ๊ด๋ฆฌ์๋ iptables / firewalld ์ด์ธ์ ํ๋ก๊ทธ๋จ์ด ๋ฐฉํ๋ฒฝ์ ํฌํธ๋ฅผ ์ฌ๋ ๊ฒ์ ๊ธฐ๋ํ์ง ์์ต๋๋ค. ๋ฐฉํ๋ฒฝ ๊ด๋ฆฌ ์ํํธ์จ์ด๊ฐ ๋ณด๊ณ ํ์ง ์๋ ๋ฐฉ์์ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
์ธ ๊ฐ์ง ์ฃผ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ๋ด ๋๋ค.
์๋ง๋ 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์ ์ฐ๊ฒฐํ ๋ค์ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋๋ฅผ ์์คํ
์ธ๋ถ์ ๋
ธ์ถํ๋ ๊ท์น์ ์ถ๊ฐํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ปจํ
์ด๋๋ ์์คํ
์ธ๋ถ์ ๋
ธ์ถ๋์ด์๋ ์ ๋ฉ๋๋ค.
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
์ฌ์ฉ์ ๊ธ์งํฉ๋๋ค.
์์ฝํ๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
0.0.0.0
๋๋ ๋ชจ๋ ์ธํฐํ์ด์ค)... ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋๊ตฐ๊ฐ๊ฐ -p
์์ ์ฃผ์๋ฅผ ์๋์ผ๋ก ์ง์ ํ๋ ๊ฒ์ ๋ฐฉ์งํ์ง ์์ต๋๋ค. -p 1.2.3.4:80:80
)DOCKER-USER
์ฌ์ฉ์ ์ ์ ๊ท์น ์ฝ์
--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 ์ด์ธ์ ํ๋ซํผ์์๋ ๋ฌธ์ ๊ฐ๋๋ ๊ด๋ จ ๋ฌธ์ ๊ฐ ์ค์ ๋ก ๋ฐ์ํ๊ณ ์์ต๋๋ค. ๋ค์์ ๊ณ ๋ คํ์ธ์:
์ด์ ๋ ํ๋ก์ ํธ๋ฅผ ๋ชจ๋ ๋ก์ปฌ์์ ์คํํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์์ ํ์ฌ ํ ์คํธ๋ฅผ ์ํด ์ฝ๋๋ก ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
ํ์ฌ ๋ฐฉํ๋ฒฝ ์ํธ ์์ฉ ์ค๊ณ์์ - ๊ทธ๋ฆฌ๊ณ ๋ถ๋ถ์ ์ผ๋ก ์ฌ์ฉ์ ๋ชจ๋ฅด๊ฒ ๊ณต์ฉ ๋คํธ์ํฌ์ ์ปจํ ์ด๋๋ฅผ ๋ ธ์ถํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์์ ๋ฌธ์ ๋ก ์ด์ด์ง๋ ๋ถ๋ถ - ๋ ํ๋ก์ ํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋์ปค๋ ๋์์ ์คํํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๋ ธ์ถ๋ ํฌํธ์ ๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ ํฌํธ๋ฅผ ๋ชจ๋ ๋ ธ์ถํ๊ณ ์ถ์๊ณ ๋ ๋ค ์์ฉ ํ๋ก๊ทธ๋จ ์๋ฒ์ ๋ํด ๋์ผํ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. HTTP ๊ธฐ๋ฐ API ๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ด ํนํ ํด๋ผ์ฐ๋ ์งํฅ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ด์ ๋งค์ฐ ์ผ๋ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ ๋๋ค.
๋ฌผ๋ก ํ๋์ DB ์ปจํ ์ด๋์์ ๋ ๋ค ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ํดํนํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ ํธ ๋์์ธ์ ๋ฐ๋ผ ๋ถ๋ฆฌํ์ง ์๊ณ ๊ตฌ์ฑ ๋ฑ์ ๋ํด ๋์ฑ ์ฃผ์ํด์ผ ํฉ๋๋ค.
์ ์ ํ ์๋ฃจ์ ์๋ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
0.0.0.0
, ::
)๊ฐ ์ผ์นํ์ง ์๊ณ ํด๋น Docker ๋คํธ์ํฌ ๋ด์์ IP์๋ง ๋ฐ์ธ๋ฉ๋ฉ๋๋ค.๋ค์, ์ด๊ฒ์ ์ ์ง์ ์ผ๋ก ์ํ๋ ์ ์์ต๋๋ค.
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
๋ํ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๋์์ด ์์ต๋๋ค.
-p
์ฌ์ฉํ์ง ๋ง๊ณ ์ปจํ
์ด๋ IP์ ์ง์ ์ฐ๊ฒฐํ์ญ์์ค. IP๋ฅผ ์กฐํํด์ผ ํ๋ฏ๋ก ์ฝ๊ฐ์ ์ถ๊ฐ ์์
์ด ํ์ํ์ง๋ง ์ด ๋ฐ์ดํฐ๋ API์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ ๋ฐฉํ๋ฒฝ์ ์ ๋ฌ ์ ์ฑ
์ด ์ด๋ฅผ ํ์ฉํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค(๋ค๋ฅธ ํธ์คํธ์์ ์ฐ๊ฒฐํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ๋์ผํ ํธ์คํธ๋ ๊ด์ฐฎ์ ๊ฒ์
๋๋ค)--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)์ ์ค๋จํ์ง ์๊ณ ๋ก์ปฌ ์์คํ ์ ํฌํธ๋ฅผ ๋ ธ์ถํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ผ๋ฉฐ ์ธ๋ถ ๋ ธ์ถ ๊ด๋ฆฌ(ํด์ ์์คํ )์ ์ฌ์ฉ์๊ฐ ๊ธฐ์กด ๋๊ตฌ๋ก ์ฝ๊ฒ ์ ์ดํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ๊ณตํฉ๋๋ค.
ํด๊ฒฐ์ฑ :
์ฆ, 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๊ฐ ๊ทธ๊ฒ๋ค์ ์ฐํํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ค์ ํ ๋ณด์์ ๊นจ๋จ๋ฆฌ์ง ์๋ ๋ฐฉ์์ผ๋ก ์๋ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค.
๊ธฐ๋ณธ ํ ์คํธ ์ผ์ด์ค:
ufw allow OpenSSH
ufw enable
์ด ์์ ์์ ๋น์ ์ ๊ฝค ์์ ํ ์๋ฒ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํ์ฉ๋๋ ์ ์ผํ ํธ๋ํฝ์ (a) ๋๊ฐ๋ ํธ๋ํฝ๊ณผ ๊ด๋ จ๋๊ฑฐ๋ (b) SSH ์๋ฒ ํธ๋ํฝ์ ๋๋ค.
์ด์ ๋ ธ์ถ๋ ํฌํธ๋ก ๋์ปค ์ปจํ ์ด๋๋ฅผ ์์ํฉ๋๋ค.
์์ฉ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ๋ค์์ ์ถฉ์กฑํฉ๋๋ค.
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 ๋ฒ์ ์์๋ ์ต์ํ ์ด์ ๋์์ด ์ ์ง๋ฉ๋๋ค.์๊ฐ?
๋๋ ์ํฉ์ ์ค๋์ฑ์ด ๊ทธ๊ฒ์ ๊ณ ์น ์ ์๋ ๋ธ๋ ์ดํน ์ฒด์ธ์ง๋ฅผ ํ์คํ ํ์ฉํ๋ค๊ณ ์๊ฐํ๋ค. ์ฌ๋๋ค์๊ฒ ์๋ฆฌ์ง ์๊ณ ๊ทธ๋ฅ ํ์ง ๋ง์ญ์์ค. ๋ณ๊ฒฝ ์ฌํญ์ด ๋ง์ด ๋ ผ์๋๋ ์ผ์ (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
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Ben์ด ๋ฐํ๊ณ ์๋ ๋ฌธ์ ๋ ํ์ค์ ์ด๊ณ ๋๋ผ์ด ๊ฒ์ ๋๋ค(๋์ ์กฐํฉ). ์ ์ฒ๋ผ ๋ง์ ๊ด๋ฆฌ์๋ค์ด ๊ฒ์ฆ๋ ufw ๋ฐฉํ๋ฒฝ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. Docker๋ ufw ์ฃผ๋ณ์์ ์ํ ์ค์ด๋ฉฐ iptables ๊ท์น์ ๋ณ๊ฒฝํ๋ ๊ฒ์ 1) ufw๊ฐ ํจํท ํํฐ๋ง ๊ท์น์ ํ์ฌ ์ํ๋ฅผ ์๋ชป ๋ณด๊ณ ํ๊ฒ ํ๊ณ 2) ๊ฒ๋ณด๊ธฐ์ ์ฌ์ ์ธ ์๋น์ค๋ฅผ ๊ณต์ฉ ๋คํธ์ํฌ์ ๋ ธ์ถํ๋ ๋ฐฉ์์ ๋๋ค. docker๊ฐ sysadmin ์ปค๋ฎค๋ํฐ์ ์ข์ ์ ์ ์ ์งํ๋ ค๋ฉด ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๊ณ ์ํด์ผ ํฉ๋๋ค. ํ์ฌ Ben๊ณผ ๋์ฒ๋ผ ์ค์๋ก ๋ ๋์ ์ธํฐ๋ท์ ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ ๋ง์ ๊ด๋ฆฌ์๊ฐ ์์ต๋๋ค. Ben๊ณผ ๋์ ๋ฌ๋ฆฌ ๊ทธ๋ค์ ์์ง ๊ทธ๊ฒ์ ์์๋ด์ง ๋ชปํ๋ค.