index.js 파일 작성
Dockerfile 작성
Dockerfile : 가상컴퓨터를 만드는 설명서
docker build
build: 만들어진 설명서를 가지고 하나로 묶여진 이미지로 만들어 주는 것
명령어 :docker build .
docker images
: 빌드가 완료되어 생성된 이미지를 확인할 수 있음
docker run 이미지ID
: 만들어진 이미지를 사용하여 새로운 컴퓨터를 만들기 위해 이미지를 실행해 보는 것
이렇게 만들어진 가상 컴퓨터를 컨테이너라고 한다.
docker images -a
: 종료된 이미지까지 전체 조회
docker rmi 이미지ID
: image 삭제
docker ps
: docker 컨테이너 확인
docker가 실행된 후 종료가 되었기 때문에 도커 프로그램이 존재하지 않는 것docker ps -a
: 종료된 컨테이너 까지 확인 가능
docker rm 컨테이너ID
: 컨테이너 삭제
다 지우고 다시 조회해보면 나오지 않음
컨테이너만 지운 상태이며, 이미지는 남아있음. 이미지까지 지우려면docker rmi 이미지ID
.dockerignore 파일 만들기
Dockerfile
.dockerignore
docker build .
docker images
docker run 이미지ID
도커 내부 접속
현재 프로세스 확인
명령어
docker ps
=> STATUS가 UP으로 되어있으면, 실행 중이라는 뜻이다.컨테이너 내부 들어가기
명령어 :
docker exec -it 컨테이너_아이디 /bin/bash
도커에서 돌아가고 있는 가상컴퓨터의 터미널 접속
소스코드 복사 확인
pwd
명령어로 현재 폴더위치를 확인 할 수 있으며,ls
명령어를 통해 모든 소스코드들이 잘 복사되어왔는지를 확인함
쉘 종료는exit
를 입력하면 됨포트포워딩
: 가상 컴퓨터의 포트번호와 내 컴퓨터의 포트 번호로 연결
docker 포트 포워딩 실행 :
docker run -p 3000(내 컴퓨터 포트) : 3000(가상컴퓨터 포트) 이미지ID
결과
왜 포트번호가 변경되면 다시 build를 해줘야하는가
이미 입력해놓은 코드로 build해서 이미지를 찍어놨기 때문에, 변경해서 실행하려면 다시 build해서 새로 이미지를 저장한다.
=> 그러면 yarn install로 새로하는건데 시간이 오래걸리고 바뀔때마다 build를 해줘야하는 번거로움이 크다소스코드 하나 바뀔때마다 build할 수없어 특정 파일을 지정해서 그 파일은 바뀐걸 바로 반영해줘!빌드하지않아고 괜찮아!!하는게 volumes 라고 한다.
index.js 파일만 수정했는데, 왜 package.json도 다시 설치를 해야하는가
도커는 최대한 똑같은 명령을 안받기 위해 캐시라는 곳에다가 임시 저장을 한다.
캐시에 이미 저장되어 있는 명령을 가져와서 쓰겠다고 하는 기준은 변경된 파일이 있는 줄 위에 있는 것들은 캐시에 이미 저장되어 있는 명령을 쓰고 변경된 파일 밑에 있는 것들은 모두 다 새로 빌드한다.
그래서 dockerfile 순서를 변경해줘야한다.# node가 설치되어있는 리눅스 컴퓨터 한대 만들기 FROM node:14 # 명령어를 실행할 작업 폴더 위치 지정 WORKDIR /myfolder/ # 모든 소스 코드를 복사하기 전에 먼저, packge.json과 yarn.lock을 복사하게함 COPY ./package.json /myfolder/ COPY ./yarn.lock /myfolder/ # 그 후에 모듈들을 설치 RUN yarn install # 그러고 모든 소스코드를 복사해 도커 컴퓨터에 넣어주기 COPY . /myfolder/ # package.json 파일을 확인하고 실행 명령어를 입력해서 서버 실행 CMD yarn dev
제일 자주 변경될 것 같은 myfolder를 하단에 만들어 줬다.
이렇게Dockerfile
을 작성하게 되면,package.json
과yarn.lock
파일이 수정되지 않았다면RUN yarn install
까지는 기존 것을 그대로 쓰고, 밑에 실제로 소스코드가 고쳐진 부분만 새로 반영되어 실행된다.