2 ๋ถ„ ์†Œ์š”

HTTP Status Code? ๐Ÿ’ฏ

Docker : Go์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋ฆฌ๋ˆ…์Šค ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์ด๋‹ค.

๊ฐ€์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

์ด์ œ๋Š” ํ–ฅ์ƒ๋œ ์ปดํ“จํ„ฐ์˜ ์„ฑ๋Šฅ์„ ๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์ด ๋งŽ์ด ๋“ฑ์žฅํ–ˆ๋‹ค. ์„œ๋ฒ„ ๊ด€๋ฆฌ์ž ์ž…์žฅ์—์„œ CPU์‚ฌ์šฉ๋ฅ ์ด 10%๋Œ€ ๋ฐ–์— ๋˜์ง€ ์•Š๋Š” ํ™œ์šฉ๋„๊ฐ€ ๋‚ฎ์€ ์„œ๋ฒ„๋“ค์˜ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ํ•œ ์„œ๋ฒ„์•ˆ์— ์˜ฌ๋ฆฐ๋‹ค๋ฉด ์•ˆ์ •์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋ฉฐ ๋ฆฌ์†Œ์Šค๋„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜ํƒ€๋‚œ๊ฒŒ ์„œ๋ฒ„ ๊ฐ€์ƒํ™”์ด๋‹ค. ๋ชจ๋‘๊ฐ€ ์•„๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์œผ๋กœ๋Š” VM์ด ์žˆ๋‹ค.


doker-1


๊ธฐ์กด์— ์šฐ๋ฆฌ์—๊ฒŒ ์ต์ˆ™ํ•œ VM๊ฐ™์€ ๊ฒฝ์šฐ์—” Host OS ์œ„์— ๊ฐ€์ƒํ™”๋ฅผ ์‹œํ‚ค๊ธฐ ์œ„ํ•œ Hypervisor ์—”์ง„ ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์œ„์— Guest OS๋ฅผ ์˜ฌ๋ ค ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ๊ฐ€์ƒํ™”๋œ ํ•˜๋“œ์›จ์–ด ์œ„์— OS๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” ํ˜•ํƒœ๋กœ ๊ฑฐ์˜ ์™„๋ฒฝํ•˜๊ฒŒ Host์™€ ๋ถ„๋ฆฌ๋œ๋‹ค๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. ๋ฐ˜๋ฉด์— ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™”๋Š” Docker ์—”์ง„ ์œ„์— Application ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋งŒ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋œ๋‹ค. OS ๊ฐ€์ƒํ™”๋ฅผ ๋ณด๋ฉด Host OS์™€ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜๋Š” ์žฅ์ ์€ ์žˆ์ง€๋งŒ OS์œ„์— OS๋ฅผ ์˜ฌ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด๊ฒ๊ณ  ๋Š๋ฆด์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ํ•˜์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™”๋Š” Host OS ๊ทธ๋ฆฌ๊ณ  Docker ์—”์ง„์œ„์—์„œ ๋ฐ”๋กœ ๋™์ž‘ํ•˜๋ฉฐ Host์˜ ์ปค๋„์„ ๊ณต์œ ํ•œ๋‹ค. ์ปค๋„์„ ๊ณต์œ ํ•˜๊ฒŒ ๋˜๋ฉด io์ฒ˜๋ฆฌ๊ฐ€ ์‰ฝ๊ฒŒ ๋˜์–ด ์„ฑ๋Šฅ์˜ ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Host OS๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ž์›์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

OS๊ฐ€์ƒํ™”๋Š” ์ปจํ…Œ์ด๋„ˆ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™”๋ณด๋‹ค ๋” ๋†’์€ ๊ฒฉ๋ฆฌ ๋ ˆ๋ฒจ์„ ์ง€์›ํ•œ๋‹ค. ์ด๋Š” ๋ณด์•ˆ์ ์ธ ์ธก๋ฉด์—์„œ ๋”์šฑ ์œ ๋ฆฌํ•˜๋‹ค. ๋˜ํ•œ OS๊ฐ€์ƒํ™”์˜ ์ปค๋„์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ์žฅ์  ๋˜ํ•œ ์žˆ๋‹ค. ์ปค๋„์„ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ๋งŒํผ ๋ฉ€ํ‹ฐ OS๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ปค๋„์„ ๊ณต์œ ํ•˜์ง€ ์•Š์•„ ๋ฉ€ํ‹ฐ OS๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค๋Š” ๊ฒƒ์€ Linux์œ„์— Window๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ์—๋„ Docker๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š” ์„ฑ๋Šฅํ–ฅ์ƒ, ๋›ฐ์–ด๋‚œ ์ด์‹์„ฑ, ์‰ฝ๊ฒŒ Scale Out์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์ด๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค.


์‹ค์Šตํ•˜๊ธฐ๐Ÿ˜บ

  • Docker install(Ubantu)
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce


  • ๋ช…๋ น์–ด
docker

docker ps
#(์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ปค๋งจ๋“œ)
docker ps -a
#(์‹คํ–‰์ด ์ข…๋ฃŒ๋œ ๊ฒƒ์„ ํฌํ•จํ•ด์„œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ณด๋Š” ์ปค๋งจ๋“œ ๋ฐ ์˜ต์…˜)
docker images
#(์ƒ์„ฑ๋œ ํ˜น์€ ๋‹ค์šด๋กœ๋“œ ๋œ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ปค๋งจ๋“œ)
docker images -a
#(๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ปค๋งจ๋“œ ๋ฐ ์˜ต์…˜)

docker start ์ปจํ…Œ์ด๋„ˆ๋ช…

docker stop ์ปจํ…Œ์ด๋„ˆ๋ช…


  • ๋„์ปคํ•˜๋ ค๋Š” ํด๋”์— Dockerfile ๋งŒ๋“ค๊ธฐ
#./Dockerfile
FROM node:14
# ๊ธฐ๋ฐ˜์ด ๋  ์ด๋ฏธ์ง€

# ์ž‘์—…๋””๋ ‰ํ† ๋ฆฌ(default) ์„ค์ •
WORKDIR /usr/src/app

## Install packages
# ํ˜„์žฌ ํŒจํ‚ค์ง€ ์„ค์น˜ ์ •๋ณด๋ฅผ ๋„์ปค ์ด๋ฏธ์ง€์— ๋ณต์‚ฌ. package-lock.json๋„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „.
COPY package*.json ./
# ํ”„๋ฆฌ์ฆˆ๋งˆ ์Šคํ‚ค๋งˆ์˜ ์œ„์น˜๋ฅผ ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์œ„๋กœ ์ด๋™ํ•˜์—ฌ ๋ณต์‚ฌ
COPY ./prisma/schema.prisma ./
# ์„ค์น˜์ •๋ณด๋ฅผ ์ฝ์–ด ๋“ค์—ฌ์„œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜
RUN npm install

## Copy all src files
# ํ˜„์žฌ ๊ฒฝ๋กœ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์†Œ์ŠคํŒŒ์ผ์„ ์ด๋ฏธ์ง€์— ๋ณต์‚ฌ
COPY . .


## Run the application on the port 8000
# 8000๋ฒˆ ํฌํŠธ๋ฅผ ์™ธ๋ถ€์— ๊ฐœ๋ฐฉํ•˜๋„๋ก ์„ค์ •
EXPOSE 8000

# === ๋„์ปค๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ์˜ ๋ช…๋ ์–ด

CMD ["npm", "start"]

# ========== ์ด๋ฏธ์ง€๊ฐ€ ์‹คํ–‰๋์„ ๋•Œ ์ฒ˜์Œ์— ์‹คํ–‰๋  ๋ช…๋ น์–ด


  • ๋„์ปคํŒŒ์ผ์„ ์ด์šฉํ•ด ์ด๋ฏธ์ง€ ๋นŒ๋“œ ํ•˜๊ธฐ
docker build -t '๋„์ปคํ—ˆ๋ธŒ์— ๊ฐ€์ž…ํ•œ ๊ณ„์ •๋ช…'/'์ด๋ฏธ์ง€๋ช…(ํ”„๋กœ์ ํŠธ๋ช… ๊ถŒ์žฅ)':'๋ฒ„์ „' .
ex) docker build -t clzlsqkq/justdoit:0.1.0 .


docker-2


๋งˆ์ง€๋ง‰์˜ .์€ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๊ฒƒ์œผ๋กœ ๊ผญ ์ ์–ด์ฃผ์–ด์•ผํ•œ๋‹ค.


  • ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•ด๋ณด๊ธฐ
docker run --name '์ปจํ…Œ์ด๋„ˆ ๋ช…' -d'๋ฐ๋ชฌ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์˜ต์…˜' -p 'ํ˜ธ์ŠคํŠธ ํฌํŠธ':'์ปจํ…Œ์ด๋„ˆ ํฌํŠธ' '์ด๋ฏธ์ง€๋ช…'
ex) docker run --name justdoit01 -d -p 8000:8000 clzlsqkq/justdoit:0.1.0


docker-3


์ž˜ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋ชจ์Šต.


  • ์ปจํ…Œ์ด๋„ˆ ์ „๋ถ€ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด
docker rm $(docker ps -a -q)
#UBUNTU
sudo docker rm $(sudo docker ps -a -q)


  • ์ด๋ฏธ์ง€ ์ „๋ถ€ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด
docker rmi $(docker images -q)
#ubuntu
sudo docker rmi $(sudo docker images -q)


----------------------------------*์ฐธ๊ณ *----------------------------------

RDS๊ฐ€ ์•„๋‹Œ ๋กœ์ปฌ DB๋ž‘ ์—ฐ๊ฒฐ์„ ํ•˜๊ณ ์‹ถ๋‹ค๋ฉด

โ€˜์ด๊ณณโ€™์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ localhost๋Š” ์ปจํ…Œ์ด๋„ˆ ์ž์‹ ์˜ ์ฃผ์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ŠคํŠธ OS(macOS) ์œ„์—์„œ ์‹คํ–‰์ค‘์ธ DB์— ์—ฐ๊ฒฐ์ด ์•ˆ๋˜๋Š”๋ฐ

sudo docker run --net=host -p "3306" --name justdoit04 -d -p 8000:8000 clzlsqkq/justdoit:0.1

์ด๋ ‡๊ฒŒ ์‹คํ–‰ ์‹œํ‚ค๋ฉด ์•„์ฃผ ์ž˜ ์—ฐ๊ฒฐ๋˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.ใ…Žใ…Ž

์—…๋ฐ์ดํŠธ: