코딩과로그
도커) 6. 'bind mounts' 사용하기 (가이드 실행 결과) <Use bind mounts> 본문
아래의 도커 가이드를 따라한 뒤 참고할만한 내용을 남겼습니다.
https://docs.docker.com/get-started/06_bind_mounts/
bind mounts 는 Named volumes 과는 또 다른 마운트이다.
이를 통해 컨테이너는 실제 호스트 파일 시스템상의 폴더를 호스트 머신과 공유할 수 있다.
Named volumes 과 Bind mounts 의 차이점
Named volumes | Bind mounts | |
볼륨 위치 | 도커가 정함 | 사용자가 정함 |
마운트 방법 (using --mount) | type=volume,src=my-volume,target=/usr/local/data | type=bind,src=/path/to/data,target=/usr/local/data |
Populates new volume with container contents => 뭘 의미하는 지 아직 모름. |
가능 | 불가능 |
볼륨 드라이버 지원 => 드라이버로 뭐가 가능한건 지 아직 모르겠음 |
지원 | 미지원 |
아래와 같이 가이드를 따라 실행해본 결과, 컨테이너에서의 변경사항이 호스트에 반영된 것을 확인할 수 있었다.
# 현재, 호스트 터미널의 파일들 확인
~/test/getting-started/app master
❯ ls
package.json spec src yarn.lock
# 컨테이너의 터미널로 접속함.
# 이 때 src 폴더를 마운트하였음. => (target=/src)
~/test/getting-started/app master
❯ docker run -it --mount type=bind,src="$(pwd)",target=/src ubuntu bash
root@8ebf5aa922d7:/# ls
bin dev home lib32 libx32 mnt proc run src sys usr
boot etc lib lib64 media opt root sbin srv tmp var
# 마운트한 src 폴더에 들어감
root@8ebf5aa922d7:/# cd src
root@8ebf5aa922d7:/src# ls
package.json spec src yarn.lock
# 파일을 생성함
root@8ebf5aa922d7:/src# touch myfile.txt
# 컨테이너 터미널에서 나옴.
root@8ebf5aa922d7:/src# exit
exit
# 컨테이너에서 만들었던 파일(myfile.txt)가 존재하는 것을 확인했다.
~/test/getting-started/app master
❯ ls
myfile.txt package.json spec src yarn.lock
이제 바인드 마운트를 통해서 이전 블로그에서 실습했던 to-do 앱을 다시 실행시켜보았습니다.
# todo-app을 실행시킴.
# 이 때 nodemon이라는 실행기를 통해서 to-do 앱을 실행시켰는데 nodemon은 자신이 다루는 소스코드가 바뀌면 프로그램을 재시작한다.
~/test/getting-started/app master
❯ docker run -dp 3000:3000 \
-w /app --mount type=bind,src="$(pwd)",target=/app \
node:18-alpine \
sh -c "yarn install && yarn run dev"
Unable to find image 'node:18-alpine' locally
18-alpine: Pulling from library/node
63b65145d645: Already exists
f41005eb563c: Already exists
69dcb013f10f: Already exists
00a00d315650: Already exists
Digest: sha256:ffc770cdc09c9e83cccd99d663bb6ed56cfaa1bab94baf1b12b626aebeca9c10
Status: Downloaded newer image for node:18-alpine
335af3420b661a5b0c5fdca127aeccd733c910571180849e1d8587dfd28f8ee4
# 소스코드를 바꿔보았다.
# 컨테이너의 로그를 확인해보았다.
❯ docker logs -f 33
yarn install v1.22.19
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
Done in 7.90s.
yarn run v1.22.19
$ nodemon src/index.js
[nodemon] 2.0.20
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node src/index.js`
Using sqlite database at /etc/todos/todo.db
Listening on port 3000
# 소스코드가 변경되어서 프로그램이 재시작된 것을 확인할 수 있었다.
[nodemon] restarting due to changes...
[nodemon] starting `node src/index.js`
Using sqlite database at /etc/todos/todo.db
Listening on port 3000
바인드 마운트는 로컬 개발환경에서 흔하게 사용된다고 하며, 이 환경의 장점은 모든 빌드 툴을 호스트 머신에 다 설치되어 있을 필요가 없다는 점이다.
docker run 이라는 명령어 하나로 모든 개발 의존 환경이 준비가 된다. 추후에 Docker Compose 가이드에서 더 자세히 알아볼 예정. 바인드 마운트를 하면 자신이 공유하기 원하는 폴더에서 소스작업을 하면서도 도커 컨테이너의 결과값을 실시간으로 볼 수 있다는 점이 장점이다.
'Docker' 카테고리의 다른 글
도커 명령어 모음 (정리 중) (0) | 2023.03.20 |
---|---|
도커) 8. 도커 컴포트 사용하기 (가이드 실행 결과) <Use Docker Compose> (0) | 2023.03.17 |
도커) 7. 다중 컨테이너 어플리케이션 (가이드 실행 결과) <Multi container apps> (0) | 2023.03.17 |
도커) 5. DB 유지시키기 feat: docker volume (가이드 실행 결과) <Persist the DB> (0) | 2023.03.17 |
도커) 1. 도커 개요 (0) | 2023.03.16 |