[Docker] image 생성 후 push

정유진·2023년 3월 29일
0

etc

목록 보기
2/2
post-thumbnail

Dockerfile

FROM node:18-alpine

WORKDIR /app 

COPY package.json package-lock.json ./

RUN npm ci

COPY index.js ./

ENTRYPOINT [ "node", "index.js" ]
  • 프로젝트 최상단에 Dockerfile 생성
  • FROM
    base가 될 image, 내가 nodejs 프로젝트를 생성해서 node를 기본 이미지로 작성했다. django, ubuntu, tomcat 등 여러가지가 올 수 있다.
  • WORKDIR
    컨테이너 안에서 Root가 될 디렉토리. 이 경로 이하에 내 프로젝트가 설치된다고 생각하면 된다. docker 실행 후 터미널에 접속해 보면 /app 디렉토리가 생성되어 있는 것을 확인할 수 있다.
  • COPY
    package.json은 내가 /app에 copy할 source이고 ./ 는 destination 경로 (paste할 위치). Dockerfile은 상단을 layer0으로 보고 레이어를 쌓아 올려가듯 작성한다. 이 때 변화가 적은 파일에서 변화가 많은 파일 순으로 작성하게 된다. 상위 레이어에서 변화가 생겼더라도 하위 레이어는 변화되지 않은 이상 캐싱된 값을 유지한다.
  • RUN
    실행할 명령어
  • ENTRYPOINT
    컨테이너가 실행될 때 default로 실행되는 명령어, 만약 컨테이너 실행 시 기존에 작성된 값이 아닌 인자값을 받아서 동적으로 실행해야할 경우 ENTRYPOINT 대신 CMD를 쓴다.

cf1. Dockerfile을 쓰는 규칙

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

cf2.🧐 npm ci?

npm install과의 차이점
1. package.json, package-lock.json 파일이 변경되지 않음
2. package-lock.json 파일 기반으로 dependency 설치
3. package.json과 버전 비교해서 매칭 되지 않을 경우 에러 발생
4. 실행 시 node_modules 삭제 후 설치
5. CI/CD 환경에서 안정적

build: 이미지 생성

docker build -f Dockerfile -t test-docker .
  • -f Dockerfile의 이름 (보통 Dockerfile로 짓는다.)
  • -t 내가 만들 Repository의 name. 여기서 말하는 repository의 개념은 git과 유사하다.
  • Dockerfile의 위치 (현재 경로여서 .)

images: 생성된 이미지 확인

docker images

run: 컨테이너 생성

docker run -d -p 9080:9080 test-docker
  • -d detach하여 백그라운드에서 동작
  • -p 내 로컬의 port: docker port 연동

tag: 이름 변경

Docker tag test-docker:latest $(docker계정)/$(repo이름):$(버전)
  • 새로운 이름으로 image가 생성된다.

push: 이미지 배포

docker push $(docker계정)/$(repo이름):$(버전)
profile
느려도 한 걸음 씩 끝까지

0개의 댓글