토이 프로젝트를 올리면서 깃헙에 리드미를 작성하다 보니, 누구나 구축을 편하게 할 수 있게 하는 것이 중요함을 깨달았습니다. 제가 프로젝트 한 내용들과 필요한 것들을 패키징을 하는 무언가가 필요했는데요. 이것을 위해서, 관련된 도커의 기능들을 공부하고자 합니다.

 

 명령어의 원리나 내부 구조 등은 언젠가 여기에 쓸 날이 올 듯 싶습니다. 이번 시간에는 .dockerignore에 대해서 알아보고, 간단하게 실습해 보겠습니다.

 


 제가 관리하는 sample django project의 루트에는 3개의 파일이 있습니다.

 

 먼저, Auto라고 표시된 script를 이용해서, django 프로젝트를 초기화  해 보겠습니다.

 

 

 이 글에 있는 Auto.ps1에서 7 ~ 8번째 줄을 추가하였습니다. 보시면 test로 이동한 후에, 뭔가 작업을 하고, 다시 test의 상위 폴더로 이동해서, requirements.txt를 뿌렸습니다.

 

 요래 실행하시면, 가상 환경에 django와 pytz, asgire, sqlparse 등이 깔리면서, 프로젝트가 초기화 되게 됩니다. 그리고 루트 폴더 밑에 파일 하나와 venv, test 폴더가 생성되게 됩니다.

 

 

 이 상태에서 시작해 보겠습니다.

 


 Dockerfile은 위와 같습니다. 뭔지 모르겠지만, 그대로 입력해 봅시다.

 

 

 그리고 .dockerignore 파일에는 아무 것도 입력하지 않겠습니다. .gitignore를 한 번이라도 보셨다면, 무슨 역할을 하는 것인지 대략 짐작가실 텐데요. docker를 빌드할 때, 어떤 파일을 제외시킬 것인지를 명시하는 파일입니다. 이 폴더 말고 하위 폴더들에는 도커이그노어 파일이 없습니다. 그리고, 해당 파일에는 아무 내용이 없으니, 빌드할 때 제외가 될 파일은 없습니다. 

 

 

 dockerfile이 있는 경로에서, tag를 sample이라는 이름으로 합시다. 그러려면, -t 옵션을 주고 sample을 입력해야 합니다. 다음에 .이 있는데요. 이는 현재 경로에 있는 Dockerfile을 보라는 의미입니다. 이 문서에 잘 나와 있어요.

 

 

 다음에 docker run을 할 건데요. sample이라는 컨테이너를 run 시킵니다. 앞에 -p 8000:8000이 붙었는데요. 컨테이너 포트 8000을 호스트의 8000번 포트로 대응시킨다는 의미입니다. 저는 윈도우에서 Docker desktop을 이용하고 있으니, 이제 여기에서 컨테이너의 상태를 보도록 하겠습니다.

 

 

 sample이라는 컨테이너가 보이는데요. IN USE 부분을 누른 다음에, CLI를 눌러 봅시다.

 

 

 그러면, 이런 식으로 CLI가 뜨게 되는데요. app으로 이동 후에 ls를 입력해 봅시다. 그러면, venv와 Auto.ps1과 같은 쓸데 없을 법한 파일도 같이 내부에 올라와 있음을 알 수 있어요.

 


.dockerignore에 아래와 같이 추가해 보겠습니다.

 

 1번째 줄은 .idea 밑에 있는 것들을, 2번째는 venv에 있는 것들을 무시한다는 의미입니다. 뒤에 /가 붙었으니, directory를 무시하게 됩니다. 다음에 3번째 줄에 Auto.ps1이라고 적어주었는데요. 이는 이 파일이 있는 위치의 Auto.ps1을 무시한다는 의미입니다. 이 파일이 있는 디렉토리에 있는 폴더와 파일들을 보겠습니다.

 

 

 .dockerignore를 제외한 test, venv, Auto.ps1, Dockerfile, requirement.txt가 있어요. 이들이 컨테이너에 올라갔습니다. 그런데, 이제 이그노어 파일에 venv/하고, Auto.ps1, 그리고 .idea/를 제거합니다. 그러면, 아래와 같이 상황이 그려질 겁니다.

 

 

 여기서 주황색으로 표시된 부분은 빌드가 될 때, 포함이 되지 않는 것들입니다. 정말 그런지 다시 build를 하고 run을 해 보겠습니다.

 

 

 sample이라는 이름으로 다시 돌려 보겠습니다.

 

 

 CLI 모드로 접근해서, app 폴더 밑에 있는 내용들을 보시면, venv 폴더와 Auto.ps1이 빠진 것을 볼 수 있습니다. 간단하게 정리하면 도커 이그노어 파일은 깃그노어 처럼 빌드할 때 무시할 파일이나 폴더 등을 적어주면, build 되는 과정에서 무시할 수 있다는 것입니다.