./launcher enter 앱 실행 시 모든 것이 다시 빌드됨

경험이 부족한 사용자입니다. 아래 트랜스크립트 몇 줄을 공유하여 토론을 시작하고자 합니다:

# ./launcher enter app                                                                                                                                                                         
x86_64 아키텍처 감지됨.                                                                                                                                                                                                   
                                                                                                                                                                                                                        
경고: Discourse 기본 이미지를 다운로드하기 시작합니다.                                                                                                                                                     
이 과정은 네트워크 속도에 따라 몇 분에서 1시간까지 소요될 수 있습니다.                                                                                                                        
                                                                                                                                                                                                                        
인내심을 갖고 기다려 주세요.                                                                                                                                                                                                       
                                                                                                                                                                                                                        
2.0.20240602-0023: discourse/base에서 가져오는 중                                                                                                                                                                          
728328ac3bde: 추출 중 [=============================>                     ]  18.68MB/31.43MB                                                                                                                         
1c0ca3c0af81: 다운로드 완료
...

이것은 제가 예상했던 동작과 다릅니다.

docker ps 명령을 입력하면 이미 Discourse 컨테이너가 실행 중임을 확인할 수 있습니다. 제가 원하는 것은 실행 중인 해당 컨테이너에 셸을 진입하는 것일 뿐, 전체 앱을 다시 빌드하는 것이 아닙니다. 실제로 ./launcher 스크립트(약 746번째 줄 근처)를 살펴보면 ./launcher의 enter 명령은 제가 예상했던 동작, 즉 다음 명령을 실행하도록 되어 있는 것으로 보입니다:

docker exec -it app /bin/bash

이 작업을 수행하기 전에 다른 일련의 작업을 수행해야 하는 타당한 이유가 있습니까? 만약 그렇다면 제게 알려 주시기를 바랍니다. 그렇지 않다면, 경험과 기술이 있는 누군가가 이 질문을 유용한 제안으로 전환해 주실 수 있을 것입니다. 감사합니다.

네, 적어도 1년 이상 그렇게 해왔어요. 다행히 새 이미지를 다운로드하는 데는 보통 오래 걸리지 않고, 셸에 진입하기 전에 다른 큰 문제는 없는 것 같아요.

다만, 전혀 사용하지 않는 이미지들이 드라이브를 꽤 불필요하게 가득 채우고 있어요. 아마도 바로 눈에 띄지 않는 어떤 목적이 있는 것일 수도 있겠네요.

이것은 버그인 것 같은데요? 컨테이너에 진입하려고 하면 왜 새로운 이미지를 다운로드해야 하나요?

이 동작은 한 번만 수행되는 것 같습니다. ./launcher enter app을 두 번째로 실행하면 이미지 체크가 건너뜁니다. 아마도 여기에는 어떤 절충안이 있는 것 같습니다 …

이미 그 시점에 이미지가 이미 다운로드되었기 때문이 아닌가요?

네, 하지만 왜 애초에 그렇게 하려 했을까요?

기존 컨테이너에 진입하려는 것뿐입니다.

git pull을 수행하고 새로운 이미지를 가져옵니다. 이전에는 이 과정을 생략했을 때 업데이트가 안 된 상태로 인해 여러 사용자가 문제를 겪었기 때문입니다.

pull을 하지 않을 이유가 있다면, 대신 docker run 명령어를 사용하세요.

이것이 이유일 것 같다고 생각했습니다. 차가운 논리와 사용자 기대의 특성을 균형 있게 맞추는 일은 결코 쉽지 않죠.

이 부분은 시행착오를 겪으면서 배웠습니다. 이제 알고 보니, 그 설계 결정이 이해가 됩니다.

답변해 주셔서 감사합니다. 그리고 훌륭한 소프트웨어를 만들어 주셔서 감사합니다.

전체 컨테이너를 다시 빌드하는 것이 아닙니다. 단순히 docker_discourse에 대해 git pull을 실행하고 새로운 기본 이미지를 가져온 후, 예상대로 컨테이너에 적용하는 작업일 뿐입니다. 그래서 첫 번째 실행 이후에는 더 이상 그렇게 하지 않습니다. 디스크 공간이 극도로 부족하거나 10~30초가 상당한 시간이 되는 경우가 아니라면, 실제로는 큰 문제가 아닙니다.