<aside> 🧑🏻 프로그래밍을 할 때 중간중간 잘 작동하는 지 확인하는 습관은 굉장히 중요하다. 어떤 명령어를 입력하고 난 뒤에 명령어가 정상적으로 수행됐는 지 어떻게 확인할 수 있는 지 방법을 찾아봐야 한다.

이 습관이 몸에 익으면 어떤 명령어를 수행하더라도 그 명령어가 어떻게 작동하는 지 파헤칠 수 있게 된다. 또한 어떤 명령어를 실행시킨 뒤에 에러가 생기더라도 금방 발견할 수 있어서 디버깅도 훨씬 수월하다.

</aside>

Docker를 사용하면 대부분의 코드가 컨테이너 내부에서 작동한다. 그러다보니 어떤 과정으로 처리됐는 지, 잘 처리는 됐는 지를 직접적으로 눈에 보이지 않는다. 이 때문에 Docker 학습에 어려움을 겪는다.

이를 해결하기 위해 우리는 2가지 방법을 이미 익혔다.

위 방법 중 docker exec -it은 실행 중인 컨테이너에만 쓸 수 있는 명령어이다. 종료된 컨테이너는 아래와 같은 에러가 발생한다.

Untitled

하지만 이미지를 만들면서 컨테이너를 실행시켜보면, 컨테이너의 특성상 명령어 처리가 다 끝나는대로 컨테이너가 종료된다. 그러다보니 내부적으로 어떻게 컨테이너가 형성됐는 지 디버깅을 하는데 어려움을 겪는다.

어떻게 해야 할까?

Dockerfile

FROM openjdk:17-jdk

...

**ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]** # 500초 동안 시스템을 일시정지 시키는 명령어

위 명령어를 추가함으로써 컨테이너가 바로 종료되는 걸 막을 수 있다. 그런 뒤에 docker exec -it를 활용해 컨테이너 내부에 직접 들어가서 디버깅을 하면 된다.