๐Ÿณ ๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ๋กœ ๋ฐฐ์šฐ๋Š” ๋„์ปค๊ฐ•์˜ 3ํŽธ

๊น€ํƒœ์ธยท2022๋…„ 7์›” 20์ผ
0

Docker

๋ชฉ๋ก ๋ณด๊ธฐ
1/3

๐Ÿšฉ12๊ฐ• ๋ฐ”์ธ๋“œ๋งˆ์šดํŠธ์˜ ๊ฐœ๋…

  • ํ˜„์žฌ ๋™์ผํ•œ ๋ณผ๋ฅจ์„ ๊ฐ€์ง€๋Š” ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•จ
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋ฐ์ดํ„ฐ๋Š” ํ˜„์žฌ ์–ด๋””์— ์žˆ๋Š” ๊ฑด๊ฐ€?
    • virtual marchine ์ƒ์— ์กด์žฌ
docker volume ls
#์–ธ์ œ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ ์–ด๋””์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ
docker volume inspect todo-db
  • inpect๋ฅผ ํ†ตํ•ด์„œ ์–ด๋”” ์œ„์น˜์— ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Œ
  • ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒƒ์„ cd๋ฉ”์„œ๋“œ๋กœ ๋“ค์–ด๊ฐ€๋ณด๋ ค๊ณ  ํ•˜๋ฉด ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ
  • ์™œ๋ƒํ•˜๋ฉด ๋ฒ„์ถ”์–ผ ๋จธ์‹ ์— ์œ„์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—!
  • ์ดˆ๋ฐ˜์— ์ด๋ฏธ์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ–ˆ๋˜ ์ ์ด ์žˆ์Œ
  • ๊ทธ๋•Œ ํ•œ๊ธ€ํ™”๋ฅผ ์ง„ํ–‰, ์ด๋ฏธ์ง€ ์ €์žฅํ•˜๊ณ  ์ด๋ฏธ์ง€ ๋นŒ๋“œ, ์ปจํ…Œ์ด๋„ˆ ๋„์šด ๊ณผ์ •์„ ํ•จ
  • ์†Œ์Šค์ฝ”๋“œ ์ž์ฒด๋ฅผ ๋ณผ๋ฅจ์ฒ˜๋Ÿผ ์“ด๋‹ค๋ฉด ์ˆ˜์ •ํ•œ๋‹ค๋ฉด ๋ฐ”๋กœ ์ ์šฉ์ด ๋˜๊ฒ ์ง€? โ€”> ๋ฐ”์ธ๋“œ๋งˆ์šดํŠธ
  • ๋„ค์ž„๋“œ ๋ณผ๋ฅจ : ์ด๋ฆ„์„ ์ง€์–ด์ค˜์„œ ์“ฐ๋Š” ๊ฒƒ
  • ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ : ๋กœ์ปฌ ํด๋”๋ฅผ ์ง€์ •ํ•ด์ค˜์„œ ์“ฐ๋Š” ๊ฒƒ

๐Ÿšฉ13๊ฐ• ๋ฐ”์ธ๋“œ๋งˆ์šดํŠธ ์‹ค์ œ๋กœ ํ•ด๋ณด๊ธฐ

  • ๋ฐ”์ธ๋“œ๋งˆ์šดํŠธ๋ž€?

    • ๋„์ปค ๋‚ด๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์•„๋‹Œ ์†Œ์Šค์ฝ”๋“œ๋“ค๋„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ฒƒ!
    • ๋ฐ”์ธ๋“œ๋งˆ์šดํŠธ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ๋„์ปค๊ฐ€ ์ถ”์ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฑธ๋ ค์žˆ๋Š” ํฌํŠธ๋ฒˆํ˜ธ์— ์ ‘์†ํ•ด์„œ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ๋ณ€๊ฒฝ๋‚ด์šฉ์„ ๋งค๋ฒˆ ์ด๋ฏธ์ง€ ๋นŒ๋”ฉ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋ฐ”๋กœ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!
    • ๋ฐ”์ธ๋“œ๋งˆ์šดํŠธ์˜ ์žฅ์ ์€ ์ด๋ ‡๊ฒŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ž‘์—…์„ ์ง€์†ํ•˜๋ฉด์„œ ํ•œ ๋ฒˆ ์ฝ”๋“œ ์ ๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๋ถ„๊ธฐ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•˜๊ณ  ๋งˆ์นœ ๋’ค ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค!
    • ์™œ ๊ตณ์ด IDE์—์„œ ํ™•์ธ ๋‹ค ํ•˜๊ณ  ๋นŒ๋”ฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋„์ปค ๋ฐ”์ธ๋“œ๋งˆ์šดํŠธ๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธํ•˜๋Š๋ƒ? โ†’ IDE์—์„œ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ๋„์ปค๋กœ ์˜ฎ๊ฒจ์ค˜๋„ ๋˜๊ณ , ๋„์ปค์—์„œ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋กœ ์ž‘์—…ํ•  ์ˆ˜๋„ ์žˆ๋‹ค!(์ถ”๊ฐ€ ์ˆ˜์ •)
  • ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๊บผ์ฃผ๊ณ  ๋„์ปคํŒŒ์ผ ์žˆ๋Š” ๋ฐ๊นŒ์ง€ ๊ฐ (cd App)

  • IDE ํ„ฐ๋ฏธ๋„์—์„œ ์ž์‹ ์ด ์‹คํ–‰ํ•œ ํ„ฐ๋ฏธ๋„์„ ํ™•์ธํ•˜๊ธฐ!(์œˆ๋„์šฐ์˜ ๊ฒฝ์šฐ ํŒŒ์›Œ์‰˜)

  • ์ปจํ…Œ์ด๋„ˆ node ์ž˜ ์‹คํ–‰๋˜๋Š”๊ฑฐ ํ™•์ธ
# log ๊ฐ’
docker logs {์ปจํ…Œ์ด๋„ˆID}

# ์‹ค์‹œ๊ฐ„ log๊ฐ’ follow
docker logs -f {์ปจํ…Œ์ด๋„ˆID}

# ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์—ฌ๊ธฐ์„œ ๋ฒ—์–ด๋‚˜๋ ค๋ฉด ctrl+c
# 3000๋ฒˆ ํฌํŠธ์—์„œ ์ž˜ ๋Œ์•„๊ฐ€๋Š” ๊ฑฐ ํ™•์ธ
#app.js
"No items ----" ๋ฅผ
"์•„์ดํ…œ์ด ์•„์ง ์—†์Šต๋‹ˆ๋‹ค!" ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฐ”๋กœ ์ˆ˜์ •๋จ

๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ์˜ ์žฅ์ 

  1. ๋‹ค์–‘ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์›Œ๋‘๊ณ  ๋ฒ„์ „ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค!
    • ํŒŒ์ด์ฌ 3.8, 3.7, 3.10 ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฒ„์ „๋งˆ๋‹ค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด ๋„์›Œ์„œ ์ž‘์—…ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿšฉ14๊ฐ• ๋ฉ€ํ‹ฐ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ํ•˜๋‚˜์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์— ํ•˜๋‚˜์˜ ์•ฑ์„ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ์›์น™

๐Ÿšฉ15๊ฐ• mysql ์ปจํ…Œ์ด๋„ˆ ๋„์šฐ๊ธฐ

docker network create todo-app

docker run -d \
> --network todo-app --network-alias mysql \ 
> -v todo-mysql-data:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=secret \
> -e MYSQL_DATABASE=todos \
> mysql:5.7
  • ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •(์ž„์‹œ)
    1. -e MYSQL_ROOT_PASSWORD=secret \
    2. -e MYSQL_DATABASE=todos \
# Mac OS M1 ์‚ฌ์šฉ์ž

docker run -d \
--network todo-app --network-alias mysql --platform linux/amd64  \
-v todo-mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=todos \
mysql:5.7
docker exec -it {์ปจํ…Œ์ด๋„ˆID} mysql -p

SHOW DATABASES;

๐Ÿšฉ16๊ฐ• ๋ฉ€ํ‹ฐ์ปจํ…Œ์ด๋„ˆ ์—ฐ๊ฒฐํ•˜๊ธฐ

  • ํŠน์ˆ˜ํ•œ์ด๋ฏธ์ง€ ๋‹ˆ๊ผด๋ผ์นด์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ€๋Š”์ง€ ๋„คํŠธ์›Œํฌ ์ƒํƒœ ํŒŒ์•… ์œ„ํ•ด
  • dig mysql ์„ ์”€์œผ๋กœ์จ ๋งˆ์น˜ DNS ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•˜๋“ฏ ์—ฐ๊ฒฐ?
docker run -it --network todo-app nicolaka/netshoot

dig mysql

exit
  • ๋‹ˆ๊ผด๋ผ์นด์ด ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ, ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์šฐ๋ฆฌ node์ปจํ…Œ์ด๋„ˆ ์ค‘๋‹จ
  • ๋„คํŠธ์›Œํฌ์— ํƒ‘์žฌํ•˜์—ฌ mysql๊ณผ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹คํ–‰๋˜๊ฒŒ๋” ํ•  ๊ฒƒ์ž„
  • ํฌํŠธ๋Š” ๊ผญ 3000๋ฒˆ์ด์–ด์•ผ ํ•œ๋‹ค!
    • ๋ฉ€ํ‹ฐ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•˜๋‚˜์˜ ํฌํŠธ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๋Š” ๊ฒƒ์— ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค
    • ์„œ๋ฒ„ & ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•˜๋‚˜์˜ ํฌํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋–ผ๋Š” ์˜๋ฏธ๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด์ž
docker run -dp 3000:3000 \
-w /app -v "S(pwd):/app" \
--network todo-app \
-e MYSQL_HOST=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=secret \
-e MYSQL_DB=todos \
node:12-alpine \
sh -c "yarn install && yarn run dev"

docker ps
docker logs {์ปจํ…Œ์ด๋„ˆID}
# ์ด ์ปจํ…Œ์ด๋„ˆID๋Š” mysql๊ณผ ์—ฐ๊ฒฐ๋œ ์ปจํ…Œ์ด๋„ˆ
# ์„ค์ •ํ•œ ํŒจ์Šค์›Œ๋“œ ์ž…๋ ฅ
docker exec -it {์ปจํ…Œ์ด๋„ˆID} mysql -p todos

#ํ•œ๊ธ€์€ ๊ธ€์”จ๊ฐ€ ๊นจ์ ธ ?๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ์Œ
select * from todo_items;

๐Ÿšฉ17๊ฐ• mysql ํ•œ๊ธ€ํ™”(์„ ํƒ์‚ฌํ•ญ)

  • vscode ์ต์Šคํ…์…˜ docker ์„ค์น˜
    • etc ํด๋” - my.cnf ํŒŒ์ผ
# etcํด๋” > my.cnf ํŒŒ์ผ์— ์ถ”๊ฐ€
[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
skip-character-set-client-handshake

๐Ÿšฉ18๊ฐ• docker compose

The Official YAML Web Site

๋Œ€๋ง์˜ ๋„์ปค ์ปดํฌ์ฆˆ

docker compose version
# docker-compose.yml
version: "3.8"

services:
	app:
		image: node:12-alpine
		command: sh -c "yarn install && yarn run dev"
		ports:
		 - 3000:3000
		working_dir: /app
		volumes:
		 - ./:/app
		environment:
		 MYSQL_HOST: mysql
		 MYSQL_USER: root
		 MYSQL_PASSWORD: secret
		 MYSQL_DB: todos
	mysql:
		image: mysql:5.7
		volumes:
			- todo-mysql-data:/var/lib/mysql
		environment:
			MYSQL_ROOT_PASSWORD: secret
			MYSQL_DATABASE: todos
	
volumes:
	todo-mysql-data:
		# ์จ๋„๋˜๊ณ  ์•ˆ์จ๋„ ๋จ
		name: todo-mysql-data

docker-compose up -d

docker-compose logs

docker-compose logs -f

๐Ÿณย ๊ทธ๋ž˜์„œ ๋„์ปค๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๋ฐ?

์ฐธ์กฐ : https://www.youtube.com/watch?v=LXJhA3VWXFA&t=858s

profile
์ฝ”๋”ฉ์ด ์ทจ๋ฏธ๊ฐ€ ๋˜๋Š” ๊ทธ๋‚ ๊นŒ์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€