본문 바로가기

Docker

도커 컨테이너 다루기

** 시작하세요 도커/쿠버네티스 도서를 기반으로 작성했습니다.

 

명령어 미리보기

docker -v
docker images
docker pull
docker create
docker ps
docker inspect (--type)
docker start
docker attach
docker stop
docker run
docker rm
docker container prune
docker rmi
docker image prune

▷ 도커 엔진 버전 확인

docker -v

도커는 다양항 기능이 빠르게 업데이트되고, 새로운 버전이 자주 배포되기 때문에 설치된 도커 엔진의 버전을 확인하는것은 매우 중요하다.

 

▷ 도커 이미지 목록 확인

docker images

현재 가지고 있는 이미지의 목록을 확인한다. 지금은 아무것도 없기 때문에 헤더부분만 노출된다.

 

▷ 도커 이미지 받아오기

docker pull [이미지이름]:[버전]

도커 허브에서 이미지를 내려받는다. 다시 이미지 목록을 확인하자.

처음엔 없던 이미지가 하나 추가됐다. 

 

▷ 도커 컨테이너 생성

docker create -i -t --name [컨테이너 이름] [이미지 이름]:[버전]

앞서 받은 이미지(ubuntu:20.04)를 활용해 컨테이너를 만든다. 이때, 반환되는 긴 문자열(cddda4544f0beb5636a3ef5cfb115b34574f0e4bc395657206732efcc40bd035)은 컨테이너의 고유ID 이다. --name 옵션으로 컨테이너의 이름을 지정(osubuntu)할 수 있다. 만약 이름을 지정하지 않았을 경우 이 ID를 이용해 컨테이너를 핸들링 할 수 있다.

 

만약 없는 이미지를 이용해 컨테이너를 만들면 어떻게 될까?

"Unable to find image 'ubuntu:18.04' locally"

이미지를 찾을수 없다는 메세지가 보인다. 그리고 도커 허브에서 이미지를 다운받아 컨테이너를 만든다. 결국 docker create 명령어는 도커 이미지가 있는지 검사하고, 없을 경우 docker pull 명령을 실행하고 받아온 이미지로 docker create 명령을 실행한다는 것을 알 수 있다.

 

참고로, --name 옵션이 중복될 경우 아래와 같은 에러를 보여준다. 이때 이미지는 받아오지만, 컨테이너는 생성하지 못한다.

▷ 도커 컨테이너 확인

docker ps

docker ps 명령어는 "실행중인" 컨테이너의 목록을 출력한다. 현재는 실행중인 컨테이너가 없기 때문에 아무것도 나타나지 않는다.

항목 의미
CONTAINER ID 컨테이너 고유 ID
IMAGE 컨테이너를 생성할때 사용한 이미지
COMMAND 컨테이너가 시작될때 사용할 명령어. 일반적으로 이미지에 미리 내장되어 있음.
CREATED 컨테이너가 생성된 이후 흐른 시간
STATUS 컨테이너의 상태(Up : 실행중, Exited : 종료, Pause: 중지)
PORTS 컨테이너가 개방한 포트와 호스트에 연결한 포트를 나열
NAMES 컨테이너의 고유한 이름 --name 옵션으로 지정
> docker rename [원래 이름] [바꿀 이름] 재정의 가능

 

실행여부와 상관없이 존재하는 모든 컨테이너의 목록을 확인하고 싶다면 -a 옵션을 사용한다.

-q 옵션을 사용하면 컨테이너 ID 목록만 출력할 수 있다.

사실 여기서 확인할 수 있는 컨테이너ID는 전체ID의 일부에 지나지 않는다. 전체 아이디를 확인할려면 docker inspect 명령어를 사용한다.

docker [구성단위(컨테이너, 이미지, 볼륨)] inspect (--type [구성단위]) [대상(컨테이너, 이미지, 볼륨)이름 또는 ID]

첫줄에 "Id" : "a74da2c6a0da150311fbb54a4a63f2a11b0fccae9e37b906d709366fe3513532" 부분이 컨테이너의 전체 ID다.

 

▷ 도커 컨테이너 실행

docker start [컨테이너 이름 또는 컨테이너ID]

osubuntu 라고 이름 붙인 컨테이너를 실행시키고 나면 docker ps 명령어로 실행중인 컨테이너를 확인할 수 있다.

▷ 도커 컨테이너 진입

docker attach [컨테이너 이름 또는 컨테이너ID]

이전에 osubuntu 컨테이너를 만들때 -i -t옵션을 사용해 상호입출력이 가능하게 만들었기 때문에 컨테이너에 내부에 진입할 수 있다. 

 

▷ 도커 컨테이너 나가기

// 컨테이너 내부에서
Ctrl + P,Q 또는 exit

일단 실행중인 컨테이너를 확인하고, 컨테이너 진입. 

1. Ctrl + P,Q는 컨테이너를 중지시키지 않고 나옴.

Ctrl + P,Q를 누르고 컨테이너를 빠져나와서 docker ps로 실행중인 컨테이너를 확인해보면 여전히 컨테이너가 실행중인것을 알 수 있다.

 

2. exit은 컨테이너를 중지시키면서 나옴.

exit 명령어로 컨테이너를 빠져나오고 docker ps 명령어로 확인해보면 컨테이너가 종료된 것을 알 수 있다.

 

▷ 도커 컨테이너 중지

docker stop [컨테이너 이름 또는 컨테이너ID]

실행중인 컨테이너를 중지시키고 docker ps 명령어로 보면 실행중이던 컨테이너가 사라진 것을 볼 수 있다.

▷ 도커 컨테이너를 실행하는 효율적인 방법

docker run -i -t --name [컨테이너 이름] [이미지 이름]:[버전]

centos7 버전의 리눅스가 설치된 컨테이너 안으로 진입한 모습이다. 지금까지 살펴본 과정에 따르면 컨테이너에 진입하기 위해서는 이미지를 받고, 이미지를 사용해 컨테이너를 생성하고, 컨테이너를 실행하고 그 이후에 진입한다고 했다. docker run 명령어는 이런 일련의 과정들을 한번에 실행해준다.

 

docker run 명령에 대해 공식사이트에 다음과 같은 설명이 있다.

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

 The docker run command first creates a writeable container layer over the specified image, and then starts it using the specified command. That is, docker run is equivalent to the API /containers/create then /containers/(id)/start.

docker run 명령은 먼저 지정된 이미지 위에 쓰기 가능한 컨테이너 계층을 만든 다음 지정된 명령을 사용하여 시작합니다. 즉, docker run은 API /containers/create 다음 /containers/(id)/start와 동일합니다.

여기에 더해서 attach가 가능한 컨테이너의 경우 컨테이너에 진입한 상태까지 완료된다.

 

다시 말해서 docker run 명령은 pull, create, start, attach 명령의 조합이다.

아래의 명령들과 같은 동작을 한다.

> docker create -i -t --name oscentos7 centos:7
> docker start oscentos7
> docker attach oscentos7

 

▷ 도커 컨테이너 삭제

docker rm (-f) [컨테이너 이름 또는 컨테이너ID]

-f 옵션은 컨테이너가 실행상태여도 강제로 삭제한다는 의미이다.

 

▷ 도커 컨테이너 일괄 삭제

// 전체 컨테이너 정지 후 삭제
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

// 전체 컨테이너 강제 삭제
docker rm -f $(docker ps -a -q)

//전체 컨테이너 일괄 삭제
docker container prune

컨테이너 삭제는 데이터를 모두 잃게 되므로 주의해서 사용해야 한다.

 

▷ 도커 이미지 삭제

docker rmi [이미지ID]

// 이미지 아이디를 인자로 받아서 삭제
docker rmi $(docker images -a -q)

// 컨테이너로 사용되지 않은 이미지 전체 삭제
docker image prune (-a)

 

'Docker' 카테고리의 다른 글

[Docker] Hyper-V 없이 Docker for Windows 사용하기  (0) 2020.10.02
도커 이미지, 도커 컨테이너  (0) 2020.09.18
Docker for Windows 설치  (0) 2020.09.18