반갑습니다!
이번 포스트에서는 $ 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
세 가지 명령어에 대해 알아보았습니다 ^^
다음 포스트에 이어서 다른 내용도 알아보겠습니다!
'Docker > Docker 주요 명령어 익히기' 카테고리의 다른 글
[Docker 기본 명령어] 8. docker exec, attach, 컨테이너 일괄 종료 및 삭제 명령어 사용해보기 (0) | 2024.08.13 |
---|---|
[Docker 기본 명령어] 7. docker system df와 docker container stats 명령어 사용해보기 (0) | 2024.08.13 |
[Docker 기본 명령어] 6. docker run 명령어 중 -v 옵션 사용해보기 (0) | 2024.08.13 |
[Docker 기본 명령어] 5. docker run의 -p 옵션과 컨테이너로 웹 서버 apache 사용해보기 (0) | 2024.08.13 |
[Docker 기본 명령어] 4. docker pause, unpause, stop, restart 명령어 사용해보기 (0) | 2024.08.13 |