๊ธฐ์
docker swarm ๋ชจ๋์์ ํฌํธ๋ฅผ 127.0.0.1์ ๋ฐ์ธ๋ฉํ๋ฉด ํฌํธ๊ฐ 0.0.0.0์์๋ ์ด๋ ค ์์ต๋๋ค. ์ด๊ฒ์ ์ฌ๊ฐํ ๋ณด์ ๋ฌธ์ ์ผ ์ ์์ผ๋ฉฐ ๋ฌธ์์์ ์ค๋ช ํด์ผํฉ๋๋ค.
๋ฌธ์ ์ฌํ ๋จ๊ณ :
mongodb:
image: mongo:3.2
volumes:
- ./persistent-data/mongodb:/data
- ./persistent-data/mongodb/db:/data/db
networks:
data:
aliases:
- mongo.docker
logging:
driver: syslog
options:
syslog-address: "udp://10.129.26.80:5514"
tag: "docker[mongodb]"
ports:
- "127.0.0.1:27017:27017"
deploy:
placement:
constraints: [node.labels.purpose == main-data]
๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช ํ์ญ์์ค.
nc -vz PUBLIC_NODE_IP 27017
found 0 associations
found 1 connections:
[...]
Connection to PUBLIC_NODE_IP port 27017 [tcp/*] succeeded!
์์ ํ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช
ํ์ญ์์ค.
ํฌํธ๋ 127.0.0.1 ์์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ ์ด๋์ด ์๋น์ค๋ฅผ ์คํํ๋ ๋ผ ๋
ธ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค์ํ๋ค๊ณ ์๊ฐํ๋ ์ถ๊ฐ ์ ๋ณด (์ : ๋ฌธ์ ๊ฐ ๊ฐ๋ ๋ฐ์ ํจ) :
docker version
์ถ๋ ฅ :
Docker version 17.03.1-ce, build c6d412e
docker info
:
๋ผ ๊ด๋ฆฌ์์ ๋ํ ๋์ปค ์ ๋ณด :
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 1
Server Version: 17.03.1-ce
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 3
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: active
NodeID: pk7ulemi0z0chgtsg0azfrjz5
Is Manager: true
ClusterID: 27etomlyjvtmygrm6rcdgr2ni
Managers: 1
Nodes: 6
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Number of Old Snapshots to Retain: 0
Heartbeat Tick: 1
Election Tick: 3
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Node Address: 10.129.26.165
Manager Addresses:
10.129.26.165:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.4.0-64-generic
Operating System: Ubuntu 16.04.2 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 992.4 MiB
Name: <HIDDEN>
ID: IMOK:QIR7:WU5Y:WTPP:EPRQ:F77G:ULGE:WOG4:O7S7:6AFE:V7QG:2XEK
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Username: <HIDDEN>
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
์ถ๊ฐ ํ๊ฒฝ ์ธ๋ถ ์ ๋ณด (AWS, VirtualBox, ๋ฌผ๋ฆฌ์ ๋ฑ) :
Digital Ocean์ ๋ฌผ๋ฐฉ์ธ์์ ํ
์คํธ๋์์ต๋๋ค.
์, ๊ทธ๋ฌ๋ฉด ์ค๋ฅ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. ์๋น์ค (๊ธฐ๋ณธ์ ์ผ๋ก)๋ "ingress"๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ "๊ฒ์"ํ๊ณ IP ์ฃผ์ ์ง์ ์ ์ง์ํ์ง ์์ต๋๋ค. ์ด๋ค _node_๊ฐ ๋๋ ์ง ์์ธกํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค (๋ฐ๋ผ์ ์ด๋ค IP ์ฃผ์๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ์ ์ ์์ต๋๋ค. .0.1 ๊ฐ๋ฅ). ์ด ๋ฌธ์ ๋ https://github.com/docker/docker/issues/26696 ๊ธฐ๋ฅ์ ์ถ์ ํ๊ณ ์์ผ๋ฉฐ์ด "์ํฝ"์ ์๋น์ค https://github.com/docker/docker/issues์์ ์ง์ํ์ง ์๋ ๋ค๋ฅธ ์ต์ ์ ์ถ์ ํฉ๋๋ค. / 25303)
์ฌ๊ธฐ์ ๋ฒ๊ทธ๋ docker๊ฐ ์๋์ผ๋ก ์ต์ ์ ๋ฌด์ํ๋ ๋์ ์ค๋ฅ๋ฅผ ์์ฑํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด ์ต์ํ์ docker-compose ํ์ผ์ ์ฌ์ฉํ์ฌ ์ฌํ ๊ฐ๋ฅํฉ๋๋ค.
version: "3.2"
services:
mongodb:
image: nginx:alpine
ports:
- "127.0.0.1:27017:80"
ํ @dnephin @vdemeester
@ fer2d2 ์ค์ ๋ชจ๋์์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ฒ์ํ๋ฉด ( ports
๋ํด stack deploy
), ingress
๋คํธ์ํฌ์ ๊ฒ์๋๋ฏ๋ก ๊ณต๊ฐ๋ฉ๋๋ค. ๋์ ๋ค๋๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ง๋ง kind/bug
๋ฅผ ๋ฃ๋ ์ด์ ๋์ด ํ๊ธฐ๋ฒ์ด์๋ ํฌํธ (์ : host:port:port
๋ก stack deploy
๋ฅผ ์ํ ํ ๋ ์ ์ด๋ ์ฌ๋๋ค์๊ฒ ๊ฒฝ๊ณ ํด์ผํ๊ธฐ ๋๋ฌธ์
๋๋ค host:port:port
).
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
mongo
ํฌํธ๋ฅผ ๊ณต๊ฐ ํ๋ ค๋ ๊ฒฝ์ฐ์๋ง ๊ฒ์ํด์ผํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด docker์ ์ด๋ฆ ๊ฒ์ ๋ฒ๋ค์ ํตํด ์ฌ์ฉํ ์ ์์ต๋๋ค (๋์ผํ ๋คํธ์ํฌ์ ๋ค๋ฅธ ์ปจํ
์ด๋ / ์๋น์ค๋ mongo
ํตํด ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ingress
์๋ ํธ์คํธ์ ๊ฒ์ํ๋ ค๋ ๊ฒฝ์ฐ (Swarm public์ด ์๋๋ผ ์คํ์ค์ธ ํธ์คํธ์์๋ง, swarm ๋ชจ๋์์ด ๋์ผํ ๋ฐฉ์์ผ๋ก) ํฌํธ ํ์ฅ ๊ตฌ๋ฌธ ์ ์ฌ์ฉํด์ผ ports:
- mode: host
target: 80
published: 9005
docker run -p 80:9005 โฆ
์ ๋์ผํ๊ฒ ์ํํ๋ฏ๋ก 0.0.0.0
๋ฐ์ธ๋ฉํ์ง๋ง ํธ์คํธ๋ก ์ ํ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ @thaJeztah๊ฐ ๋งํ๋ฏ์ด "์ฌ๊ธฐ์ ๋ฒ๊ทธ๋ docker๊ฐ ์ต์ ์ ์กฐ์ฉํ ๋ฌด์ํ๋ ๋์ ์ค๋ฅ๋ฅผ ์์ฑํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค."๐ผ
/ cc @mavenugo @aboch ํน์ IP์ ์ค์ ๋ก ๋ฐ์ธ๋ฉ ํ ์์๋ ๋ฐฉ๋ฒ์ด ์๋์ง ํ์ธํ๋ ค๋ฉด? (๋ ธ๋์ IP๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฌ์ฑํ๊ธฐ๊ฐ ์ ๋ง ๊น๋ค ๋กญ์ต๋๋ค.)
@vdemeester ์ด ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ localhost ๋ฅผ ํธ์คํธ ๋์์ผ๋ก ์ง์ ํ ์ ์์ต๋๊น?
ports:
- mode: host
target: 127.0.0.1:80
published: 9005
ํฌํธ ๊ตฌ์ฑ์ ์ํ ํ์ฅ ํ์์ด๋ฏ๋ก ์ ๋๋ก ์๋ํด์ผํฉ๋๋ค.
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
๊ธด ๊ตฌ๋ฌธ์์ ๋์๊ณผ ๊ฒ์๊ฐ ๋ชจ๋ ์ ์ ์ ํ์ผ๋ก ์ ์ฉ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
SSH ํฐ๋์ ํตํด ์ผ๋ถ ์๋น์ค์ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ ์ด๊ฒ์ด ๋ฐ๋์งํ ๋์์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์ด 127.0.0.1์์์ MySQL์ด๋ MongoDB์ ์๋ฒ๋ฅผ ๊ฐ์ง๊ณ SSH ํฐ๋์ ํตํด ์ฐ๊ฒฐํ๊ณ ์ ํ ๊ฒฝ์ฐ ์๋ฅผ ๋ค์ด, ๋์ปค ๋ผ์ ํจ๊ป ๋น์ ์ 0.0.0.0์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌํธ๋ฅผ ๋ ธ์ถํ๊ฑฐ๋ ๋ด๋ถ๋ฅผ ์คํ SSH์ ์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ ์ด๋ (๋ชจ๋ ์ต์ ์ ๋ง๋ค์ด์ผํฉ๋๋ค ๋งค์ฐ ์์ ํ์ง ์์).
์ด ์ ํ (ํน์ ์ธํฐํ์ด์ค ๋ฐ์ธ๋ฉ)์ผ๋ก ์ธํด ์ฌ์ฉํ ์์๋ SQL Workbench ๋๋ Robomongo์ ๊ฐ์ด SSH ํฐ๋์ ์ฌ์ฉํ๋ ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ผ์ด์ธํธ๊ฐ ์์ต๋๋ค.
ssh ํฐ๋์ ํตํด Mongobooster๋ฅผ docker swarm๊ณผ ์ฐ๊ฒฐํ๋ ค๊ณ ์๋ํ๋ @ fer2d2 ์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฐพ์ ์ ์ผํ ํด๊ฒฐ์ฑ ์ 27017 ํฌํธ๋ฅผ ์ด๊ณ ์ฌ์ฉ์์ ์ํธ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณดํธํ๋ ๊ฒ์ ๋๋ค.
์ด๋ค ์์์ด๋ผ๋?
+1
+1
๊ธด ํ์์ ํฌํธ ๋งคํ์ ์ํด ip_ address : port ์์ ํ์ฉํ๋ ๋ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก๋ ์ ๋ ์บ์คํธ ์ฃผ์ ๋๋ ๋ฃจํ๋ฐฑ๊ณผ ์ฐ๊ด ๋ ์์๋ ๋ค๋ฅธ ์ฃผ์์ ๋๋ค. ์ด๋ ๋ฃจํ๋ฐฑ ๋คํธ์ํฌ์์๋ง ๋ณผ ์ ์๋ค๋ ์ ์์ 127.0.0.1 ์ฃผ์์ ์ ์ฌํฉ๋๋ค. ์ด ์์ฑ์ ๊ฐ์ง ๋ ธ๋๋ก ์ ํ๋ ์๋น์ค๋ ํฌํธ ๋ณํ์์ํ iptables ๊ท์น์ ํผํ๋ฉด์ ํฌํธ ์ถฉ๋์ ํผํ๊ธฐ ์ํด ์ ๋ ์บ์คํธ ์ฃผ์์์๋ง ํฌํธ๋ฅผ ๋ ธ์ถํ๋ ค๊ณ ํ ์ ์์ต๋๋ค.
๋ค์์ ์ง์ ํ ๋ ์ต์ ์ด ๋ ์ ์์ต๋๊น?
placement:
constraints:
- node.id ==
๊ฑด๋ฐฐ
+1
+1
+1
๋ ์์ ์ ์ํด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
iptables -I DOCKER-USER -i eth0 -j DROP
iptables -I DOCKER-USER -m state --state RELATED,ESTABLISHED -j ACCEPT
๋์ปค๋ ์ด๋ฌํ ๊ท์น์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค. ์์ ์ ๊ฒ์ ์ถ๊ฐํ์ญ์์ค
-A DOCKER-USER -j RETURN
๊ฒฐ๊ณผ์ ์ผ๋ก ํฌํธ๋ 0.0.0.0์์ ์์ ํ์ง๋ง ์ธ๋ถ ์ธํฐํ์ด์ค eth0์์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค.
์ด ๋์์ "๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์"์ ์๋ฐฐ๋๋ฉฐ ๋ฌธ์์ ๋ฉ๋ชจ๋ฅผํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์ง๊ธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ํ ๋ชจ๋ : ์ธ ๊ทธ๋ ์ค / ํธ์คํธ์ ๊ด๋ จ์ด ์์ต๋๋ค (์ด ๋ ๊ฐ์ง ๋ฌธ์ ๋ ๋ ผ์์์ ํผ๋๋๋ ๊ฒ ๊ฐ์ต๋๋ค). ์๋น์ค๊ฐ ๋ชจ๋ ๋ ธ๋์ ๋ก์ปฌ ์ฃผ์์ ๋ฐ์ธ๋ฉ๋๋ ๊ฒ์ ์ค์งํด์ผํ๋ ์์ ๋ชจ๋์ ๋ํด์๋ ์๋ฌด ๊ฒ๋ ์์ง๋ง ์ธ๋ถ ์ฃผ์์๋ ์ฐ๊ฒฐ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ 127.xxx๊ฐ ํ์ฉ๋์ด์ผํฉ๋๋ค. (๋น ์ค์ ๋ชจ๋์์ (๋์ปค ์คํ ์ฌ์ฉ) 127.0.0.2:80 ๋ฐ 127.0.0.3:80 ๋ฑ์ ๋ฐ์ธ๋ฉํฉ๋๋ค. ๊ฐ๋ฐ์ค์ธ ์ฌ๋ฌ ์๋ฒ๋ฅผ ๋ก์ปฌ๋ก ํ ์คํธํฉ๋๋ค.).
๋ค๋ฅธ ๋ฌธ์ ๋ ์์ ๋ชจ๋๊ฐ ๊ธฐ๋ณธ๊ฐ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์์์น ๋ชปํ ์ผ์ด๋ฉฐ ๋ณด์ ๋ฌธ์ ๋ ๋ฐ์ํฉ๋๋ค. ๋ฐฉ๊ธ ํฌํธ๊ฐ 127.0.0.3:80์ผ๋ก ๋ฐ์ธ๋ ๋ ๋คํธ์ํฌ์ ์ฌ์ค ๋ถ๋ถ์์๋ ๊ฒ์ผ๋ก ์ ํ๋ ๋ ธ๋์์ ์๋น์ค๋ฅผ ์์ํ๋ ค๊ณ ํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ณต์ฉ ๋ ธ๋์ ๊ณต์ฉ ์ธํฐํ์ด์ค์๋ ๋ฐ์ธ๋ฉ๋์์ต๋๋ค. (์ฆ, IP ์ฃผ์๋ฅผ ์กฐ์ฉํ ๋ฌด์ํ๊ณ ์์ ๋ชจ๋๋ฅผ ์กฐ์ฉํ ์ฌ์ฉํ๋ฉฐ ๋ด ๋ฐ์ดํฐ๊ฐ ๊ณต๊ฐ๋ฉ๋๋ค.)
/etc/hosts
๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๋๋ฉ์ธ ์ด๋ฆ์ด ๋ค๋ฅธ ์ปจํ
์ด๋๋ก ์ ์ก๋๋๋กํฉ๋๋ค. docker run
์์๋ ์๋ํ์ง๋ง compose์์๋ ์๋ํ์ง ์์ต๋๋ค.๋ก์ปฌ ์ฃผ์์ ๋ฐ์ธ๋ฉ ํ์ฉ์ ์ ํ๋ ๋ ธ๋์ ์ ์ฉํฉ๋๋ค. ํน์ ์ฃผ์์ ๋ฐ์ธ๋ฉ ํ์ฉ, ์ ํ๋ ๋ ธ๋์ ๋ํด ์๋ํ๊ฑฐ๋ ๋ผ๋ฅผ ํตํด ๋ ธ๋ ์ค ํ๋์ ์ฃผ์ ์ค ํ๋๋ก ๋ผ์ฐํ ๋ฉ๋๋ค (์์ ๋ชจ๋ ๋ง ๊ฐ๋ฅ). ์ด ๋ผ์ฐํ ์ ์ด๋ฏธ ์๋ฃ๋์์ต๋๋ค.
@ richard-delorenzi Moby๋ ํ์ฌ ํธ์คํธ IP๋ ํ์ฉํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ฅ ์์ฒญ ์ธ๋ถ์์ ์ด๊ฒ์ ํด๋ผ์ด์ธํธ ์ธก ๋ฌธ์ ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ํนํ compose yaml์ด Docker CLI์์ ๋ฒ์ญ๋๋ ๋ฐฉ์์ ๋๋ค.
์ธ ๊ทธ๋ ์ค๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๊ฝค ์ ๋ฌธ์ํ๋์ด ์์ง๋ง ์ด๊ฒ์ด CLI์์ ์ข์ง ์์ ๋์์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค.
+1
+1
+1
๋ด๊ฐ ์ฌ์ฉํ๋ ์ผ์ข ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ ๋ฆฝ ์คํ ํ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ 'core'๋ผ๋ ๋คํธ์ํฌ์ ์ฐ๊ฒฐํฉ๋๋ค.์ด ๋คํธ์ํฌ๋ ๋ผ ์์์ ์คํ๋๋ ๋ชจ๋ ๋ฐฑ์๋ ์๋น์ค (mongo, elasticsearch, influxdb ๋ฑ)์์ ์ฌ์ฉ๋ฉ๋๋ค.
์์ฑ ํ์ผ์์์ด ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณผ ์ ์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ ๋ฆฝ ์คํ ํ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ์์ต๋๋ค.
docker run --name kibana --rm -d -v /var/lib/kibana:/usr/share/kibana/config -p 127.0.0.1:5601:5601 --network core docker.elastic.co/kibana/kibana:6.1.2
docker run --name chronograf --rm -d -v /var/lib/chronograf:/var/lib/chronograf -p 127.0.0.1:8888:8888 --network core chronograf:1.4 chronograf --influxdb-url=http://influxdb:8086
์ด๋ฅผ ์์ํ ํ docker ps๋ ์ ์ปจํ ์ด๋๊ฐ 127.0.0.1์ ๋ฐ์ธ๋ฉ ๋ ๊ฒ์ผ๋ก ํ์ํฉ๋๋ค. ์๋ฉ. ๊ทธ๋ฐ ๋ค์ ๋ณด์ ์ก์ธ์ค๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ด ๋ก์ปฌ ์ํฌ ์คํ ์ด์ ์์ ๋์ปค ํธ์คํธ๋ก ํฐ๋๋ง ํ ์ ์์ต๋๋ค.
ssh -i my_ssh_key.pem [email protected] -L 8888:localhost:8888 -L 5601:localhost:5601 -N
๋ด ๋ธ๋ผ์ฐ์ ์์ http : // localhost : 8888 ๋๋ http : // localhost : 5601์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๋๋ฅผ ์ํด ์๋ํฉ๋๋ค.
UNIX ์์ผ์ด 127.0.0.1 TCP / IP ์์ผ์ ๋์ฒด ํ ์์๋ ๊ฒฝ์ฐ ์ฌ๊ธฐ ์์ fluent-bit์ ๋ํด ๊ตฌํ ํ ๊ฐ๋ฅํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์
mode
๋ค๋ฅธ ์ต์
์ ์ถ๊ฐํ๋ฉด ๋์์ด ๋ ์ ์์ต๋๋ค. ๊ฐ์ ๋ญ๊ฐ local
์ด์ธ์ host
๋ฐ ingress
.
"์ฌ์ฉ ๊ฐ๋ฅํ ๋ณด์ : Moby๋ ์ฌ์ฉ์ฑ์ ์์์ํค์ง ์๊ณ ๋ณด์ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํฉ๋๋ค."๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ์ ๊ฑฐํ์ญ์์ค. moby readme ํ์ผ์ ์์ต๋๋ค. ์ด๊ฒ์ ํ์คํ ์๋ชป๋ ๊ด๊ณ ์ ๋๋ค. @ richard-delorenzi์ ์๊ฒฌ์ ์ฐธ์กฐํ์ญ์์ค.
์๋น์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํธ๋ฅผ ๊ฒ์ํ์ง ์์ผ๋ฏ๋ก ํฌํธ๋ฅผ ๊ฒ์ํ๋๋ก ์ง์ ํ์ง ์์ผ๋ฉด ์ก์ธ์ค ํ ์ ์์ต๋๋ค. ํน์ IP ์ฃผ์์ ๋ํ ๋ฐ์ธ๋ฉ์ ํ์ฌ ์ง์๋์ง ์์ต๋๋ค. ์๋น์ค์ ์ก์ธ์ค ํ ์ ์์ด์ผํ๋ ๊ฒฝ์ฐ ํฌํธ๋ฅผ ๊ฒ์ํ์ง ๋ง๊ณ ๋ด๋ถ (์ค๋ฒ๋ ์ด) ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค์ ์ฐ๊ฒฐํ์ญ์์ค.
IP ์ฃผ์ ๋ฐ์ธ๋ฉ์ ๋ํ ์ง์ ์ถ๊ฐ๋ https://github.com/moby/moby/issues/26696 ์์ ์ค๋ช ํ์ง๋ง ๊ตฌํํ๊ธฐ๊ฐ ๊ฐ๋จํ์ง๋ ์์ต๋๋ค (๋น "localhost"IP ์ฃผ์ ๊ณ ๋ ค).
์คํ์ ๋ฐฐํฌ ํ ๋ ๊ฒฝ๊ณ ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
docker stack deploy -c- test <<'EOF'
version: '3'
services:
web:
image: nginx:alpine
ports:
- "127.0.0.1:8080:80"
EOF
WARN[0000] ignoring IP-address (127.0.0.1:8080:80/tcp) service will listen on '0.0.0.0'
Creating network test_default
Creating service test_web
์ง์ ๋ IP ์ฃผ์๋ก ์๋น์ค๋ฅผ ๋ฐฐํฌํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ์ ํจ๊ป ๋ฐฐํฌ์ ์คํจํฉ๋๋ค.
docker service create -p 127.0.0.1:9090:80 nginx:alpine
invalid argument "127.0.0.1:9090:80" for "-p, --publish" flag: hostip is not supported
See 'docker service create --help'.
@dalu ์์คํ ์ด ์ธํฐ๋ท์ ๋ ธ์ถ๋์ด ์๊ณ Docker์๊ฒ ํด๋ฌ์คํฐ์ ์๋น์ค๋ฅผ ๋ ธ์ถํ๋ผ๊ณ ์ง์ ํ ๊ฒฝ์ฐ ์์์ด ๋ค๋ฅธ ์ด์ ๊ฐ ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํ์คํ ๊ฐ๋ฐ๊ณผ ์ค์ ๋ฐฐํฌ์ ์ด๋ ค์์ ๊ฒช๋์ด ๊ตฌ์ฑ ํ์์ ์ฌ๊ฐํ ํํ์ด ์์ต๋๋ค.
ํํ
์์คํ ์ด ์ธํฐ๋ท์ ๋ ธ์ถ๋๊ณ Docker์ ํด๋ฌ์คํฐ์์ ์๋น์ค๋ฅผ ๋ ธ์ถํ๋๋ก ์ง์ ํ ๊ฒฝ์ฐ ์์์ด ๋ค๋ฅธ ์ด์ ๊ฐ ๋ฌด์์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์๋. ๋๊ตฐ๊ฐ๊ฐ 127.0.0.1 ๋๋ 10.0.0.0๊ณผ ๊ฐ์ ๋น ๊ณต์ฉ IP์ ๋ฐ์ธ๋ฉํ๋ฉด ์ ๊ณต๊ฐ์ ์ผ๋ก ์ก์ธ์ค ํ ์ ์์ด์ผํฉ๋๊น? ์ฌ์ค ์ ๋ต์ ๋๋ค.
ํน์ IP ์ฃผ์์ ๋ํ ๋ฐ์ธ๋ฉ์ ํ์ฌ ์ง์๋์ง ์์ต๋๋ค.
๋ฌ๋ฃจ
๊ทธ๋ฌ๋ ๊ณต๊ฐ์ ์ผ๋ก ๋ง ์ก์ธ์ค ํ ์ ์์ด์ผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ์ฌ๊ธฐ์์ ๋ชจ๋ ๊ฑฐ๋์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์์ ํ์ง ์์ผ๋ฉฐ ์๋ฏธ๋ก ์ผ๋ก ์์ ์ ํํผํฉ๋๋ค.
์ด ๋ฌธ์ ๋ ์ ์ ํ ํด๊ฒฐ์ฑ ์์ด ๊ฑฐ์ 2 ๋ ๋์ ์ด๋ ค ์์ต๋๋ค.
swarm์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ swarm์์ kubernetes๋ก ์ ํํ๊ณ ์์ต๋๋ค. ์ด ์ ํ์ด ๋งค์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค์ง๋ง์ด ๊ฒฐ์ ์ ์ ์ ์ผ๋ก ๋ง์กฑํฉ๋๋ค.
@Bessonv ๋ฌธ์ ๊ทธ๋๋ก "๋๋ ์ด๊ฒ์ ๋ฌด์ํ๊ณ ์์ต๋๋ค"๋ผ๊ณ ๋งํฉ๋๋ค.
๋ฌธ์ ๋ compose ํ์์ด dev ํ๊ฒฝ ์ฉ์ผ๋ก ์ค๊ณ๋์์ผ๋ฉฐ ํด๋ฌ์คํฐ ๋ฐฐํฌ๋ฅผ ์ง์ํ๋๋ก ํธ์๋์๋ค๋ ๊ฒ์ ๋๋ค. "๋์ปค ์คํ"์ ์ค๋ฅ๊ฐ ๋ฐ์ํด์ผํ์ง๋ง ์ฌ๋๋ค์ ํ๋์ compose ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ชจ๋๋ฅผ ์ง๋ฐฐ ํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค.
ํํ
์ด ์ค๋ช
์ด ๋ง์์ ๋ค์ง ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ์์ฑ ํ์์ ์ํ๋ ์ํ์ ๋ํ ์ค๋ช
์
๋๋ค. ๋จ์ผ ๋จธ์ (๊ตฌ์ฑ)๊ณผ ํด๋ฌ์คํฐ (์ค์) ์ฌ์ด์ ์ฝ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ฐ๋ ๊ฒ์ ์์ ํ ๊ด์ฐฎ์ต๋๋ค. ์ ๊ด์ ์์๋ ์๊ณก์ ์ง์ํ ํ์๊ฐ ์ ํ ์์ต๋๋ค. ํนํ ์ค์ ๋ชจ๋ ํ์ฑํ๊ฐ ๋๋ฌด ์ฝ๊ธฐ ๋๋ฌธ์. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ผ๋ฅผ ๊ณ ์ ํด์ผํฉ๋๋ค.
๋ฌธ์ ๋ ์ ํ ๋ฌด๋ฆฌ๊ฐ ์๋๋ฉฐ ์์ฑ ํ์ + docker cli์ ๊ตฌํ์์ 100 %์
๋๋ค.
์คํ์ ํ์ฌ 100 % ํด๋ผ์ด์ธํธ ์ธก ๊ตฌํ์
๋๋ค.
์คํ ๋ด๋ถ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, redis ๋ฑ๊ณผ ๊ฐ์ ๋ด๋ถ ์๋น์ค์ ๋ํ ํฌํธ๋ฅผ ๋ช
์ ์ ์ผ๋ก ๋
ธ์ถ ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ด๋ถ ์๋น์ค ์ ports
๊ตฌ์ฑ์ ์๋ตํ๊ณ ์ด๋ฆ์ผ๋ก ์ฐธ์กฐํ๋ ๊ฒ๋ง์ผ๋ก๋
์คํ ๋ด๋ถ์ db ์๋น์ค ์
services:
db:
image: postgres:11-alpine
networks:
- backend
... ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ ํฌํธ๋ก Django app
์๋น์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
DATABASES = {
'default': env.db(default='postgres://user:pass<strong i="13">@db</strong>:5432/catalog'),
}
๋ฐ๋ผ์์ด ๊ฒฝ์ฐ ๊ณต๊ฐ ์๋น์ค ๋ง ๋ช ์ ์ ์ผ๋ก ๋ ธ์ถํ๋ฉด ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
๋ฌธ์ ๋ ์ ํ ๋ฌด๋ฆฌ๊ฐ ์๋๋ฉฐ ์์ฑ ํ์ + docker cli์ ๊ตฌํ์์ 100 %์ ๋๋ค.
์คํ์ ํ์ฌ 100 % ํด๋ผ์ด์ธํธ ์ธก ๊ตฌํ์ ๋๋ค.
๋ญ๋ ๊ฐ์ : ๋๋ (์ด ๋ฌธ์ ๋๋ฌธ์) ์คํ ์ฌ์ฉ์ ์ค๋จํ๊ณ ๋ ์ด์ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ๋์๊ด์ ๋น๋ํ๊ณ , ๋์ปค๋ฅผ ๋น๋ํ๊ณ , ๋ด ๊ณ ์์ด๋ฅผ ๋น๋ํ์ญ์์ค.
Docker๋ฅผ ์ง์ ์ฌ์ฉํ๊ฑฐ๋ compose๋ฅผ ์ฌ์ฉํ ๋์ด ๋ฌธ์ ๋ฅผ ๋ณด์ง ๋ชปํ์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ด ๋์์ด ๋ ์ ์์ต๋๋ค (์ค์์ ๋ชจ๋ ๋ ธ๋์์ ์คํ๋์ด์ผ ํจ).
๋์ฐํ ํด๊ฒฐ์ฑ :
$ mv /usr/bin/docker-proxy /usr/bin/docker-proxy-original
$ cat << 'EOF' > /usr/bin/docker-proxy
#!/bin/sh
exec /usr/bin/docker-proxy-original `echo $* | sed s/0.0.0.0/127.0.0.1/g`
EOF
$ chmod 755 /usr/bin/docker-proxy
$ service docker restart
@jsmouret ์ต์ ๋์ปค ๋ฆด๋ฆฌ์ค์์ ๋์ปค ํ๋ก์๋ฅผ ์ฐพ์ ์๋ ์์ต๋๋ค. ์ ์ฐ์ธ๊ฐ? ์๋๋ฉด ์ด๋ฆ์ด ๋ค๋ฅธ๊ฐ์?
์ํฉ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค ...
$ apt-file search docker-proxy
docker-ce: /usr/bin/docker-proxy
docker.io: /usr/sbin/docker-proxy
์ด ๋์์ ์ด๋ป๊ฒ ๋ ๋ฌธ์ํ๋์ด์ผํ๋ค ๋ฌธ์ .
ํ์ฌ๋ ์งง์ ํฌํธ ๋งคํ์์ ํธ์คํธ๋ฅผ ๋ฌด์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์กฐ์ฉํ ์๋ํ์ง ์์ต๋๋ค.
๋ ๋ค๋ฅธ ์ด์ํ ์ ์ ๊ธด ๊ตฌ๋ฌธ ์คํค๋ง์์ ํธ์คํธ๋ฅผ ์ค์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด ๋์์ ๋ฌธ์์ ์ด๋ป๊ฒ ๋ ๋ฌธ์ํ๋์ด์ผํฉ๋๋ค.
๋๋ ๋์ํ๋ค; ๊ทธ ํ์ด์ง ์ด๋๊ฐ์ ์ธ๊ธ๋์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฐพ์ ์ ์์ต๋๋ค. ๋ฌธ์ ์ ์ฅ์์์ ๋ฌธ์ ๋ฅผ ์์ ๋กญ๊ฒ์ฌ์ญ์์ค. https://github.com/docker/docker.github.io/issues
ํ์ฌ๋ ์งง์ ํฌํธ ๋งคํ์์ ํธ์คํธ๋ฅผ ๋ฌด์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์กฐ์ฉํ ์๋ํ์ง ์์ต๋๋ค.
์ด๋ค ๋ฒ์ ์ ๋์ปค๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๊ฒฝ๊ณ ( docker stack deploy
์ฌ์ฉ์) ๋๋ _error _ ( docker service create
์ฌ์ฉ์)๋ฅผ ์ธ์ํด์ผํฉ๋๋ค. https://github.com/moby/moby/issues/32299#issuecomment -472793444 ์ฐธ์กฐ
์ด๋ค ๋ฒ์ ์ ๋์ปค๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๊ฒฝ๊ณ (๋์ปค ์คํ ๋ฐฐํฌ ์ฌ์ฉ์) ๋๋ ์ค๋ฅ (๋์ปค ์๋น์ค ์์ฑ ์ฌ์ฉ์)๋ฅผ ์ธ์ํด์ผํฉ๋๋ค.
์ด, ๋ด ์๋ชป ์ธ ๊ฒ ๊ฐ์์. ์ฝ์์์ ์คํ์ ๋ฐฐํฌํ๋ ค๊ณ ํ ๋ ์ค์ ๋ก ์ํํฉ๋๋ค.
์ด์ ์๋ ํฌ ํ
์ด๋ UI๋ฅผ ํตํด ์ํํ์ผ๋ฉฐ ์ค๋ฅ๋ ๊ฒฝ๊ณ ๊ฐ ํ์๋์ง ์์์ต๋๋ค.
๊ฑฐ์ 2 ๋ ๋์ Docker ๊ฐ๋ฐ์ ์ค ์ผ๋ถ๋ ํด๋น ๊ธฐ๋ฅ์ด ์์ด์ผ ํ ๋ ์ ํจํ๊ณ ๋งค์ฐ ์ ์ฉํ ์ฌ์ฉ ์ฌ๋ก ํ๋๋ฅผ ๋ฌด์ํ๋ค๋ ์ ์ ์ ๋ง ์ค๋งํ์ต๋๋ค. . ํ์ฌ ๊ทธ ์๋๋ฆฌ์ค๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์คํ ๊ฐ๋ฅํ๊ณ ๊นจ๋ํ ์๋ฃจ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์ผํ ๋์ปค ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ๋ ๋ฒ์งธ ์ปจํ ์ด๋์์ SSH ์๋ฒ๋ฅผ ์คํํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ SSH ํฌํธ๋ฅผ ํธ์คํธ (๋ฌผ๋ก 22์ ๋ค๋ฅธ ํฌํธ๋ก)์ ๊ฒ์ ํ ์ ์์ผ๋ฏ๋ก SSH ์ปจํ ์ด๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ๋ฌํ ์ ์์ต๋๋ค.
@nartamonov ํ๋กํ ์ฝ ์์ฒด๊ฐ ์์ ํ์ง ์์ผ๋ฉด ์์ ์์ ์์ ํ๊ฒ ์ํ ํ ์์๋ ๋ฐฉ๋ฒ์ ์ ์ ์์ต๋๋ค.
์์ ํ๊ฒ ์ก์ธ์คํ๋ ๋ฐฉ๋ฒ์ ์ํธํ ๋ ๋ฐ์ดํฐ ํ๋ ์ธ (๊ณผ๋ํ ๋คํธ์ํฌ์ ๊ฒฝ์ฐ --opt encrypted
)์ ํตํด ํด๋น ๋คํธ์ํฌ์ ์ฐ๊ฒฐํด์ผํ๋ ๋๊ตฌ๋ก ์ปจํ
์ด๋๋ฅผ ๊ฐ๋ํ๋ ๊ฒ์
๋๋ค.
๋ค๋ฅธ ๊ด๋ จ์๋ ๋ถ์์ฉ์ด์์ ์ ์์ง๋ง "iptables": false
์์ /etc/docker/daemon.json
"iptables": false
๋ฅผ ์ค์ ํ๋ฉด ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก๋ ํธ๋ฆญ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ ๊ทน์ ์ธ ์๋ฃจ์
์
์ด๋ ์ชฝ์ด๋ 3 ๋ ํ์ ๋ ๋ง์ ์ง์์ ๋ฐ๊ณ ์ถ์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ด ๋์์ด ๋ ์ ์์ต๋๋ค (์ค์์ ๋ชจ๋ ๋ ธ๋์์ ์คํ๋์ด์ผ ํจ).
1. leave swarm 2. remove network docker_gwbridge 3. recreate network docker_gwbridge with additional option com.docker.network.bridge.host_binding_ipv4=IP 4. join swarm back Works for ports published in mode "host". Without mode "host" ingress network is used with other driver and scope "swarm".
์๋ ํ์ธ์.
๋ด๊ฐ ์ฐฉ๊ฐํ์ง ์์ผ๋ฉด ๊ฒ์ ๋ ๋ชจ๋ ํฌํธ๊ฐ ์ฃผ์ด์ง ๊ธฐ๋ณธIP
์ฃผ์์ ๋ฐ์ธ๋ฉ๋ฉ๋๊น? ๋น์ ์ ๋จ์ง ๋ช ๊ฐ์ง ์๋น์ค ์ค ์ผ๋ถ ํฌํธ์ ๋ฐ์ธ๋ฉ ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ฝ ์กฐ๊ฑด ์ถ๋ค๋ฉด์ด ๊ฐ๋ฅํ ํด๊ฒฐ๋์ง ์์ต๋๋ค, ๋ถ๋ช ํํฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์๋ณด๊ณ ํ๊ณ ์ถ์ต๋๋ค.
์ฌ์ฉ ์ฌ๋ก :
swarm์ ์ผ๋ถ ์๋น์ค๋ ๋ชจ๋ ์ธํฐํ์ด์ค ๋๋ ์ต์ํ ๊ณต์ฉ ์ธํฐํ์ด์ค์์ ์์ ํด์ผํฉ๋๋ค.์ด ์ปจํ
์ด๋๋ ์ญ๋ฐฉํฅ ํ๋ก์์
๋๋ค.
์ด๋ฌํ ์ค์ ๋
ธ๋์๋ ๋ชจ๋ ๋
ธ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๊ฐ ์์ผ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ด ์ ์ ๋ ์ค์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
docker network create --scope swarm NETWORK_NAME --attachable -d overlay
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ด ํ์ํ ์น ์๋น์ค๋ ๋ฌผ๋ก ํด๋น NETWORK_NAME
์ ์กฐ์ธ๋์ด์ผํฉ๋๋ค.
๊ด๋ฆฌ ๋ชฉ์ ์ผ๋ก ๋๋ก๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ฐ๊ฒฐํด์ผํฉ๋๋ค.
ํด๊ฒฐ์ฑ
:
๋ชจ๋ ๋คํธ์ํฌ์์ ๋
ธ์ถ๋์ด์ผํ๋ ์๋น์ค (์์์๋ ์ญ๋ฐฉํฅ ํ๋ก์) ports: ['SOMEPORT:ANOTHERPORT']
์๋น์ค ์ ์์
๋ค๋ฅธ ๋ชจ๋ ์๋น์ค๋ ํธ์คํธ์ ์์ ์ด๋ฃจ๋ docker non-swarm ์ปจํ
์ด๋๊ฐ ์์ด์ผํฉ๋๋ค.
์ค์์ด ์๋ ์ปจํ
์ด๋๋ NETWORK_NAME/nodeXYZ:port
์์๋ ํฌํธ๋ฅผ localhost
mongodb์ ์ :
docker run --rm -it --net=NETWORK_NAME -d --name expose-mongo -p 127.0.0.1:27017:47017 alpine/socat tcp-listen:47017,fork,reuseaddr tcp-connect:mongo01:27017
๋จ์ : ๋ชจ๋ ์ค์ ๋ ธ๋์ ๋ํด ์ค์์ด ์๋ ์ปจํ ์ด๋๊ฐ ์์ด์ผํ๋ฏ๋ก ๋ง์ ๋ ธ๋๊ฐ์๋ ๊ฒฝ์ฐ ansible / heavy ์คํฌ๋ฆฝํ ์ ์ฑํํ์ง ์๋ ํ ์ ๋ง ์ง๋ฃจํฉ๋๋ค.
@ fer2d2๊ฐ ์ธ๊ธ ํ "SSH ํฐ๋์ ํตํด ์ผ๋ถ ์๋น์ค์ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ"๋ฌธ์ ์ ๋ํ ๋ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ Dockerfile๊ณผ ํจ๊ป ssh ์๋น์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
FROM alpine
RUN apk add --no-cache openssh
RUN mkdir ~/.ssh
RUN ssh-keygen -A
RUN echo "root:root" | chpasswd
RUN echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
RUN echo 'Port 22' >> /etc/ssh/sshd_config
RUN echo -e " \
Match User root \n\
AllowTcpForwarding yes\n\
X11Forwarding no\n\
AllowAgentForwarding no\n\
ForceCommand /bin/false\n\
" >> /etc/ssh/sshd_config
EXPOSE 22
CMD /usr/sbin/sshd -D -e "$@"
๊ทธ๋ฐ ๋ค์ docker-compose.yml์์ :
...
db:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?err}
MYSQL_ROOT_HOST: '%'
volumes:
- "./mysql:/var/lib/mysql"
deploy:
placement:
constraints: [node.role == manager]
sshd:
image: maxisme/sshd:latest
volumes:
- "~/.ssh:/root/.ssh"
ports:
- "2223:22"
deploy:
placement:
constraints: [node.role == manager]
๋ด authorized_keys๋ฅผ ~/.ssh
ํด๋์ ์ถ๊ฐ ํ ๋ค์ db
ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ 2223
ํฌํธ๋ฅผ ํตํด ๋ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ssh ํ๋ก์ ์ ํ๋ฅผ ํ ์ ์์ต๋๋ค.
์คํ ๊ฐ๋ฅํ๊ณ ๊นจ๋ํ ์๋ฃจ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์ผํ ๋์ปค ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ๋ ๋ฒ์งธ ์ปจํ ์ด๋์์ SSH ์๋ฒ๋ฅผ ์คํํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ SSH ํฌํธ๋ฅผ ํธ์คํธ (๋ฌผ๋ก 22์ ๋ค๋ฅธ ํฌํธ๋ก)์ ๊ฒ์ ํ ์ ์์ผ๋ฏ๋ก SSH ์ปจํ ์ด๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ๋ฌํ ์ ์์ต๋๋ค.
์ ํจํ
์ด ๊ธฐ๋ฅ์ด ์ค์ํ ๋ ๋ค๋ฅธ ์์
๋๋ค.
plesk๊ฐ ์ค์น๋ ์๋ฒ๊ฐ ์๊ณ plesk์๋ ์ด๋ฏธ ๊ตฌ์ฑ์ด ์์ง๋ง docker swarm ์๋น์ค๋ฅผ ๊ฐ๋ฆฌ ํค๊ธฐ ์ํด ๋ค๋ฅธ ๊ตฌ์ฑ์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. ์ด plesk ์๋ฒ๋ ์ค์ ๋
ธ๋์
๋๋ค.
plesk๋ฅผ ์ฌ์ฉํ์ฌ ํฌํธ์ proxy_passํ๊ณ ์ถ์ต๋๋ค. ์ปจํ
์ด๋๊ฐ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ์์ง๋ง ์ธ๊ณ์ ํต์ ํ๋ ค๋ฉด ์ธ๋ถ ํฌํธ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์์ด ํฌํธ๋ฅผ ๊ฒ์ํด์ผํฉ๋๋ค.
๋ฐ๋ผ์ proxypass๋ 127.0.0.1๊ณผ ๊ฐ์ ๋ก์ปฌ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ฆฌ์ผ ์ผํฉ๋๋ค. someport
๋ผ์ ์ปจํ
์ด๋๋ ๋ก์ปฌ ํธ์คํธ์๋ง ํฌํธ๋ฅผ ๊ฒ์ํด์ผํฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ปจํ ์ด๋ ํฌํธ๋ ํ๋ก์ ํจ์ค๋ฅผ ํตํด์๋ง ์ก์ธ์ค ํ ์ ์์ผ๋ฉฐ ์ธ๊ณ์์ ์ง์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค.
@maxisme ํด๊ฒฐ ๋ฐฉ๋ฒ์ด authorized_keys
์์ ๊ถ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํฉ๋๊น? OS X์์ ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์๋ํ์ง๋ง (๋ง์ดํธ๋ root
์ํฉ๋๋ค) ํ๋ก๋์
Linux ์์คํ
์์๋ ๋ค์์ ์ป์ต๋๋ค.
Authentication refused: bad ownership or modes for file /root/.ssh/authorized_keys
Connection closed by authenticating user root 85.145.195.174 port 60535 [preauth]
๋ณผ๋ฅจ์ root
๊ฐ ์๋ ํธ์คํธ ์ฌ์ฉ์์ UID์ ์ํ๋ฉฐ SSHD๋ ์์
์ ๊ฑฐ๋ถํฉ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ ๐ฌ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด configs
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
services:
sshd:
image: [...]/sshd:${version}
configs:
# FIXME: It would be much better to use a bind volume for this, as it
# would always be in sync with the host configuration. So revoking a key
# in the host machine would automatically revoke it in the container. But
# I can't figure out how to give the volume right ownership. It keeps UID
# from the host which doesn't align with the container user.
- source: authorized_keys
target: /root/.ssh/authorized_keys
mode: 0600
configs:
authorized_keys:
file: ~/.ssh/authorized_keys
์ปจํ ์ด๋๊ฐ ๋ฐฐํฌ ๋ ํธ์คํธ๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ํน์ ํธ์คํธ IP ์ฃผ์์ ๋ฐ์ธ๋ฉํ๋๋ก ์๋น์ค์ ์ง์ ํ ์ ์๋ค๋ ์ฌ์ค์ ์ดํดํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ข ์ข ํธ์คํธ์๋ ๋ถ์ชฝ ๋ฐ ๋จ์ชฝ ๊ฒฝ๊ณ ์ธํฐํ์ด์ค๊ฐ ์์ต๋๋ค. ์ค์ ํฌํธ๊ฐ ๋ชจ๋ ์ค์ ํธ์คํธ์ ๋ ธ์ค ๋ฐ์ด๋ ์ธํฐํ์ด์ค์๋ง ๋ฐ์ธ๋ฉ๋๋๋ก ํ ์ ์์ต๋๋ค.
์๋น์ค๋ฅผ ๋ฐ์ธ๋ฉํ๋ ค๋ ๋ชจ๋ ์ธํฐํ์ด์ค์ ์ธํฐํ์ด์ค ์ด๋ฆ์ด ๋์ผํ ๊ฒฝ์ฐ (์ : eth0), swarm ํฌํธ๋ฅผ ๋ฐ์ธ๋ฉ ํ ์ธํฐํ์ด์ค ์ด๋ฆ์ ์ง์ ํ๋ ์ต์ ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์ต๋๋ค (์๋น์ค ํฌํธ ์น์ ์์).
nginx:
image: nvbeta/swarm_nginx
networks:
- demonet1
ports:
- "eth0:8088:80"
swarm ๋ ธ๋์์ eth0์ ์ฌ์ฉํ ์์๋ ๊ฒฝ์ฐ ์ง์ ๋ ํฌํธ๋ ์ด๋ค ์ธํฐํ์ด์ค์๋ ๋ฐ์ธ๋ฉ๋์ง ์์ต๋๋ค.
@ tad-lispy ์ปจํ
์ด๋ ์ฌ์ฉ์์ uid ๋ฐ gid๋ฅผ ํธ์คํธ์ ๋ณผ๋ฅจ ์์ ์์ ๋์ผํ๊ฒ ๋ณ๊ฒฝํ ์ ์์ด์ผํฉ๋๋ค.
linuxserver ์ด๋ฏธ์ง๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ์ฌ์ด๋ฅผ ์ง์ํฉ๋๋ค (https://hub.docker.com/r/linuxserver/openssh-server, User / Group Identifiers
).
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ฑฐ์ 2 ๋ ๋์ Docker ๊ฐ๋ฐ์ ์ค ์ผ๋ถ๋ ํด๋น ๊ธฐ๋ฅ์ด ์์ด์ผ ํ ๋ ์ ํจํ๊ณ ๋งค์ฐ ์ ์ฉํ ์ฌ์ฉ ์ฌ๋ก ํ๋๋ฅผ ๋ฌด์ํ๋ค๋ ์ ์ ์ ๋ง ์ค๋งํ์ต๋๋ค. . ํ์ฌ ๊ทธ ์๋๋ฆฌ์ค๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.