소개
이 랩에서는 docker container diff 명령을 사용하여 Docker 컨테이너 내 파일 시스템 변경 사항을 검사하는 방법을 배우게 됩니다. 간단한 Nginx 컨테이너를 실행하는 것으로 시작하여 docker container diff를 사용하여 컨테이너 생성 시 이루어진 초기 파일 시스템 수정을 검사합니다.
초기 검사 후, 실행 중인 컨테이너 내부에서 변경 사항을 만들 것입니다. 마지막으로, docker container diff를 다시 사용하여 이러한 수정으로 인한 파일 시스템 차이점을 관찰하고 이해할 것입니다. 이 실습을 통해 디버깅 및 컨테이너 동작 이해를 위한 이 유용한 Docker 명령을 사용하는 실질적인 경험을 얻을 수 있습니다.
Nginx 컨테이너 실행
이 단계에서는 Docker 컨테이너 내에서 간단한 Nginx 웹 서버를 실행하는 방법을 배우겠습니다. Docker 를 사용하면 애플리케이션과 해당 종속성을 컨테이너로 패키징하여 다양한 환경에서 일관되게 실행할 수 있습니다.
먼저, Nginx 이미지가 시스템에서 사용 가능한지 확인해야 합니다. docker pull 명령을 사용하여 Docker Hub 에서 공식 Nginx 이미지를 가져올 수 있습니다. 이 명령은 이미지를 로컬 머신으로 다운로드합니다.
docker pull nginx:latest
이미지가 다운로드되고 있음을 나타내는 출력을 볼 수 있습니다. 다운로드가 완료되면 시스템의 이미지를 나열하여 이미지가 사용 가능한지 확인할 수 있습니다.
docker images
출력에 nginx가 나열되어야 합니다.
이제 Nginx 컨테이너를 실행해 보겠습니다. docker run 명령을 사용합니다. -d 플래그는 컨테이너를 분리 모드 (백그라운드) 로 실행하고, -p 80:80 플래그는 호스트 머신의 포트 80 을 컨테이너 내부의 포트 80 에 매핑합니다. 이를 통해 호스트 브라우저에서 Nginx 웹 서버에 액세스할 수 있습니다. 또한, 더 쉽게 식별할 수 있도록 --name my-nginx-container를 사용하여 컨테이너에 이름을 지정합니다.
docker run -d -p 80:80 --name my-nginx-container nginx
명령을 실행한 후 Docker 는 컨테이너 ID 인 긴 문자열을 출력합니다. 이는 컨테이너가 백그라운드에서 성공적으로 시작되었음을 나타냅니다.
컨테이너가 실행 중인지 확인하려면 실행 중인 모든 컨테이너를 나열하는 docker ps 명령을 사용할 수 있습니다.
docker ps
my-nginx-container가 Up 상태로 나열되어야 합니다.
마지막으로, 호스트 머신에서 Nginx 웹 서버에 액세스해 보겠습니다. 포트 80 을 매핑했으므로 curl을 사용하여 포트 80 의 localhost에 HTTP 요청을 보낼 수 있습니다.
curl localhost
출력에서 기본 Nginx 환영 페이지 HTML 을 볼 수 있습니다. 이는 Nginx 컨테이너가 실행 중이며 액세스할 수 있음을 확인합니다.
docker container diff 를 사용하여 초기 파일 시스템 변경 사항 검사
이 단계에서는 Docker 컨테이너가 시작될 때 발생하는 파일 시스템 변경 사항을 검사하는 방법을 살펴보겠습니다. Docker 는 계층화된 파일 시스템을 사용하며, 컨테이너가 실행되면 이미지 계층 위에 새로운 쓰기 가능한 계층이 추가됩니다. docker container diff 명령을 사용하면 컨테이너가 생성된 이후 이 쓰기 가능한 계층에 도입된 차이점을 확인할 수 있습니다.
docker container diff 명령은 컨테이너 이름 또는 ID 를 인수로 사용합니다. 이전 단계에서 시작한 Nginx 컨테이너의 이름인 my-nginx-container를 사용합니다.
docker container diff my-nginx-container
컨테이너를 시작한 직후 이 명령을 실행하면 파일 및 디렉토리 목록이 표시될 것입니다. 출력은 기본 이미지와 비교하여 컨테이너의 파일 시스템에서 변경된 사항을 보여줍니다. 출력 형식은 일반적으로 다음과 같습니다.
A는 파일 또는 디렉토리가 추가되었음을 나타냅니다.C는 파일 또는 디렉토리가 변경되었음을 나타냅니다.D는 파일 또는 디렉토리가 삭제되었음을 나타냅니다.
처음에 보이는 변경 사항은 임시 파일, 로그 파일 생성 또는 시스템 디렉토리 변경과 같은 컨테이너의 시작 프로세스와 관련이 있는 경우가 많습니다. 이는 컨테이너가 시작될 때 컨테이너의 쓰기 가능한 계층에서 생성되거나 수정되는 파일 및 디렉토리입니다.
이러한 초기 변경 사항을 이해하면 컨테이너가 시작될 때 내부적으로 어떤 일이 발생하는지, 그리고 쓰기 가능한 계층이 어떻게 채워지는지 알 수 있습니다.
컨테이너 내부 변경 사항 적용
이 단계에서는 실행 중인 Nginx 컨테이너 내부의 파일 시스템을 변경해 보겠습니다. 이를 통해 컨테이너 내의 수정 사항이 쓰기 가능한 계층에 어떻게 기록되는지 보여줍니다.
docker exec 명령을 사용하여 컨테이너 내에서 명령을 실행합니다. docker exec 명령을 사용하면 실행 중인 컨테이너에서 명령을 실행할 수 있습니다. 컨테이너 이름 (my-nginx-container) 과 실행하려는 명령을 지정해야 합니다.
먼저, 컨테이너의 /tmp 디렉토리 내에 새 파일을 생성해 보겠습니다. touch 명령을 사용합니다.
docker exec my-nginx-container touch /tmp/my_new_file.txt
이 명령은 my-nginx-container 내부에서 touch /tmp/my_new_file.txt를 실행합니다. 명령이 성공하면 아무런 출력이 표시되지 않습니다.
다음으로, 기본 Nginx index 파일을 수정해 보겠습니다. 기본 Nginx 환영 페이지는 일반적으로 컨테이너 내부의 /usr/share/nginx/html/index.html에 있습니다. echo 명령을 사용하여 이 파일에 텍스트를 추가합니다.
docker exec my-nginx-container echo "<h1>Hello from LabEx!</h1>" >> /usr/share/nginx/html/index.html
이 명령은 HTML 문자열 "
Hello from LabEx!
"를 컨테이너 내부의index.html 파일에 추가합니다.
변경 사항이 적용되었는지 확인하려면 호스트 머신에서 다시 curl을 사용하여 Nginx 서버에 액세스할 수 있습니다.
curl localhost
이제 원래 Nginx 환영 페이지 내용 다음에 "
Hello from LabEx!
"가 표시되어야 합니다. 이는 컨테이너 내부의index.html 파일이 수정되었음을 확인합니다.
우리가 수행한 이러한 변경 사항 (새 파일 생성 및 기존 파일 수정) 은 my-nginx-container의 쓰기 가능한 계층에 기록됩니다. 다음 단계에서는 docker container diff를 다시 사용하여 이러한 특정 변경 사항을 확인합니다.
docker container diff 를 사용하여 업데이트된 파일 시스템 변경 사항 검사
이 마지막 단계에서는 docker container diff 명령을 다시 사용하여 이전 단계에서 수행한 파일 시스템 변경 사항을 관찰합니다. 이를 통해 컨테이너 내부의 작업이 쓰기 가능한 계층에 어떻게 반영되는지 명확하게 보여줍니다.
이전 단계에서 /tmp/my_new_file.txt라는 새 파일을 생성하고 my-nginx-container 내부의 /usr/share/nginx/html/index.html 파일을 수정했음을 기억하십시오. 이제 컨테이너에서 docker container diff를 다시 실행해 보겠습니다.
docker container diff my-nginx-container
이번에는 출력에 우리가 수행한 변경 사항이 포함되어야 합니다. 다음과 유사한 줄이 표시되어야 합니다.
A /tmp/my_new_file.txt
C /usr/share/nginx/html/index.html
A /tmp/my_new_file.txt 줄은 /tmp 디렉토리에 my_new_file.txt라는 새 파일이 추가 (Added) 되었음을 나타냅니다.
C /usr/share/nginx/html/index.html 줄은 /usr/share/nginx/html/ 디렉토리의 index.html 파일이 변경 (Changed) 되었음을 나타냅니다.
이 출력은 docker container diff가 컨테이너가 시작된 이후 컨테이너의 파일 시스템에 대한 수정 사항을 효과적으로 보여주는 것을 확인합니다. 이러한 변경 사항은 기본 이미지 계층과 별도로 컨테이너의 쓰기 가능한 계층에 저장됩니다. 이것은 Docker 의 계층화된 파일 시스템과 컨테이너가 상태를 유지하는 방식의 기본적인 개념입니다.
컨테이너가 제거되면 이 쓰기 가능한 계층도 제거되며, 볼륨 또는 바인드 마운트를 사용하여 지속되지 않는 한 컨테이너 내에서 수행된 모든 변경 사항이 손실됩니다 (이는 다른 랩의 주제입니다).
정리하려면 컨테이너를 중지하고 제거할 수 있습니다.
docker stop my-nginx-container
docker rm my-nginx-container
이것으로 docker container diff 탐색을 마칩니다. 컨테이너가 시작될 때 초기 파일 시스템 변경 사항을 검사하는 방법과 실행 중인 컨테이너 내부에서 수행한 변경 사항을 확인하는 방법을 배웠습니다.
요약
이 랩에서는 docker run을 사용하여 간단한 Nginx 컨테이너를 실행하는 방법을 배웠으며, 포트 매핑을 통해 액세스할 수 있도록 하고 docker ps로 상태를 확인했습니다. 그런 다음 docker container diff 명령을 탐색하여 컨테이너의 이미지 계층이 생성 시 도입한 초기 파일 시스템 변경 사항을 검사했습니다.
이후, 실행 중인 컨테이너의 파일 시스템 내에서 수정을 수행하고 docker container diff를 다시 사용하여 이러한 변경 사항이 Docker 에 의해 어떻게 추적되고 반영되는지 관찰하고 이해하는 연습을 했습니다. 이를 통해 컨테이너의 현재 상태와 기본 이미지 간의 차이점을 식별하는 데 있어 이 명령의 유용성을 강조했습니다.



