🚨 💻Docker를 사용해야 하는 이유
- 팀원 및 서버와 개발 환경을 쉽게 동기화 할 수 있다. => 도커 이미지에 언어나 프레임워크 버전을 미리 모두 정해놓을 수 있고 해당 이미지를 컨테이너화 시키면 그 컨테이너는 로컬 환경의 간섭 없이 독립적으로 구동 가능
# 가상 컴퓨터 만드는 방법
# 1. 운영체제 설치(node 14버전과 npm과 yarn이 모두 설치되어있는 리눅스)
FROM node:14
# 2. 내 컴퓨터에 있는 폴더나 파일을 도커 컴퓨터 안으로 복사하기
COPY ./파일명 /파일명
# 3. 도커안에서 파일 실행시키기
CMD node 파일명
docker build .
: 빌드가 완료 되면 이미지가 생성된 것이고 docker images
명령어로 확인 가능하다. ➡️ 이렇게 한 번 이미지를 만들어놓으면, 언제 어디서든 똑같은 환경의 가상 컴퓨터를 만들 수 있다. docker run 이미지 ID
: 이렇게 이미지를 실행 시키면 가상 컴퓨터 하나가 만들어진다. 이 때, 도커로 만들어진 가상의 컴퓨터를 우리는 컨테이너라고 부른다.RUN vs CMD
RUN ~ : run 명령어 까지 실행 시킨 후 최종 이미지로 저장 (여러번 실행 가능)
CMD ~ : CMD 명령어는 빠지고 그 윗줄 까지만 이미지로 저장 --> CMD는 이미지로 저장된 컴퓨터를 실행시킬 때 사용 (파일에서 한 번만 실행 가능)
🚨 Docker는 변경 사항으로 재실행시 cache가 한 번 깨지기 시작하면 그 후로는 모든걸 다시 새로 설치하기 시작한다. ➡️ 소스코드 변경 하고 다시 시작할 때마다 yarn install (비효율적)
이를 방지하기 위해 코드를 아래와 같이 수정하여 실행한다.
# 1. 운영체제 및 컴퓨터 설치 ( 리눅스, node, npm, yarn 까지 모두 깔려있는 컴퓨터 다운로드)
FROM node:14
#2. 내 컴퓨터에 있는 폴더나 파일을 도커 컴퓨터 안으로 복사
COPY ./package.json /폴더명/
COPY ./yarn.lock /폴더명/
WORKDIR /폴더명/
RUN yarn install
COPY . /폴더명/
#3. 도커안에서 파일 실행
CMD yarn start:dev
하지만 이렇게 파일을 실행하고 postman을 통해 docker로 띄운 서버의 api가 잘 작동하는지 확인해보면 동작하지 않는다. 지금까지는
yarn start:dev
명령어로 express 서버를 3000번 포트에서 실행시키고localhost:3000
에 접속하면 문제가 없었지만
Docker 환경에서는 내 컴퓨터 안에 Docker라는 프로그램이 있고 그 안에서 express 서버가 실행중이므로 가상 컴퓨터 안에서는 3000번 포트로 잘 접속 되지만 내 컴퓨터의 3000번 포트에는 아무것도 존재하지 않게 된다. 따라서 가상 컴퓨터의 3000번 포트와 내 컴퓨터의 포트를 연결 시켜줘야 한다.
docker run -p 8000:3000 이미지 ID
: 내 컴퓨터의 8000번 포트와 Docker 컴퓨터의 3000번 포트 연결
➡️ 이후 postman을 사용해https://localhost:8000/
로 접속해보면 잘 띄워져 있는걸 확인할 수 있다.
docker ps
: 실행중인 docker 프로그램 확인 가능 docker ps -a
: 종료된 docker 프로그램까지 확인 가능 docker rm 컨테이너 ID
: 컨테이너 삭제 docker ps -a -q
: 컨테이너 전체 삭제 ( 백틱으로 감싸준 부분부터 먼저 처리 )docker rmi 이미지 ID
: 이미지 삭제 docker images -q
: 이미지 전체 삭제 (백틱으로 감싸준 부분부터 먼저 처리 )