본문 바로가기

STUDY/Docker & Kubernetes: 실전 가이드 -2022년판

4. Docker 이미지/컨테이너 관리하기2

docker rm, rmi

 

> docker ps -a
> docker rm {container_id}
> docker rm {container_id1} {container_id2} {container_id3} ....
> docker ps -a

docker run 명령어는 새로 컨테이너를 만들면서 동작하기때문에 docker ps -a로 도커 컨테이너 리스트를 보면 많은 컨테이너가 존재하는걸 확인할 수 있다. 하지만 더이상 사용하지 않는 컨테이너가 계속 남아있는건 자원의 낭비이기 때문에 삭제해주어야 하고 이때 사용하는 명령어가 docker rm이다. docker rm은 컨테이너를 삭제하는 명령어인데, 실행중인 컨테이너는 삭제하지 못하기 때문에 실행중인 컨테이너도 지우고 싶으면 docker stop으로 먼저 컨테이너를 종료시켜야한다.

 

> docker images
> docker rmi {image_id}
> docker image prune

도커 이미지를 삭제하고 싶을때는 docker rmi 명령어를 사용하면 된다. 이때 해당 이미지를 사용중인 컨테이너가 있다면 삭제할 수 없다. 하나하나 모든 이미지를 삭제하기 귀찮다면 docker image prune 명령어를 사용하면 된다. 해당 명령어는 현재 만들어진 컨테이너가 없는 모든 이미지들을 한번에 삭제한다.

 

> docker run --help
...
        --rm    Automatically remove the container when it exit
...
> docker run -p 3000:80 -d --rm {image id}
> docker stop {container name} 
> docker ps -a
방금 실행한 컨테이너가 없다

계속 사용해야하는것이 아니라면 docker run 명령어로 만들어진 컨테이너는 종료된 이후에 삭제해주어야 하고 이는 굉장히 귀찮은 과정이다. 그래서 docker run에는 --rm이라는 옵션이 있다. 해당 옵션을 추가하면 컨테이너가 종료될때 자동으로 삭제까지 해준다.

 

 


docker image inspect

 

> docker images
> docker image inspect {image_id}

사용하고있는 도커 이미지에대해 자세한 정보를 알고싶다면 docker image inspect 명령어를 사용하면 된다. 명령어를 실행하면 이미지에대한 정보가 json 형태로 출력된다. created 속성을 보면 이미지가 만들어진 시간을 알 수 있고, env 속성을 보면 환경변수를 알 수 있고, layers 속성을 보면 이미지를 구성하고있는 레이어를 볼 수 있다. 그 외에도 많을 정보를 알 수 있으니 한번쯤 훑어보는것도 나쁘지않다.

 

 


docker cp

 

> docker cp dummy/. {container_id}:/test
> docker cp {container_id}:/test dummy

컨테이너는 도커를 실행하는 로컬 환경과 분리되어 동작하고 별도의 저장공간을 가지고 있다. 하지만 docker cp 명령어를 사용하면 컨테이너와 로컬 환경에 있는 파일을 복사하여 주고 받을 수 있다. docker cp 명령어와 복사될 파일/폴더의 경로, 전달될 파일/폴더의 경로를 적으면 된다. 이때 컨테이너의 경로는 Dockerfile에서 지정한 WORKDIR을 기준으로 한다.

 

 


docker run --name, docker build --t

 

> docker images
> docker run -d {image_id}
> docker ps -a

docker images 명령어로 지금까지 만든 이미지들를 보면 이름(repository)과 태그가 비어있다. 그리고 docker run으로 아무 이미지나 컨테이너로 띄우고 docker ps -a로 컨테이너 리스트를 보면 컨테이너 이름(names)이 자동으로 지정되어 있다. 이렇게 이미지나 컨테이너는 이름을 가질 수 있고, 이를 지정할 수 있어야 추후 이미지와 컨테이너를 관리하는데 수월하다.

 

> docker run --help
...
    --name string    Assign a name to the container
...
> docker run -d --name {name} {image_id}
> docker stop {name}
> docker rm {name}

컨테이너의 이름을 지정하기 위해서 docker run --help 명령어로 --name 옵션을 사용하면 컨테이너에 이름을 지정할 수 있다는 사실을 확인하였다. --name 옵션을 사용하여 컨테이너에 이름을 지정하면, 컨테이너를 띄운 이후 docker stop으로 컨테이너를 정지시키거나 docker rm으로 컨테이너를 삭제할 때 사용할 수 있다.

 

> docker images
REPOSITORY    TAG    IMAGE ID    CREATED    SIZE
...

docker images로 이미지 리스트를 보면 이름(repository)과 태그(tag)가 있는걸 확인할 수 있다. 여기서 이미지의 이름은 동일한 역할을 하는 이미지 그룹의 이름이고, 태그는 이미지 그룹에서 하나의 특정 이미지를 나타내는데 사용한다. 이전에 Dockerfile에서 FROM node를 사용하여 node라는 이름의 이미지를 가져왔는데, 여기서 태그는 따로 지정하지 않았으므로 자동으로 latest 태그 이미지를 가져온다. 즉 FROM node:latest와 동일한 동작을 수행하였다.

 

> docker build --help
...
    -t Name and a tag in the 'name:tag' format
...
> docker build -t {name}:{tag} .
> docker images
docker build --help를 통해 -t 옵션을 사용하면 이미지를 빌드할 때 이름과 태그를 지정할 수 있다는것을 알았다. 실제로 -t 옵션을 사용하여 도커 이미지를 빌드하고 이미지 리스트를 확인해보면 지정한 이름과 태그로 이미지가 생성되었다는것을 확인할 수 있다.
728x90