FROM node:14
# 안정적인 버전
COPY ./index.js centumjooncode/
#local pc 파일 복사에서 가상 pc에 옮기기
WORKDIR /centumjooncode/
# 어디서 시작할 건지
CMD node index.js
#CMD 로 실행
이미 build 에서 컴퓨터가 형성 되고 프로그램이 작동합니다.
그리고 꺼집니다. -
가상 pc를 지속 시킬려면 local 서버가 계속 돌아야합니다.
이번에는 이렇게 여러 파일이 있는 걸 바탕으로 Dockerfile을 작성해 보겠습니다.
.dockerignore 파일도 만들어서 node_modules를 무시해줍니다.
요렇게 작성하시면 됩니다.
.gitignore하고 비슷합니다.
FROM node:14
WORKDIR /myfolder/
# 어기 폴더에 커서 !
COPY . /myfolder/
# myfolder를 만들어서 모든 파일을 복사해줘
RUN npm install
#node_modules 생성을 위해서
#여기까지 image로 생성 !
CMD npm run dev
위의 파일 모두 를 의미하는 건 [ . ] 입니다.
그래서 COPY 뒤에 점만 찍어줍니다.
$ docker build .
$ docker build .
[+] Building 17.1s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 245B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 52B 0.0s
=> [internal] load metadata for docker.io/library/node:14 1.9s
=> CACHED [1/4] FROM docker.io/library/node:14@sha256:0443d511c77586fbeff8e32ea55565acbcf666fafa14e995eddbbbba5ff352b0 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 82.04kB 0.0s
=> [2/4] WORKDIR /myfolder/ 0.1s
=> [3/4] COPY . /myfolder/ 0.0s
=> [4/4] RUN npm install 14.3s
=> exporting to image 0.6s
=> => exporting layers 0.6s
=> => writing image sha256:e13058b9416a01c5d2b3780c63196fa8a8c715c70f474e8cd0b7eca8e8e914ee 0.0s
빌드가 잘 되었습니다.
위에 보시면 CACHED 라는 부분은 기존에 설치 된걸 재 설치하면 오래 걸리니까
보관하다가 다시 가져 왔다는걸 의미합니다.
했던 작업을 다시 명령하면 CACHED가 많아지는 걸 볼 수 있습니다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> e13058b9416a About a minute ago 930MB
<none> <none> 02ded6651d3f 29 minutes ago 916MB
$ docker run e13058b9416a
> back@1.0.0 dev /myfolder
> nodemon 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 index.js`
Example app listening on port 3000
docker 컴퓨터 안에서 동일한 코드가 실행 되었습니다.
이제 이 프로그램은 앞으로 24시간 돌게 되겁니다.
이 컴퓨터가 진짜 있는지 보고싶다면 접속을 해봐야겠죠 !
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e292f5c9a5b9 e13058b9416a "docker-entrypoint.s…" 2 minutes ago Up 2 minutes hopeful_shtern
container 한 개가 실행 중이다 라고 나옵니다.
$ docker exec -it e292f5c9a5b9 /bin/bash
docker 실행 container id /실행 폴더 / 명령창
번역하면 : 도커야 이 컨테이너 를 /bin 실행 폴더 안에서 bash 명령창을 띄워서 실행해줘
root@e292f5c9a5b9:/myfolder#
이렇게 터미널 창 주인이 바뀝니다.
root@e292f5c9a5b9:/myfolder# pwd
/myfolder
root@e292f5c9a5b9:/myfolder# ls
Dockerfile index.js package-lock.json phone.js
email.js node_modules package.json utils.js
이렇게 경로와 내부에 들어가 있는 파일도 확인됩니다.
원래 터미널로 돌아오고 싶으면
exit 만 입력해주시면 됩니다.
일단
docker localhost : 3000이 운영되고 있으니
postman을 통해 api에 요청을 보내 보겠습니다.
안됩니다.
당연하죠
로컬이 아니라
도커 안에서 운영 중이니까 저 주소가 아닙니다.
포트 포워딩을 추가 해줘야 합니다.
postman -> localhost:8000/boards -> send -> 내컴퓨터 : 8000 찾기 -> [포트 포워딩 8000 : 2500] -> docker : 3000
일단 도커를 멈춰 봅시다
포트 포워딩 명령어를 포함 시켜 다시 실행합니다.
$ docker stop e292f5c9a5b9
$ docker run -p 8000:3000 e13058b9416a
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c8781371b500 e13058b9416a "docker-entrypoint.s…" 25 seconds ago Up 25 seconds 0.0.0.0:8000->3000/tcp admiring_edison
0.0.0.0:8000->3000/tcp
0.0.0.0 -> 뜻은 누구나 접속 가능하다
너무 잘 들어 옵니다.
행복 !
'Web Dev' 카테고리의 다른 글
Java (Spring) : 빈의 범위 (bean) (2) | 2023.02.24 |
---|---|
Node.js - MySQL 연동 /MySQL로 홈페이지 구현 (0) | 2023.02.23 |
[Docker] : docker image 삭제 방법 (0) | 2023.02.17 |
[Docker]DockerHub 사용법 총정리 : Docker 설치 및 실행 (0) | 2023.02.15 |
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.[Docker : real ! 해결방법 ] (0) | 2023.02.15 |
React Native로 크로스 플랫폼 웹뷰앱 만들기 (0) | 2023.02.10 |