๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
DevOps
Docker
07-network

1. nginx ๋งŒ๋“ค๊ธฐ

์‹ค์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๊ฐ๊ฐ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค ๊ฐ„์— ํ†ต์‹ ์€ ์–ด๋–ป๊ฒŒ ํ•˜๊ฒŒ์š”? ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ ๊ฒƒ์ธ๋ฐ, ๊ทธ๋ƒฅ ํ•˜๋ฉด ์žฌ๋ฏธ์—†์œผ๋‹ˆ nginx๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋จผ์ € ๋งŒ๋“ค์–ด์„œ ๋Œ๋ ค๋ด…์‹œ๋‹ค.


1.1 nginx

์›น์„œ๋ฒ„์™€ ํ•จ๊ป˜ ๋Œ๋ฆฌ๋ฉด ๋งค์šฐ ์ข‹์€ ํ”„๋กœ๊ทธ๋žจ์ด ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. reverse proxy๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ค‘๊ฐ„์— ๊ฐ€๋กœ์ฑ„์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

docker_7-1

โ–ฒ ๊ทธ๊ฑธ ์“ฐ๋ฉด ์œ ์ €๋“ค์ด ์„œ๋ฒ„๋กœ ์ง์ ‘ ๋“ค์–ด์˜ค๊ฒŒ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋จผ์ € ๋“ค์–ด์˜ค๊ฒŒ ํ•˜๊ณ , ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๊ฐ€ ์œ ์ €๋ฅผ ๋‹ค์‹œ ์„œ๋ฒ„๋กœ ์•ˆ๋‚ดํ•˜๋Š” ์‹์œผ๋กœ ๋งŒ๋“ค์–ด๋†“์Šต๋‹ˆ๋‹ค.

์™œ ๊ทธ๋”ฐ๊ตฌ๋กœ ๋น„ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋„์›Œ๋†“๋ƒ๋ฉด,

  • ์„œ๋ฒ„์˜ ์ •์ฒด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ˆจ๊ธฐ๊ธฐ ๊ฐ€๋Šฅ
  • HTTPS ์ธ์ฆ์„œ ์„ค์น˜ ์‰ฌ์›€
  • ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ฉด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ฐ€๋Šฅ
  • ๋ˆ„๊ฐ€ ์ ‘์†ํ–ˆ๋Š”์ง€ ๋กœ๊ทธ๋„ ๋‚จ๊ธฐ๊ธฐ ์‰ฌ์›€
  • IP ์ฐจ๋‹จ ์‰ฝ๊ฒŒ๊ฐ€๋Šฅ

๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. nginx ์•„๋‹ˆ๋ฉด caddy ์ด๋Ÿฐ๊ฒŒ ์œ ๋ช…ํ•œ๋ฐ, ์šฐ๋ฆฌ๋Š” nginx๋ผ๋Š” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ํ”„๋กœ๊ทธ๋žจ์„ ์จ๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.

์ด๊ฒƒ๋„ ์ด๋ฏธ์ง€ ๋งŒ๋“ค์–ด์„œ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•ด๋ณผ ๊ฒƒ์ธ๋ฐ, ๊ทธ๋Ÿด๋ ค๋ฉด nginx๋ฅผ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ์„ค์น˜ํ•˜๊ณ  ์…‹ํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์•„๋Š”๊ฒŒ ์ข‹๊ฒŸ์ฃ ? ๊ทธ๋ž˜์•ผ Dockerfile์„ ์ž‘์„ฑํ•˜๋“  ํ•  ๊ฒƒ ์•„๋‹™๋‹ˆ๊นŒ

์—ฌ๋Ÿฌ๋ถ„๋“ค ์ปดํ“จํ„ฐ์—์„œ nginx ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ ค๋ฉด,

  1. ์ปดํ“จํ„ฐ์— nginx ์„ค์น˜
  2. ๋™์ž‘๋ฐฉ์‹์„ .conf ํŒŒ์ผ์— ๋ง˜๋Œ€๋กœ ์ž‘์„ฑํ•ด์„œ ์„ค์น˜ํด๋”์— ์ง‘์–ด๋„ฃ์–ด๋‘๊ณ 
  3. ํ„ฐ๋ฏธ๋„์— nginx -g daemon off; ์ž…๋ ฅํ•ด๋‘๋ฉด nginx๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์šฐ์„  .conf ํŒŒ์ผ์€ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•˜๋Š”์ง€ ๋ง›์„ ๋จผ์ € ๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.


1.2 .conf ํŒŒ์ผ ์‚ฌ์šฉ๋ฒ•

1
server {
2
listen 80;
3
location / {
4
proxy_pass http://localhost:8080;
5
proxy_set_header Host $host;
6
proxy_set_header X-Real-IP $remote_addr;
7
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
8
proxy_set_header X-Forwarded-Proto $scheme;
9
}
10
}

๊ธฐ์กด docker ํด๋”์— nginx ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  myconfig1.conf ํŒŒ์ผ์„ ์•ˆ์— ๋งŒ๋“ค๊ณ , ์œ„์— ์žˆ๋Š” ๋Œ€์ถฉ ๊ธฐ๋ณธ์ ์ธ ์„ค์ •๋“ค์„ ๋ณต๋ถ™ํ•ด๋ด…์‹œ๋‹ค.

  • listen 80์€ ๋ˆ„๊ฐ€ 80๋ฒˆ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋ฉด ๋ฐ‘์— ์žˆ๋Š” ๋‚ด์šฉ์„ ์‹คํ–‰ํ•˜๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
  • location / { } ๋ถ€๋ถ„์€ ๋ˆ„๊ฐ€ /๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ค๋ฉด, localhost:8080์œผ๋กœ ๋ณด๋‚ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
  • proxy_set_header ๋ถ€๋ถ„์€ header๋ผ๋Š” ๋ถ€๋ถ„์— IP ์ฃผ์†Œ ๋“ฑ ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ์ฑ„์šฐ๋ผ๋Š” ๋œป์ธ๋ฐ ์‹ฌ์‹ฌํ•ด์„œ ๋„ฃ์–ด๋ดค์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ์„ค์ •ํŒŒ์ผ์„ ํŠน์ • ํด๋”์— ๋„ฃ์–ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋ˆ…์Šค์— nginx๋ฅผ ์„ค์น˜ํ–ˆ์œผ๋ฉด /etc/nginx/conf.d/ ํด๋”์— ๋„ฃ์–ด์ฃผ๋ฉด, nginx๊ฐ€ ์•Œ์•„์„œ .conf ํŒŒ์ผ์„ ๊ฐ€์ ธ๊ฐ€์„œ ์‚ฌ์šฉํ•ด์ค๋‹ˆ๋‹ค.

docker_7-2

์ •ํ™•ํžˆ ๋งํ•˜๋ฉด /etc/nginx/conf.d/์–ด์ฉŒ๊ตฌ.conf ํŒŒ์ผ์€ nginx.conf๋ผ๋Š” ๊ธฐ๋ณธ ์„ค์ •ํŒŒ์ผ์˜ http { } ์•ˆ์— ์ž๋™์œผ๋กœ ๋„ฃ์–ด์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ทผ๋ฐ ์‚ฌ์†Œํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๊ฒŒ /etc/nginx/conf.d/default.conf์ด๋ผ๋Š” ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, ๊ทธ๊ฒŒ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์ž‘์„ฑํ•œ ์„ค์ •๋ณด๋‹ค ๋จผ์ € ์ ์šฉ๋  ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ธฐ๋ณธ์„ค์ •์€ ์“ธ๋ฐ์—†์œผ๋‹ˆ๊นŒ ๊ทธ ํŒŒ์ผ์€ ์‚ญ์ œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ฎ์–ด์จ๋„ ๋˜๊ณ  ์‚ญ์ œํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.


1.3 ์ด๋ฏธ์ง€ ๋นŒ๋“œํ•˜๊ธฐ

๊ทธ๋ž˜์„œ dockerfile ์ด์šฉํ•ด์„œ nginx ์ด๋ฏธ์ง€๋ฅผ ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค. nginx ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”๊ฑฐ ๊ทธ๋Œ€๋กœ Dockerfile์— ์จ๋†“๊ณ  ๋นŒ๋“œํ•˜๋ฉด ๋˜๊ฒ ๊ตฐ์š”. nginx ํด๋”์—๋‹ค๊ฐ€ Dockerfile ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

1
FROM nginx:latest
2
3
COPY ./myconfig1.conf /etc/nginx/conf.d/myconfig1.conf
4
RUN rm /etc/nginx/conf.d/default.conf
5
6
EXPOSE 80
7
CMD ["nginx", "-g", "daemon off;"]
  • nginx ์„ค์น˜ํ•˜๊ณ 
  • /nginx/myconfig1.conf ๊ฒฝ๋กœ์— ๋งŒ๋“ค์–ด๋‘” ์„ค์ •ํŒŒ์ผ ๋ณต๋ถ™ํ•˜๊ณ ,
  • ๊ธฐ๋ณธ์„ค์ •ํŒŒ์ผ์€ ์‚ญ์ œํ•˜๊ณ 
  • nginx ์‹คํ–‰ํ•˜๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
1
# docker build -t ์ด๋ฏธ์ง€๋ช…:ํƒœ๊ทธ๋ช… ํ˜„์žฌ๊ฒฝ๋กœ
2
$ docker build -t nginx:1 ./nginx

ํ„ฐ๋ฏธ๋„์—์„œ nginx๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ๋„ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

docker_7-3

โ–ฒ ์ด๋ฏธ์ง€ ์‹คํ–‰๋„ ํ•ด๋ด…์‹œ๋‹ค. ๋ˆ„๊ฐ€ ๋‚ด ์ปดํ“จํ„ฐ 80๋ฒˆ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋ฉด ์ด ์ปจํ…Œ์ด๋„ˆ 80๋ฒˆ ํฌํŠธ๋กœ ์•ˆ๋‚ดํ•˜๋ผ๊ณ  ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ localhost:80์œผ๋กœ ์ ‘์†ํ•ด๋ณด๋ฉด ๋ญ”๊ฐ€ ์ด์ƒํ•œ๊ฒŒ ๋‚˜์˜ฌํ…๋ฐ ๊ทธ๋Ÿผ ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

nginx ์„ค์ •์—๋‹ค๊ฐ€ ๋ˆ„๊ฐ€ 80๋ฒˆํฌํŠธ๋กœ ์ ‘์†ํ•˜๋ฉด localhost:8080์œผ๋กœ ์•ˆ๋‚ดํ•˜๋ผ๊ณ  ์ฝ”๋“œ์งœ๋†จ์œผ๋‹ˆ๊นŒ, ๊ทธ๋Ÿผ ์ด์ œ localhost:8080์— ์›น์„œ๋ฒ„๋ฅผ ๋„์›Œ๋†“์œผ๋ฉด, ์˜๋„๋Œ€๋กœ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ์ฒ˜๋Ÿผ ์ž˜ ๋™์ž‘ํ•˜์ง€ ์•Š์„๊นŒ์š”?

docker_7-4

โ–ฒ ๊ทธ๋ž˜์„œ ์ „์— ๋งŒ๋“  ์›น์„œ๋ฒ„๋„ 8080ํฌํŠธ์— ์ปจํ…Œ์ด๋„ˆ๋กœ ๋„์›Œ๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด๋ก ์ƒ localhost:80 ์ ‘์†ํ•˜๋ฉด localhost:8080์— ์žˆ๋Š” ์„œ๋ฒ„๊ฐ€ ๋– ์•ผํ•˜๋Š”๋ฐ, ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋œจ๋Š”๋ฐ์š”?

docker_7-5

โ–ฒ ๊ทธ ์ด์œ ๋Š” ๊ทธ๋ฆผ์œผ๋กœ ๋ณด์‹œ๋ฉด ์ง€๊ธˆ ๊ฐ€์ƒ์ปดํ“จํ„ฐ 2๋Œ€๋ฅผ ๋„์›Œ๋†จ๊ณ , ๋‚ด ์ปดํ“จํ„ฐ์˜ ํฌํŠธ๋„ ๊ฑฐ๊ธฐ์— ๊ฐ๊ฐ ์—ฐ๊ฒฐํ•ด๋’€์Šต๋‹ˆ๋‹ค. ์™ผ์ชฝ nginx ๊ฐ€์ƒ์ปดํ“จํ„ฐ์—๋Š” โ€œ๋ˆ„๊ฐ€ 80๋ฒˆ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋ฉด 8080ํฌํŠธ๋กœ ๋ณด๋‚ด๊ธฐโ€ ๋ผ๊ณ  ์ฝ”๋“œ๋ฅผ ์งœ๋†จ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์™ผ์ชฝ nginx ๊ฐ€์ƒ์ปดํ“จํ„ฐ์—๋Š” 8080ํฌํŠธ์—์„œ ๋™์ž‘์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด ์—†๋Š”๋ฐ์š”? ๊ทธ๋ž˜์„œ ๋‚ด ์ปดํ“จํ„ฐ 80๋ฒˆ ํฌํŠธ์ธ localhost:80์œผ๋กœ ๋“ค์–ด๊ฐ€๋„, ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋‚˜์˜ค๊ณ  ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก Q. ์˜ค๋ฅธ์ชฝ ๊ฐ€์ƒ์ปดํ“จํ„ฐ์— 8080ํฌํŠธ์— ์›น์„œ๋ฒ„ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋Š”๋ฐ์š”?

  • ๊ทธ๊ฑด nginx์™€ ์ƒ๊ด€์—†๋Š” ๋‹ค๋ฅธ ๋ณ„๋„์˜ ์ปดํ“จํ„ฐ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ โ€œ80๋ฒˆ ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋ฉด ์˜†์— ์žˆ๋Š” ๊ฐ€์ƒ ์ปดํ“จํ„ฐ์˜ 8080๋ฒˆ ํฌํŠธ๋กœ ๋ณด๋‚ด๊ธฐโ€ ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด ์ž˜ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋‹ค๋ฅธ ๊ฐ€์ƒ์ปดํ“จํ„ฐ๋กœ ์ ‘์†ํ•˜๋Š” ๋ฒ•์„ ์•Œ๋ฉด ๋˜๊ฒ ๋„ค์š”.


1.4 ๋‹ค๋ฅธ ๊ฐ€์ƒ์ปดํ“จํ„ฐ๋กœ ์ ‘์†ํ•˜๋ ค๋ฉด

์–ด๋–ค ๊ฐ€์ƒ์ปดํ“จํ„ฐ์—์„œ ๋‹ค๋ฅธ ๊ฐ€์ƒ์ปดํ“จํ„ฐ๋กœ ์ ‘์†ํ•˜๋ ค๋ฉด ์ด๋Ÿฐ ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ปดํ“จํ„ฐ๋ž‘ ๊ฐ€์ƒ์ปดํ“จํ„ฐ๋ž‘ ํฌํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์—,

docker_7-6

โ–ฒ โ€œ๋ˆ„๊ฐ€ 80๋ฒˆ ํฌํŠธ๋กœ ์ ‘์†ํ•˜๋ฉด ๋‹ค์‹œ ์˜ฌ๋ผ๊ฐ€์„œ ๋‚ด ์ปดํ“จํ„ฐ์˜ 8080๋ฒˆ ํฌํŠธ๋กœ ๋“ค์–ด๊ฐ€๋ผโ€ ์ด๋ ‡๊ฒŒ ์—ญ๋ฅ˜ํ•˜๋Š” ์‹์œผ๋กœ ์งœ๋„ ๋˜๊ธด ํ•ฉ๋‹ˆ๋‹ค.

docker_7-7

โ–ฒ ๊ทผ๋ฐ ์ด๊ฒƒ๋ณด๋‹ค ๋” ์•ˆ์ „ํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด network๋ผ๋Š”๊ฑธ ๋งŒ๋“ค์–ด์„œ ๊ทธ ์•ˆ์— ๊ฐ€์ƒ ์ปดํ“จํ„ฐ๋ฅผ ๋‹ด์•„๋†“์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ network ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ€์ƒ ์ปดํ“จํ„ฐ๋“ค์€ ์„œ๋กœ ์‰ฝ๊ฒŒ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. ์™œ๋ƒ๋ฉด network ์•ˆ์— ์ง‘์–ด๋„ฃ์œผ๋ฉด ๊ฐ€์ƒ IP์ฃผ์†Œ๋ฅผ ๋ถ€์—ฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€์ƒIP์ฃผ์†Œ:8080 ์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐ€์ƒ์ปดํ“จํ„ฐ์— ์ ‘์† ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


2. ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ 

์ปจํ…Œ์ด๋„ˆ๋“ค์€ ๊ฐ๊ฐ์˜ ๋…๋ฆฝ์ ์ธ ์ปดํ“จํ„ฐ๊ธฐ ๋•Œ๋ฌธ์— ์›๋ž˜ ์„œ๋กœ ๋งŒ๋‚˜๊ณ  ๊ทธ๋Ÿด ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ทธ ์•ˆ์— ์ง‘์–ด๋„ฃ์œผ๋ฉด ์„œ๋กœ ๋งŒ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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


2.1 ๋„คํŠธ์›Œํฌ ๋งŒ๋“ค๊ธฐ

1
# docker network create ๋„คํŠธ์›Œํฌ์ด๋ฆ„์ž‘๋ช…
2
$ docker network create mynet1

ํ„ฐ๋ฏธ๋„์—์„œ ์ด๋Ÿฐ๊ฑธ ์ž…๋ ฅํ•˜๋ฉด ๋„คํŠธ์›Œํฌ๋ฅผ ํ•˜๋‚˜ ๊ฐ€์ƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” mynet1์ด๋ผ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ค์–ด๋ดค์Œ

1
docker network ls

๋งŒ๋“ค์–ด๋‘” ๋„คํŠธ์›Œํฌ ๋ชฉ๋ก ์กฐํšŒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„คํŠธ์›Œํฌ์— ๋„ฃ์œผ๋ ค๋ฉด,

  • ์ด๋ฏธ ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„คํŠธ์›Œํฌ์— ์ง‘์–ด๋„ฃ์„ ์ˆ˜๋„ ์žˆ๊ณ ,
  • ์•„๋‹ˆ๋ฉด ์• ์ดˆ์— ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•  ๋•Œ ๋„คํŠธ์›Œํฌ์— ๋„ฃ์œผ๋ผ๊ณ  ์ฝ”๋“œ์งค ์ˆ˜๋„ ์žˆ๋Š”๋ฐ,

ํ›„์ž๋กœ ํ•ด๋ด…์‹œ๋‹ค. ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋„๊ณ , ํ„ฐ๋ฏธ๋„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์›Œ๋ด…์‹œ๋‹ค.

1
docker run -d -p 80:80 --network mynet1 --name nginx-container nginx:1
2
docker run -d -p 8080:8080 --network mynet1 --name nodeserver-container nodeserver:1

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•  ๋•Œ โ€œ๋„คํŠธ์›Œํฌ ์•ˆ์— ๋‹ด์•„์ฃผ์„ธ์š”โ€ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด,

  • --network ๋„คํŠธ์›Œํฌ์ด๋ฆ„ ์ด์šฉํ•˜๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • --name ์ปจํ…Œ์ด๋„ˆ์ด๋ฆ„ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„๋„ ๋ง˜๋Œ€๋กœ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„๋„ ์ด๋ฒˆ ๊ธฐํšŒ์— ํ•œ๋ฒˆ ์ง€์–ด๋ด…์‹œ๋‹ค. ๊ทธ๋Ÿผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข‹์•„ํ•˜์ง€ ์•Š์„๊นŒ์š”.

docker_7-8

โ–ฒ Docker desktop์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ธ๋‚ด์šฉ์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, Inspect ๋ฉ”๋‰ด ๋“ค์–ด๊ฐ€๋ณด๋ฉด ์ง€๊ธˆ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์–ด๋–ค ๋„คํŠธ์›Œํฌ์— ์†ํ•ด์žˆ๋Š” ์ง€๋„ ๊ฒ€์‚ฌํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด mynet1 ์ด๋ผ๋Š” ๋„คํŠธ์›Œํฌ์— ์†ํ•ด์žˆ๊ณ , ๊ฐ€์ƒ IP์ฃผ์†Œ๋„ 172.18.0.2๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ๊ตฐ์š”. ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์•ˆ์— ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋“ค์€ 172.18.0.2๋กœ ์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


2.2 ํ†ต์‹ ํ•˜๊ธฐ

์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ ํ†ต์‹ ์ด ์ง„์งœ ๋˜๋‚˜ ํ™•์ธํ•˜๋ ค๋ฉด, ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋“ค์–ด๊ฐ€์„œ ๊ฑฐ๊ธฐ๋‹ค๊ฐ€ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ถˆ๋Ÿฌ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

1
docker exec -it ์ปจํ…Œ์ด๋„ˆ์ด๋ฆ„ /bin/sh

ํ„ฐ๋ฏธ๋„์—์„œ ์ด๋Ÿฐ๊ฑฐ ์ž…๋ ฅํ•˜๋ฉด ๊ทธ ์ปจํ…Œ์ด๋„ˆ์˜ ํ„ฐ๋ฏธ๋„๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜น์€ Docker desktop์—์„œ Container - Exec ๋ฉ”๋‰ด ๋“ค์–ด๊ฐ€๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” nginx ์ปจํ…Œ์ด๋„ˆ ํ„ฐ๋ฏธ๋„๋กœ ๋“ค์–ด๊ฐ€๋ดค์Šต๋‹ˆ๋‹ค.

1
# curl ์›น์„œ๋ฒ„์ปจํ…Œ์ด๋„ˆIP
2
$ curl 172.18.0.3:8080

nginx ์ปจํ…Œ์ด๋„ˆ ํ„ฐ๋ฏธ๋„์—์„œ ์œ„์ฒ˜๋Ÿผ ์ž…๋ ฅํ•ด๋ด…์‹œ๋‹ค. curl์ด ๋ญ๋ƒ๋ฉด ๊ทธ๋ƒฅ ํŠน์ • ๋„๋ฉ”์ธ์ด๋‚˜ IP ์ฃผ์†Œ๋กœ ์ ‘์†ํ•  ๋•Œ ์“ฐ๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ญ”๊ฐ€ ๋œจ์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋ฉด ํ†ต์‹ ๋œ๋‹ค๋Š” ์†Œ๋ฆฌ์ž…๋‹ˆ๋‹ค.

1
# curl ์ปจํ…Œ์ด๋„ˆ์ด๋ฆ„
2
curl nodeserver-container:8080
3
4
# curl ์ปจํ…Œ์ด๋„ˆ์ด๋ฆ„.๋„คํŠธ์›Œํฌ์ด๋ฆ„
5
curl nodeserver-container.mynet1:8080

์‹ค์€ IP์ฃผ์†Œ ๋ง๊ณ  curl ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด๋„ ์•„๋งˆ ์ž˜๋  ๊ฒ๋‹ˆ๋‹ค.

  • ์™œ๋ƒ๋ฉด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋ฉด,
    • ๊ทธ๊ฑธ ์ž๋™์œผ๋กœ IP์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” DNS๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ๋” ์ •ํ™•ํžˆ ํ•˜๋ ค๋ฉด curl ์ปจํ…Œ์ด๋„ˆ์ด๋ฆ„.๋„คํŠธ์›Œํฌ์ด๋ฆ„ ์ด๋ ‡๊ฒŒ ์จ๋„ ๋ฉ๋‹ˆ๋‹ค.

2.3 ๋‹ค์‹œ nginx์™€ ์›น์„œ๋ฒ„ ์—ฐ๋™

์•„๋ฌดํŠผ ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ nginx์—์„œ ์›น์„œ๋ฒ„๋กœ ํ†ต์‹ ์ด ๋˜๋„๋ก ๊ณ ์ณ๋ด…์‹œ๋‹ค. ์ด์ œ nginx ๋“ค์–ด์˜ค๋ฉด ์›น์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ณด๋‚ด๋ผ๊ณ  ์ฝ”๋“œ์งœ๋ ค๋ฉด,

1
// myconfig1.conf
2
server {
3
listen 80;
4
5
location / {
6
// proxy_pass http://nodeserver-container:8080;
7
proxy_pass http://์›น์„œ๋ฒ„์ปจํ…Œ์ด๋„ˆIP:8080;
8
// ์ƒ๋žต
9
}
10
}

์ด์ œ ์ด๋ ‡๊ฒŒ ๋ฐ”๊พธ๋ฉด ๋˜๊ฒ ๋„ค์š”. ํ˜น์€ IP ๋Œ€์‹  ์›น์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„๋งŒ ๋„ฃ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค.

1
docker build -t nginx:1 ./nginx
2
3
# ๊ธฐ์กด์— ๋„์›Œ๋†จ๋˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ๋ชจ๋‘ ์‚ญ์ œ
4
# ์‹คํ–‰ ์ˆœ์„œ๋„ ์ค‘์š”ํ•จ. ์›น์„œ๋ฒ„๊ฐ€ ์‹คํ–‰์ค‘์ด์–ด์•ผ nginx๋„ ์ž˜ ๋Œ์•„๊ฐ
5
docker run -d -p 8080:8080 --network mynet1 --name nodeserver-container nodeserver:1
6
docker run -d -p 80:80 --network mynet1 --name nginx-container nginx:1

์ง„์งœ ์ž˜ ๋˜๋Š”์ง€ ์ด๋ฏธ์ง€ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰๋„ ํ•ด๋ณด๊ณ  nginx์ฃผ์†Œ๋กœ ์ ‘์†ํ•ด๋ด…์‹œ๋‹ค. ๊ทธ๋Ÿผ ์›น์„œ๋ฒ„๊ฐ€ ์ž˜ ๋œจ๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก ์›น์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ์—๋Š” nginx์—์„œ ์ ‘์†ํ•˜๋ฉด ๋์ด๋ผ

  • ๋‚ด ์ปดํ“จํ„ฐ์ธ ํ˜ธ์ŠคํŠธ์™€ ํฌํŠธ ์—ฐ๊ฒฐ์ž‘์—…์ด ํ•„์š”์—†์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์›น์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ ๋„์šธ ๋•Œ๋Š” -p ์˜ต์…˜์€ ๋นผ๋„ ๋˜์ง€ ์•Š์„๊นŒ์š”.
1
docker run -d --network mynet1 --name nodeserver-container nodeserver:1

2.4 bridge๋ชจ๋“œ, host ๋ชจ๋“œ

1
$ docker network ls
2
NETWORK ID NAME DRIVER SCOPE
3
193b7ea62884 bridge bridge local
4
89c055b40257 host host local
5
66d1a3ee6f78 mynet1 bridge local
6
fb5fdb1bddd2 none null local

๊ธฐ๋ณธ์ ์œผ๋กœ network๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๋ฉด bridge ๋ชจ๋“œ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ๊ทธ๊ฑฐ ๋ง๊ณ  host ๋ชจ๋“œ๋กœ๋„ ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ฉด ๊ฐ€์ƒ์ปดํ“จํ„ฐ๋“ค์ด ๋‚ด ์‹ค์ œ ์ปดํ“จํ„ฐ์—์„œ ๋Œ์•„๊ฐ€๋Š” ํ”„๋กœ๊ทธ๋žจ์ฒ˜๋Ÿผ ๋„คํŠธ์›Œํฌ ์ž์›์„ ๋งˆ๊ตฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์˜ค๋Š˜์˜ ๊ฒฐ๋ก ์€

  1. nginx ๊ฐ™์€ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์“ฐ๋ฉด ์›น์„œ๋ฒ„ ์šด์˜ํ•  ๋•Œ ๋„์›€๋จ
  2. ๋„คํŠธ์›Œํฌ ์•ˆ์— ์ปจํ…Œ์ด๋„ˆ ๋„ฃ์œผ๋ฉด ์„œ๋กœ ์‰ฝ๊ฒŒ ํ†ต์‹ ๊ฐ€๋Šฅ