Home Docker(3)
Post
Cancel

Docker(3)

Docker(2)

Dockerfile, Cache?

1
2
3
4
5
6
FROM node:14.9.0  # 1
WORKDIR /app  # 2   
COPY . /app # 3
RUN npm install # 4
EXPOSE 80 # 5
CMD ["node","server.js"]  # 6
  • 코드상의 사소한 변경사형을 imagebuild하려면 npm install과 같이 시간이 오래 걸리는 프로세스를 실행시켜 작업자를 까다롭게 만들 수 있음.
  • 이러한 문제를 해결하기 위해 Docker에서는 파일들을 비교하여 변경 사항이 있는 layer에 대해서만 다시 작업
    • 예를 들어 위의 Dockerfile 에서 EXPOSE 부분의 변경 사항만 적용한 새로운 이미지 레이어를 생성.
    • 이를 통해 Dockerfile의 최적화 진행 가능
  • 변경된 Dockerfile
    • 기존에 설정되었던 COPY . /app 부분은 폴더의 전체 범위의 변경사항을 캐쉬함으로 레이어를 분리하여 최적화 가능.
    • package.json파일에 변경 사항이 있다면 그 아래에 있는 RUN npm install을 실행하겠다는 의미로 해석됨.
1
2
3
4
5
6
7
8
COPY package.json /app
FROM node:14.9.0
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 80
CMD ["node","server.js"]


실행중인 컨테이너의 로그 확인하기

  • 로그를 심어놓은 부분.
1
2
3
4
5
6
app.post('/store-goal', (req, res) => {
  const enteredGoal = req.body.goal;
  console.log(enteredGoal); //  해당 부분.
  userGoal = enteredGoal;
  res.redirect('/');
});
  • 위와 같이 이미지를 빌드하였을때 도대체 어디서 로그를 확인할 수 있는걸까?
    • 도커는 연결모드(Attached)와 분리모드(Detached)모드를 지원한다.
      • docker run 모드인 경우 기본적으로 연결모드 지원
      • docker start 모드인 경우 기본적으로 분리모드 지원


연결모드, 분리모드

  • 연결 모드

  • 컨테이너의 출력결과를 수신할 수 있게 해주는 모드

    • 이미지를 빌드할때 첫 항상 연결모드로 실행

attached_mode

  • 분리 모드

  • 컨테이너의 출력결과를 연결해서 보지않겠다는 모드
    • docker run에서 해당 설정을 분리모드로 변경하려면 -d 명령어를 붙이면 된다
    • docker run -p [local:container] -d [image_name]
    • 이미 실행된 컨테이너를 attached모드로 보고 싶다면 실행된 컨테이너를 attach하면된
      • docker attach [container_name]
  • 컨테이너의 로그 보기
    • 컨테이너 실행동안 출력된 과거 로그 메세지들을 확인하려면 docker logs [container_name] 명령어 사용
      • logs -f 다음과 같이 logs명령어 뒤에 -f를 붙이면 로그 출력후 attached 모드로 작업 가능.
This post is licensed under CC BY 4.0 by the author.