Moby: ๋„์ปค ์Šค์›œ ๋ชจ๋“œ : 127.0.0.1์˜ ํฌํŠธ๋Š” 0.0.0.0์— ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

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

๊ธฐ์ˆ 

docker swarm ๋ชจ๋“œ์—์„œ ํฌํŠธ๋ฅผ 127.0.0.1์— ๋ฐ”์ธ๋”ฉํ•˜๋ฉด ํฌํŠธ๊ฐ€ 0.0.0.0์—์„œ๋„ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ๋ฌธ์ œ ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฌธ์„œ์—์„œ ์„ค๋ช…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ์žฌํ˜„ ๋‹จ๊ณ„ :

  1. docker-compose.swarm.yml ํŒŒ์ผ์—์„œ ์„œ๋น„์Šค (์˜ˆ : MongoDB)๋ฅผ ๋งŒ๋“ค๊ณ  ํฌํŠธ 27017์„ localhost์— ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค.
  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]
  1. ๋–ผ ๋ฐฐ์น˜
  2. netcat์œผ๋กœ ๋–ผ ์™ธ๋ถ€์—์„œ ํฌํŠธ๊ฐ€ ์—ด๋ ค ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.

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์˜ ๋ฌผ๋ฐฉ์šธ์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

areswarm kinbug

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

๊ฑฐ์˜ 2 ๋…„ ๋™์•ˆ Docker ๊ฐœ๋ฐœ์ž ์ค‘ ์ผ๋ถ€๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•  ๋•Œ ์œ ํšจํ•˜๊ณ  ๋งค์šฐ ์œ ์šฉํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ํ•˜๋‚˜๋ฅผ ๋ฌด์‹œํ•œ๋‹ค๋Š” ์ ์— ์ •๋ง ์‹ค๋งํ–ˆ์Šต๋‹ˆ๋‹ค. . ํ˜„์žฌ ๊ทธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

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

์˜ˆ, ๊ทธ๋Ÿฌ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค (๊ธฐ๋ณธ์ ์œผ๋กœ)๋Š” "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 ์ฃผ์†Œ๋ฅผ ์กฐ์šฉํžˆ ๋ฌด์‹œํ•˜๊ณ  ์ˆ˜์‹  ๋ชจ๋“œ๋ฅผ ์กฐ์šฉํžˆ ์‚ฌ์šฉํ•˜๋ฉฐ ๋‚ด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค.)

์‚ฌ์šฉ ์‚ฌ๋ก€

  • ๋‚˜์—๊ฒŒ ์˜ํ–ฅ์„ ์ค€ ์‚ฌ์šฉ ์‚ฌ๋ก€ (ํ™•์‹คํžˆ ์‹ค์ œ)

    • 1 ํฌํŠธ๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉ ์ค‘์ด๋ฏ€๋กœ ํŠน์ • ๋…ธ๋“œ์˜ ํฌํŠธ์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ˜ธ์ŠคํŠธ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ๊ฐ’์€ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

    • 2 ๋‹ค๋ฅธ ๋…ธ๋“œ์—๋Š” ๊ณต์šฉ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ํŠน์ • ๋…ธ๋“œ์˜ ํฌํŠธ์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ˜ธ์ŠคํŠธ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ๊ฐ’์€ "๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ"์œ„๋ฐ˜์ž…๋‹ˆ๋‹ค .

    • 3 ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ "๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ"์„ ์œ„๋ฐ˜ ํ•˜๋ฏ€๋กœ ๋กœ์ปฌ๋กœ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

    • 4 ๊ฐœ๋ฐœ ๋จธ์‹ ์— ๋งŽ์€ ํ•ญ๋ชฉ์ด ์žˆ๊ณ ์ด ํฌํŠธ์—์„œ 127.0.0.1์ด ์‚ฌ์šฉ ์ค‘์ด๋ฏ€๋กœ 127.0.0.3์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  /etc/hosts ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋„๋ฉ”์ธ ์ด๋ฆ„์ด ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „์†ก๋˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. docker run ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ compose์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๊ธฐํƒ€ ์‚ฌ์šฉ ์‚ฌ๋ก€

    • ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์ด๋ฏ€๋กœ ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค (์˜ˆ : 192.168.0.x)์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ "๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ"์œ„๋ฐ˜์ž…๋‹ˆ๋‹ค.

    • ํŠน์ • ํŠน์ • ๋…ธ๋“œ์— ๋ฐ”์ธ๋”ฉํ•˜๋˜์ด ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋„๋ก ์„œ๋น„์Šค๋ฅผ ์ œํ•œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 1 ๋˜๋Š” 2์™€ ์œ ์‚ฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ด์ง€๋งŒ ์ œ์•ฝ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠธ๋ž˜ํ”ฝ์€ ๋–ผ๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด

  • IP ์ฃผ์†Œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  0.0.0.0์— ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ธฐ๋ณธ ์ˆ˜์‹  ๋ชจ๋“œ๋Š” ๋ชจ๋‘ "๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ"์„ ์œ„๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. IP-Address๊ฐ€ ์ง€์ •๋˜๊ณ  ๋ฌธ์„œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ (๊ธฐ๋ณธ๊ฐ’ ์—†์Œ) ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋ฌธ์„œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. (์ด๊ฒƒ์€ ๋ชจ๋“œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค.)
  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ˜ธ์ŠคํŠธ ๋ชจ๋“œ์—์„œ IP ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ˆ˜์‹  ๋ชจ๋“œ์—์„œ ๋กœ์ปฌ ์ฃผ์†Œ 127.xxx๋กœ ์ œํ•œ๋˜๋Š” IP ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‹ค๋ฅธ ๋กœ์ปฌ ์ฃผ์†Œ, ์˜ˆ๋ฅผ ๋“ค์–ด 127.0.0.2 ๋ฐ 127.0.0.3์€ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (๋‹จ์ง€ OS๋กœ ์ „๋‹ฌ๋จ)).

๋กœ์ปฌ ์ฃผ์†Œ์— ๋ฐ”์ธ๋”ฉ ํ—ˆ์šฉ์€ ์ œํ•œ๋œ ๋…ธ๋“œ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ฃผ์†Œ์— ๋ฐ”์ธ๋”ฉ ํ—ˆ์šฉ, ์ œํ•œ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ๋–ผ๋ฅผ ํ†ตํ•ด ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜์˜ ์ฃผ์†Œ ์ค‘ ํ•˜๋‚˜๋กœ ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค (์ˆ˜์‹  ๋ชจ๋“œ ๋งŒ ๊ฐ€๋Šฅ). ์ด ๋ผ์šฐํŒ…์€ ์ด๋ฏธ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@ 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๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์ด ๋ฌธ์ œ๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์Šค์›œ์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•จ).

  1. ๋ฌด๋ฆฌ๋ฅผ ๋– ๋‚˜๋‹ค
  2. ๋„คํŠธ์›Œํฌ docker_gwbridge ์ œ๊ฑฐ
  3. ์ถ”๊ฐ€ ์˜ต์…˜ com.docker.network.bridge.host_binding_ipv4 = IP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ docker_gwbridge๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  4. ๋‹ค์‹œ ๋ฌด๋ฆฌ์— ํ•ฉ๋ฅ˜
    "ํ˜ธ์ŠคํŠธ"๋ชจ๋“œ๋กœ ๊ฒŒ์‹œ ๋œ ํฌํŠธ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“œ์—†์ด "ํ˜ธ์ŠคํŠธ"์ˆ˜์‹  ๋„คํŠธ์›Œํฌ๋Š” ๋‹ค๋ฅธ ๋“œ๋ผ์ด๋ฒ„ ๋ฐ ๋ฒ”์œ„ "swarm"๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋”์ฐํ•œ ํ•ด๊ฒฐ์ฑ… :

$ 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 ).

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰