본문 바로가기

개발/Linux & DevOps

Dockerize 이야기 : Docker Image, Dockerfile 최적화 원리

FROM node
WORKDIR /app
COPY . /app
RUN node install
CMD ["node", "server.js"]

 

  • 도커 이미지는 여러개 레이어로 구성됨,
  • 레이어는 캐싱 됨. (재사용 가능)
  • Dockerfile 윗줄부터 순서대로 변경사항 체크
  • 변경사항이 있을 때 그 밑으로 전부 새로운 레이어를 만듬.

결론 : 빌드 시간을 줄이기 위해선, 변경이 잦을 수록밑으로 배치함.


고민의 흔적

git pull ▷ mvn package ▷ run (deploy)

이 과정을 어디서부터 docker container 에서 실행할 지?

  • 옵션 1 : docker run ▷ git pull ▷ mvn package ▷ run (deploy)
    • 장점 : 온전히 container 독립적. 빌드, 테스트, 배포 다 컨테이너 안에서 가능.
    • 단점 : docker image 사이즈가 큼 (git, mvn 다 갖춰진 base image)
  • 옵션 2 : git pull ▷ mvn package ▷ docker run  ▷ copy ▷ run (deploy)
    • 장점 : docker image 사이즈가 가벼움.
    • 단점 : 빌드가 도커서버 성능에 의해 좌우됨. docker container 가 실행만 독립적..
  • 옵션 3 : docker run (maven image) -v jarfiles --rm git pull  mvn package  docker stop (maven image) ▷ docker run (tomcat image) ▷ copy ▷ run (deploy)

이게 정답이었다. 이렇게 실행할 시 도커 이미지의 버전관리를 할 필요가 없어진다. 톰캣, 메이븐이 공식제공하는 이미지를 쓰기 때문에 자동으로 최신 버전으로 사용되고, 따라서 우린 우리 서비스만 관리하면 되게 된다.

 

반응형