IT/DevOps

[Docker] Database ์œ ์ง€ํ•˜๊ธฐ: 2. Bind mount

kykyky 2024. 2. 7. 15:12

์ด์ „ ๊ธ€ ๐Ÿ‘‡

 

2024.02.06 - [IT/DevOps] - [Docker] Container์˜ filesystem, Database ์œ ์ง€ํ•˜๊ธฐ: 1. Volume mount

 

[Docker] Container์˜ filesystem, Database ์œ ์ง€ํ•˜๊ธฐ: 1. Volume mount

์ด์ „ ๊ธ€ ๐Ÿ‘‡ 2024.02.05 - [IT/DevOps] - [Docker] Application ๊ณต์œ ํ•˜๊ธฐ: Docker registry, Docker Hub [Docker] Application ๊ณต์œ ํ•˜๊ธฐ: Docker registry, Docker Hub ์ด์ „ ๊ธ€ ๐Ÿ‘‡ 2024.02.05 - [IT/DevOps] - [Docker] Application ์—…๋ฐ์ดํŠธํ•˜๊ธฐ [Doc

intoky.tistory.com

 

 


Bind mount


 

 

์ถœ์ฒ˜: https://docs.docker.com/storage/bind-mounts/

 

 

bind mount๋Š” host filesystem์˜ ํŠน์ • directory์™€ container๋ฅผ ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, host filesystem์˜ ํŠน์ • directory์—์„œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด, ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋Š” Container์— ์ฆ‰์‹œ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.  

 

 

โœ… host filesystem๊ณผ container์˜ directory ๊ณต์œ  ์‹ค์Šต

 

getting-started-app ๋””๋ ‰ํ† ๋ฆฌ ์œ„์น˜์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด,

container filesystem์˜ root ๋””๋ ‰ํ† ๋ฆฌ ์œ„์น˜์—์„œ ubuntu์˜ bash๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

docker run -it --mount "type=bind,src=%cd%,target=/src" ubuntu bash

 

src: host machine์—์„œ์˜ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ (getting-started-app)

target: ์œ„ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ container ๋‚ด์—์„œ ๋‚˜ํƒ€๋‚  ์œ„์น˜ (/src)

 

 

์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด, src ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ ๋’ค ํด๋”์— ๋ญ๊ฐ€ ๋“ค์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ฉด, 

host machine์˜ getting-started-app ํด๋” ๋‚ด๋ถ€์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค!

root@???:/# cd src
root@???:/src# ls

 

 

container host

 

ํ˜„์žฌ ์œ„์น˜์—์„œ, ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด myfile.txt๋ฅผ ์ƒ์„ฑํ•ด๋ด…์‹œ๋‹ค.

root@???:/src# touch myfile.txt

 

 

์ด์ œ host์—์„œ getting-started-app ํด๋”๋ฅผ ๋ณด๋ฉด, myfile.txt๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

 

host → container

 

host์˜ getting-started-app ํด๋”์—์„œ, myfile.txt๋ฅผ ์‚ญ์ œํ•ด๋ณด์„ธ์š”.

 

 

๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ์—” ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ container์—์„œ src ํด๋” ๋‚ด๋ถ€๋ฅผ ํ™•์ธํ•ด ๋ณด๋ฉด, myfile.txt๊ฐ€ ์‚ฌ๋ผ์กŒ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

root@???:/src# ls

 

 

interactive session์€ Ctrl + D๋กœ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

โœ… application ์—…๋ฐ์ดํŠธ ์‹ค์Šต: ์†Œ์Šค์ฝ”๋“œ ๋ณ€๊ฒฝ์ด container์— ์ฆ‰์‹œ ๋ฐ˜์˜๋จ

 

 

getting-started-app ๋””๋ ‰ํ† ๋ฆฌ ์œ„์น˜์—์„œ, ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด bind mount๊ฐ€ ๋œ Container๋ฅผ ์‹œ์ž‘ํ•ด ๋ด…์‹œ๋‹ค.

docker run -dp 127.0.0.1:3000:3000 \
    -w /app --mount type=bind,src="$(pwd)",target=/app \
    node:18-alpine \
    sh -c "yarn install && yarn run dev"

 

 

host machine์˜ src/static/js/app.js ํŒŒ์ผ์—์„œ, 109๋ฒˆ์งธ ๋ผ์ธ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•œ ๋’ค ์ €์žฅํ•ด์ฃผ์„ธ์š”.

- {submitting ? 'Adding...' : 'Add Item'}
+ {submitting ? 'Adding...' : 'Add'}

 

 

๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด, ์œ„ ์ˆ˜์ • ๋‚ด์šฉ์ด ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€ป host machine์—์„œ์˜ ๋ณ€ํ™”๊ฐ€ container์— ์ฆ‰์‹œ ๋ฐ˜์˜๋œ ๊ฒƒ์€ bind mount ๋•๋ถ„์ด์ง€๋งŒ,

container์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ์„œ Application์ด ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ๋œ ๊ฒƒ์€ Nodemon ๋•๋ถ„์ž…๋‹ˆ๋‹ค.

 

 

์†Œ์Šค์ฝ”๋“œ๋ฅผ ์›ํ•˜๋Š”๋Œ€๋กœ ์ˆ˜์ •ํ•œ ํ›„, ๋งˆ๋ฌด๋ฆฌ๋˜์—ˆ๋‹ค๋ฉด ์ด๊ฒƒ์„ ์ด์ œ ์ƒˆ Image๋กœ์„œ buildํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

docker build -t getting-started .

 

 


 

 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค~!