FROM node:10
COPY ./ ./
RUN npm install
CMD ["node", "server.js"]
node.js 어플리케이션을 담은 컨테이너를 실행하기 위해 docker 이미지 파일을 생성한다.
COPY ./ ./
는 현재 디렉토리 내에 있는 모든 파일들을 스냅샷으로 해당 컨테이너에 추가한다.
이런 식으로 스냅샷을 추가해주지 않으면 컨테이너 run에 필요한 파일들이 없어 오류가 뜬다.
빌드 후 컨테이너를 실행했을 때 server.js
에 명시된 포트번호(8080)로 접속해보면 접속이 되지 않는다.
이는 로컬 환경에서의 포트번호와 컨테이너의 포트번호가 다른 개념이기 때문이다. 따라서 로컬 환경에서의 포트를 컨테이너의 포트에 연결해서 run
명령어를 실행해줘야 한다.
docker run -p <로컬포트번호>:<컨테이너포트번호> <도커이미지>
어플리케이션이 정상 작동한다.
Working Directory 설정
스냅샷을 추가할 때 파일명 중복 등의 문제를 피하기 위해 WORKDIR 을 통해 working directory를 설정해줘야 한다.
FROM node:10
WORKDIR /usr/src/app
COPY ./ ./
RUN npm install
CMD ["node", "server.js"]
소스코드 변경시 효율적인 빌드
기존 소스코드를 수정하면 다시 도커 파일을 빌드할 때 변경점을 감지해서 종속성, 모듈 설치 등의 모든 과정을 다시 시작한다.
이를 방지하기 위해 종속성 및 모듈에 대한 내용인 package.json
을 COPY하고 npm install
을 실행한 후 변경된 소스코드를 COPY해오면 기존의 캐시를 그대로 이용하므로 더욱 빠르게 빌드가 가능하다
Volume
도커 컨테이너에서 로컬의 파일을 복사하지 않고 volume을 이용하면 로컬 환경의 파일을 매핑할 수 있다.
docker run -p <로컬포트번호>:<컨테이너포트번호> -v <맵핑하지않는디렉터리> -v %cd%<맵핑할디렉터리>
- 이유는 모르겠으나 현재 위 명령어로 맵핑이 정상적으로 되지 않는 것 같음(2023.7.23 기준, Windows)
Docker Compose
웹 서버에서 DB 서버에 연결하는 등 컨테이너 간 통신이 필요할 때 별도의 설정이 필요하다
node와 redis 두 개의 컨테이너 간 연동을 위해 다음과 같이 docker-compose.yaml 파일을 작성할 수 있다.
version: "3"
services:
redis-server:
image: "redis"
node-app:
build: .
ports:
- "5000:8080"
이후 docker-compose up
명령을 통해 yaml 파일에 명시된 컨테이너를 동시에 실행시킬 수 있다.
빌드와 함께 실행하고 싶다면 docker-compose up --build
명령어를 사용하면 된다.
종료시키고 싶다면 docker-compose down
명령어를 사용하고, 백그라운드에서 실행을 원하면 -d
옵션을 붙여준다.
'웹 > Docker' 카테고리의 다른 글
[Docker]Travis CI, EB를 이용한 배포 (0) | 2023.07.25 |
---|---|
[Docker]개발 환경 vs. 운영 환경 (0) | 2023.07.24 |
[Docker]이미지 (0) | 2023.07.23 |
[Docker]기본 개념 (0) | 2023.07.21 |
댓글