본문 바로가기
Docker

Docker - docker 기타 명령

by DGK 2021. 12. 18.

 

도커 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

도커(docker)의 기타 명령

도커(docker)의 기타 명령을 알아보고자 한다.

 

docker history

해당 명령은 docker image의 히스토리(history)를 확인하는 명령이다.

 

vi Dockerfile-ubuntu

 

docker build --tag myweb -f Dockerfile-ubuntu ./

 

docker history myweb

 

이처럼 "docker history 이미지명"의 명령을 사용하면, 해당 image의 히스토리를 볼 수 있다.

즉, 해당 이미지는 FROM, LABEL, RUN, ENTRYPOINT 등의 명령에 따라 layer(층) 형태로 생성된 것을 확인할 수 있다.

 

 

docker cp

해당 명령은 docker container에서 특정 파일을 호스트 PC로 가져오는 명령이다.

또한, 반대로 호스트 PC에서 docker container로 특정 파일을 넣을 수도 있다.

 

 

*예제

 

# docker container -> 호스트 PC

컨테이너에서 호스트 PC로 000-default.conf 파일을 가져온 결과

 

# 호스트 PC -> docker container

호스트 PC에서 컨테이너로 000-default.conf 파일을 넣어준 결과

 

 

docker commit

해당 명령은 docker container에서 작업하여 변경된 사항을 새로운 image 파일에 저장하여 해당 이미지 파일을 생성할 수 있는 명령이다.

 

 

*예제

vi 000-default.conf

 

해당 docker container는 vim가 설치되지 않아서 vi 명령을 해당 컨테이너에서 사용하지 못하는 상황이다.

 

apt-get install vim

 

따라서 해당 컨테이너에서 vi 명령을 사용하고자 "apt-get install vim" 명령으로 vi를 설치했다. (해당 컨테이너의 변경사항)

 

vi 000-default.conf의 결과

 

다시 "vi 000-default.conf" 명령을 사용하면, 이제는 해당 파일(000-default.conf)에 vi를 사용할 수 있다.

(해당 컨테이너에 vi를 설치했기 때문 : 작업 변경사항)

 

vi를 통해 해당 파일의 일부 수정

 

vi를 사용하여, 해당 파일의 일부분을 수정한 결과이다.

 

여기서 만약 해당 컨테이너를 삭제한 후, 기존의 image를 가지고 다시 컨테이너를 만들면 앞서 설치했던 vi(컨테이너 작업 변경사항)는 새로운 컨테이너에 존재하지 않는다. 따라서 이러한 문제를 해결하기 위해서는 docker commit 명령을 사용하면 된다.

 

즉, docker commit 명령을 사용하면 앞서 컨테이너에서 작업했던 변경사항을 포함하는 새로운 image를 만들 수 있다.

 

docker commit -m "add vim" mywebserver viweb

 

"docker commit" 명령을 사용하여, 기존의 docker container(mywebserver)에서 작업했던 변경사항(vi 설치작업)을 viweb이라는 새로운 image에 저장하여 해당 이미지를 생성한다.

 

docker kill mywebserver

 

그리고 기존에 작업했던 docker container를 중지하고 삭제한다.

 

docker run -d -p 9999:80 --name mywebserver --rm viweb

 

앞서 생성한 새로운 "viweb" image로 "mywebserver"라는 새로운 docker container를 다시 한 번 생성한다.

 

vi 000-default.conf

 

이렇게 생성한 docker container에서는 vi라는 프로그램을 설치하지 않아도 사용할 수 있다.

그 이유는 이전의 컨테이너에서 작업했던 변경사항이 새로운 viweb 이미지에 저장되어, 해당 컨테이너에서도 적용되기 때문이다.

 

 

docker diff

해당 명령은 기존의 docker image와 비교해서 해당 docker container에서 수정된 부분을 순서에 상관없이 출력해주는 명령이다.

 

만약, 특정 컨테이너에서 어떤 파일을 추가한 후 수정하고 마지막으로 삭제했다면 "docker diff" 명령은 어떠한 것도 출력하지 않는다. 그 이유는 기존의 image와 비교했을 때 결국 수정된 부분이 존재하지 않기 때문이다.

 

 

*참고 

 

   - A : 파일 또는 디렉토리 추가

   - D : 파일 또는 디렉토리 삭제

   - C : 파일 또는 디렉토리 수정

 

 

*예제

docker diff mywebserver

 

vi test.txt명령으로 test.txt 파일에 새로운 내용 추가

 

docker diff mywebserver

 

해당 결과가 변경된 이유는 "mywebserver"라는 컨테이너 안에 test.txt 파일을 새롭게 추가했기 때문이다.

즉, docker diff 명령은 기존 이미지와 비교하여 특정 컨테이너의 수정된 부분을 결과 값으로 보여주는 명령이다. 

 

 

댓글