포도가게의 개발일지
Docker? 본문
반응형
Docker?
- 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.
컨테이너?
- 배에 실는 네모난 화물 수송용 박스, 각각의 컨테이너 안에는 다양한 내용물을 넣을 수 있고 규격화되어 컨테이너선이나 트레일러등 다양한 운송수단으로 쉽게 옮길 수 있습니다.
- 서버에 입장에서 프로그램, 런타임 환경을 컨테이너로 추상화하여 어디서든 실행 가능하게 만들어준다.
why?
- 이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 immutable 하다. 컨테이너는 즉 이미지를 실행한 상태이며 추가되거나 변하는 값은 컨테이너에 저장됩니다. 같은 이미지에서 여러개의 컨테이너를 생성(실행)할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다.
즉 우리가 다양한 작업환경에서의 배포가 자유로워 질 수 있고, 빠른 배포가 가능해진다는 점입니다.
how?
Dockerfile 작성 -> Dockerfile 빌드 -> 생성된 image파일 실행
# 새로운 이미지 지정
FROM node:16-alpine
# app 디렉토리를 work 디렉토리로 설정.
# 어떤 경로에 실행할 것인지 cd랑 비슷
WORKDIR /app
#npm install 을 위해, package.json과 package-lock.json을 먼저 copy해둠
#빈번히 변경되는 파일일 수록 제일 나중에 작성하는게 좋음 layer system이기 때문에
COPY package*.json ./
#npm install 대신 ci를 씀으로써 package-lock을 읽어 버전이 바뀌는 것을 예방할 수 있다.
RUN npm ci
#현재 폴더에 있는 모든 파일을 /app폴더(현재경로)에 복사
COPY . ./
ENTRYPOINT [ "node", "dist/app.js" ]
# #가상 머신에 오픈할 포트
# EXPOSE 8080
# #컨테이너가 켜지자마자 실행할 명령어
# #npm start : package.json의 scripts에 있는 start 명령어를 실행
# CMD ["npm", "start"]
## 빌드 -f target docker file
## -t image name?
docker build -f Dockerfile -t docteset .
## -d detach bg 실행
## -p port 연결 port forwarding
docker run -d -p 8080:8080 docteset
Comments