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
- 코드상의 사소한 변경사형을
image
로build
하려면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)와 분리모드(Detached)모드를 지원한다.
연결모드, 분리모드
연결 모드
컨테이너의 출력결과를 수신할 수 있게 해주는 모드
- 이미지를 빌드할때 첫 항상 연결모드로 실행
분리 모드
- 컨테이너의 출력결과를 연결해서 보지않겠다는 모드
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
모드로 작업 가능.
- 컨테이너 실행동안 출력된 과거 로그 메세지들을 확인하려면