본문 바로가기
Docker/Docker 주요 명령어 익히기

[Docker 기본 명령어] 9. docker history / cp / diff 명령어 알아보기

by Fletcher 2024. 8. 15.

 

반갑습니다!

이번 포스트에서는 $ docker history  $ docker cp  $ docker diff

세 개의 명령어에 대해서 알아보겠습니다 ^^

 

 

 

먼저 $ docker history에 대해서 알아보겠는데요

예시를 위해서 dockerfile을 하나 새로 만들어보겠습니다 ^^

 

 

vi 에디터로 Dockerfile-ubuntu라는 파일을 작성해보겠습니다 ^^

 

 

Dockerfile-ubunut의 내용은 예시 이미지와 같이 기재해보겠습니다 ^^

저번 예시와 마찬가지로 ubuntu:18.04 버전으로 연습해보겠습니다

 

 

dockerfile 작성 완료 후,

docker build를 통해 이미지 생성까지 해주세요 ^^!

 

 

 

이제 생성된 도커 이미지에 대해서 history를 조회해보겠습니다

$ docker history [이미지 이름] 명령어를 입력하니까

해당 이미지에 대한 이력이 조회되는데요

 

보시는 바와 같이 베이스 이미지 위에 어떤 작업 순서로

레이어가 쌓였는지에 대한 정보가 목록으로 조회됩니다 ^^

 

docker history는 이와 같이 해당 도커 이미지의 히스토리를 확인할 수 있는 명령어입니다!

 

 

 

 

 

 

다음으로 $ docker cp에 대해서 살펴보겠는데요

이 명령어는 컨테이너에서 특정 파일을 호스트 PC로 가져오거나

혹은 반대로 호스트 PC에서 특정 파일을 컨테이너 내에 삽입할 수 있는 명령어입니다 ^^

 

 

$ docker cp [컨테이너 파일 경로] [호스트PC경로] 순서로 명령어를 입력하시면

해당 컨테이너의 경로에 있는 파일을 호스트 PC의 지정 경로로 복사해옵니다 ^^

 

반대로 $ docker cp [호스트PC파일경로] [컨테이너경로] 순서로 명령어를 입력하시면

해당 호스트 PC 경로에 있는 파일을 컨테이너의 지정 경로로 삽입합니다 ^^!

 

 

 

000-default.conf 파일을 컨테이너에서 호스트 PC로 꺼내와서

vi 에디터로 열람을 해봤습니다 ^^

DocumentRoot 정보를 한 번 수정을 해보겠습니다

 

 

예시용으로 위와 같이 정보를 수정했습니다

경로에 /xxx를 추가했는데요 ^^

 

 

 

이번에는 $ docker cp 명령어를 이용해서

수정한 000-default.conf 파일을 반대로 호스트PC에서 컨테이너로 삽입해보겠습니다 ^^

그리고 $ docker exec 명령어로 해당 컨테이너 내부로 접속을 해보겠습니다

 

 

$ cat 명령어를 이용해서 해당 파일을 조회하니,

수정한 정보가 적용되어 있는 것을 볼 수 있겠습니다 ^^

 

 

 

이제 $ apache2ctl restart 명령어를 이용해서

수정 사항이 반영되도록 웹 서버를 재시작해보겠습니다

그럼 Warning 메세지가 출력되는데요

/var/www/html/xxx가 존재하지 않는다고 합니다 ^^

 

물론입니다 경로 설정만 해놨을 뿐 xxx라는 디렉토리를 만들지도 않았고,

해당 디렉토리에 index.html 파일이 존재하지도 않습니다 ^^

 

 

 

때문에 브라우저를 이용해서 해당 웹 서버로 접근하려고 해도

Not Found 에러 메세지가 화면에 출력되는 것을 확인할 수 있겠습니다 ^^

 

 

 

해당 디렉토리로 들어가보면 xxx 폴더가 없는 것을 명확하게 확인할 수 있겠습니다 ^^

 

 

 

 

 

 

 

이번에는 $ docker commit 명령어에 대해서 살펴보겠는데요

해당 명령어는 컨테이너의 변경사항을 적용하여 새 이미지 파일로 생성하는 기능을 합니다 ^^

 

아까의 컨테이너로 다시 접속해보겠습니다

 

이번에는 호스트 PC로 000-default.conf 파일을 꺼내와서 vi 에디터로 열람하는게 아니라,

컨테이너 내부에 접속해서 컨테이너에서 vi 에디터로

000-default.conf 파일을 열람해보고자 했는데요

 

당연히 command not found 에러 메세지가 출력 될 수밖에 없습니다 ^^

vi 에디터가 설치되어 있지 않으니까요

 

 

 

vi 에디터 설치를 위해

먼저 $ apt-get update$ apt-get install vim 명령어를 실행해주겠습니다 ^^

 

 

 

vi 에디터 설치 후 다시 해당 파일을 열람해보면

아래의 이미지와 같이 동작하는 것을 확인할 수 있겠습니다 ^^

 

 

 

이번에도 DocumentRoot 정보를 /var/www/html/xxx로 수정해보겠습니다 ^^

 

우리는 현재

$ docker commit 명령어를 연습해보고자 이와 같은 과정을 거치고 있습니다 !

컨테이너의 변경사항을 이미지 파일로 새로 생성하는 기능을 한다고 말씀드렸었죠 ^^

 

 

 

apache2ctl restart 명령어로 수정 사항을 반영하여 다시 시작하면

상기 이미지와 같이 에러 메세지가 출력되고,

하단 이미지와 마찬가지로 Not Found 화면이 출력됩니다 ^^

 

 

수정사항이 잘 반영된 것을 화면을 통해서 확인할 수 있겠습니다 ^^

 

 

 

이제 이 변경사항들을 반영해서 새로운 이미지로 만들어보겠습니다

이 때 $ docker commit 명령어를 사용하면 되겠습니다

 

 

이미지 생성 후 $ docker history 명령어로 해당 이미지의 이력을 조회하니

가장 위쪽에 우리가 작업한 내용이 반영된 레이어가 쌓여있는 것을 확인할 수 있겠습니다 ^^!

 

 

 

 

 

 

이번에는 $ docker diff 명령어에 대해서 알아보겠습니다 ^^

해당 명령어는 컨테이너가 실행되면서

본래의 이미지와 비교해서 변경된 파일 목록을 출력하는 기능을 합니다 !

 

 

컨테이너 생성 후 $ docker diff 명령어를 사용하여 조회했을 때 출력되는 내용입니다 ^^

 

 

 

여기서 vi 에디터를 이용해서 test.txt라는 파일을 만들고

다시 변경된 파일 목록을 조회하겠습니다 ^^

 

아까와는 달리 새로운 메세지가 목록에 포함되어 있는 것을 확인할 수 있겠습니다 !

 

$ docker diff 명령어 사용시 해당 파일에 어떤 작업이 수행된건지

알파벳 대문자로 축약표현 해주는데요 ^^

 

① A

파일 또는 디렉토리가 추가 되었다는 의미입니다

 

② D

파일 또는 디렉토리가 삭제되었다는 의미입니다

 

③ C

파일 또는 디렉토리가 수정되었다는 의미입니다

 

 

상기 예시에서 우리는 test.txt 파일을 새로 만들었으니

해당 변경 사항에 대해서 A라는 축약 표현으로 기록이 되겠죠? ^^

 

 

 

 

 

 

 

이번 포스트에서는

① $ docker history   ② $ docker commit   ③ $ docker diff

세 가지 명령어에 대해 알아보았습니다 ^^

다음 포스트에 이어서 다른 내용도 알아보겠습니다!