docs.docker.com/get-started/06_bind_mounts/
ny0011.tistory.com/106 에서 named volume을 썼음.
-> 간단하게 데이터를 저장할 때 좋은 것. 데이터가 로컬 pc에 어디에 저장돼도 상관 없을 때 사용함.
0. bind mount를 사용하면 로컬 pc에 어느 위치에 mount 할 지 지정할 수 있음.
-> 보통 bind mount는 container에게 추가 데이터를 제공할 때 사용함.
app을 띄울 때, 소스 코드가 있는 곳을 mount하는 데 사용함. 그래서 코드가 바뀌면 바로 적용되도록 함.
node-base app에서는 nodemon을 사용함(파일 변경되면 app 재시작해줌)
대강 volume type을 비교해봄
- volume driver 지원은 저장공간을 SFTP, Ceph, NetApp, S3 등으로 지정할 때 해당되는 얘기인듯❓
이번에 프로젝트 하면서 NetApp을 알게됐는데 다른 것도 있구만
named volume | bind mount | |
로컬 PC에서 폴더 위치 | docker가 알아서 고름 | 유저가 고름 |
mount example(-v 옵션 사용할 때) | my-volume:/usr/local/data | /path/to/data:/usr/local/data |
새 volume을 container와 함께 배포 가능? | ㅇㅇ | ㄴㄴ |
volume driver 지원? | ㅇㅇ | ㄴㄴ |
1. dev-mode container를 시작해보자
개발에 지원하기 위한 container를 실행하기 위해선 다음과 같은 절차가 있을 것임
- container에 소스코드를 mount 하기
- 모든 관련된 패키지들을 install 하기("dev" dependency 포함)
- nodemon을 실행해서 파일이 변경되었는 지 검사
요 절차대로 한번 해보장
1) 모든 getting-started container를 지우고 시작하자
$ sudo docker container rm -f 1badc8fb656c
1badc8fb656c
2) 새 container를 띄우자
$ pwd
.
├── Dockerfile
├── node_modules
├── package.json
├── spec
├── src
└── yarn.lock
$ sudo docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
node:12-alpine \
sh -c "yarn install && yarn run dev"
-w /app : working directory나 현재 폴더를 보도록 지정. container에서 command(sh -c) 가 실행되는 위치
-v "$(pwd):/app" : container의 /app 디렉토리와 로컬PC의 현재 디렉토리(./app 안) 를 bind mount
node:12-alpine : 사용하는 image 이름
sh -c "yarn install && yarn run dev" : container의 sh을 사용해서 "" 안에 있는 명령어를 실행
3) container에서 어떤 일이 일어났는지 docker logs -f로 확인 가능
종료는 ctrl+c로 한당
$ sudo docker logs -f 171043ef0bf810
yarn install v1.22.5
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.9: The platform "linux" is incompatible with this module.
info "fsevents@1.2.9" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
[4/4] Building fresh packages...
Done in 12.28s.
yarn run v1.22.5
$ nodemon src/index.js
[nodemon] 1.19.2
[nodemon] to restart at any time, enter `rs`
[nodemon] watching dir(s): *.*
[nodemon] starting `node src/index.js`
Using sqlite database at /etc/todos/todo.db
Listening on port 3000
4) ./src/static/js/app.js 파일을 다음과 같이 수정한다
- {submitting ? 'Adding...' : 'Add Item'}
+ {submitting ? 'Adding...' : 'Add'}
http://localhost:3000 을 새로고침하면 버튼이 Add Item에서 Add로 바로 바뀐걸 볼 수 있다!!
오와우아앙
내가 코드를 수정하면 바로 반영이 되어 확인할 수 있구만~
5) 코드를 변경해서 기존 image에 덮어씌우려면 docker build를 사용한다
$ sudo docker build -t getting-started .
Sending build context to Docker daemon 65.3MB
Step 1/5 : FROM node:12-alpine
---> 0206ff8a5f9e
Step 2/5 : WORKDIR /app
---> Using cache
---> 37d127849726
Step 3/5 : COPY . .
---> f1ee0190588d
Step 4/5 : RUN yarn install --production
---> Running in 09372d3fab9a
yarn install v1.22.5
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.9: The platform "linux" is incompatible with this module.
info "fsevents@1.2.9" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
[4/4] Building fresh packages...
Done in 6.63s.
Removing intermediate container 09372d3fab9a
---> bc16dbb25dcb
Step 5/5 : CMD ["node", "src/index.js"]
---> Running in 76cd0b921b07
Removing intermediate container 76cd0b921b07
---> 88fa5845a71f
Successfully built 88fa5845a71f
Successfully tagged getting-started:latest
이렇게 image에 변경된 내용이 적용된다
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
getting-started latest 88fa5845a71f 15 seconds ago 231MB
'개발 > DevOps' 카테고리의 다른 글
Docker 내용, 기반 기술 정리 (0) | 2021.06.21 |
---|---|
[정리] prometheus vs graphite (0) | 2021.03.03 |
Docker docs 따라하기 - 3. DB를 고정하기(named volume 사용) (0) | 2021.02.09 |
Docker docs 따라하기 - 2. online에서 docker 실행하기 (0) | 2021.02.09 |
Docker docs 따라하기 - 1. ubuntu18.04에 Docker 설치 (0) | 2021.02.08 |
댓글