본문 바로가기
Docker & Kubernetes

도커 명령어와 실습으로 배우는 컨테이너 기초

by 떡쇠 2024. 1. 27.
반응형

컨테이너 사용의 기본은 도커 명령어다. 이 글에선 리눅스 우분투 환경에서 도커를 실습한다.

도커 설치 후 제대로 설치가 되었는지 확인을 위해 가장 먼저 사용해 볼 명령어는 docker version이다.

이 명령은 도커 버전을 확인하는 명령어다.

docker --version

출력 결과 => Docker version 24.0.7, build afdd53b

이 명령어는 Docker의 버전 정보만 간략하게 출력한다. 

docker version

=> 출력 결과
Client: Docker Engine - Community
 Version:           20.10.5
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        55c4c88
 Built:             Tue Mar  2 20:14:53 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.5
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       363e9a8
  Built:            Tue Mar  2 20:13:27 2021
  OS/Arch:          linux/amd64
  Experimental:     false

이 명령어는 클라이언트와 서버(도커 엔진) 양쪽의 상세한 정보를 확인할 수 있다.

 

실습에 앞서, 먼저 도커 명령어의 기본 구조를 이해하고 주요 명령어들을 체계적으로 살펴볼 것이다.

 

도커 명령어의 구조

도커 명령어는 아래의 표 처럼 docker 상위커맨드 하위커맨드 옵션 의 구조를 가지고 있다.

상위 커맨드는 대상을 지정하고 하위 커맨드는 대상이 수행할 행위를 지정한다.

도커 1.13 이상에선 상위 커맨드 중 container, image는 생략 가능하다.

docker 명령어 상위 커맨드 하위 커맨드 옵션
docker container start

-a
-i
    stop

-t
    create -a
-e
-i
-p
-v
....
    run -d
-e
-i
-t
-p
-v
....
    exec  
  image pull  
    serch  
  volume create  
    rm  
  network create  
    rm  

 

컨테이너 조작 관련 하위 커맨드 (상위 커맨드 container)

컨테이너를 실행하거나 종료하고 컨테이너 목록을 확인하는 등 컨테이너를 다루기 위해 사용하는 커맨드.

하위 커맨드 내용 상위 커맨드 생략 가능 여부 주요 옵션
start 컨테이너 실행 O -i
stop 컨테이너 정지    
create 도커 이미지로 컨테이너 생성 O --name -e -p -v
run 도커 이미지를 다운받고 컨테이너를 생성해 실행한다. (이미지가 없는 경우만 다운로드),  docker image pull, docker container create, docker container start 명령어를 합친 것과 같다. O --name -e -p -v -d -i -t
rm 정지 상태의 컨테이너를 삭제 O -f -v
exec 실행 중인 컨테이너 속에서 프로그램을 실행 O -i -t
ls 컨테이너 목록을 출력 docker ps 로 생략 -a
cp 도커 컨테이너와 도커 호스트 간에 파일을 복사 O  
commit 도커 컨테이너를 이미지로 변환 O  

 

 

이미지 조작 관련 하위 커맨드 (상위 커맨드 image)

이미지를 내려받거나 검색하는 등 이미지와 관련된 기능을 실행하는 커맨드.

하위 커맨드 내용 상위 커맨드 생략 가능 여부 주요 옵션
pull 도커 허브 등의 도커 레지스트리에서 이미지를 내려받음 O  
rm 도커 이미지 삭제 docker rmi 로 생략  
ls 내려받은 이미지 목록 출력 X  
bulid 도커 이미지 생성 O -t

 

볼륨 조작 관련 하위 커맨드 (상위 커맨드 volume)

볼륨의 생성, 목록 확인, 삭제 등 볼륨 관련 기능을 실행하는 커맨드.

볼륨이란 컨테이너에 마운트 가능한 스토리지(저장 공간)다.

하위 커맨드 내용 상위 커맨드 생략 가능 여부 주요 옵션
create 볼륨 생성 X --name
inspect 볼륨의 상세 정보 출력 X  
ls 볼륨의 목록 출력 X -a
prune 현재 마운트되지 않은 볼륨을 모두 삭제 X  
rm 지정한 볼륨 삭제 X  

 

네트워크 조작 관련 하위 커맨드 (상위 커맨드 network)

도커 네트워크의 생성, 삭제, 컨테이너의 네트워크 접속 및 접속 해제 등 도커 네트워크와 관련된 기능을 실행하는 커맨드.

도커 네트워크란 도커 요소 간의 통신에 사용하는 가상 네트워크다.

하위 커맨드 내용 상위 커맨드 생략 가능 여부 주요 옵션
connect 컨테이너를 도커 네트워크에 연결 X  
disconnect 컨테이너의 도커 네트워크 연결 해제 X  
create 도커 네트워크 생성 X  
inspect 도커 네트워크의 상세 정보를 출력 X  
ls 도커 네트워크의 목록을 출력 X  
prune 현재 컨테이너가 접속하지 않은 네트워크 모두 삭제 X  
rm 지정한 네트워크 삭제 X  

 

 

단독으로 쓰이는 커맨드

상위 커맨드 없이 단독으로 쓰이는 특수한 커맨드 4가지가 있다. 주로 도커 허브의 검색이나 로그인에 사용되는 커맨드이다.

단독 커맨드 내용 주요 옵션
login 도커 레지스트리에 로그인 -u -p
logout 도커 레지스트리에 로그아웃  
search 도커 레지스트리를 검색  
version 도커 엔진 및 명령행 도구의 버전을 출력  

 

그 밖의 상위 커맨드

이 밖에도 많은 상위 커맨드가 있다. 하지만 대부분은 도커 스윔과 관련된 커맨드로서 초보자 수준에서는 사용할 일이 없다. 숙련자가 된 이후에 필요에 맞게 확인한다.

* 도커 스윔: 컨테이너 오케스트레이션 기능을 제공한다. (쿠버네티스와는 별개의 도구)

 

 

도커 엔진 시작하기/종료하기

도커 엔진 실행

sudo systemctl start docker // 도커 엔진을 실행할 수 있다.

 

도커 엔진 활성화

sudo systemctl enable docker // 시스템 부팅 시 자동으로 시작하도록 설정할 수 있다.

 

도커 엔진 상태 확인하기

sudo systemctl status docker // 도커 엔진의 현재 상태를 보여준다.

도커의 활성 상태, 로그 메시지, 프로세스 ID, 메모리 사용량 등이 출력된다.

 

도커 컨테이너 생성 / 실행 / 정지 / 삭제

도커 컨테이너 생성 및 실행

docker run 이미지_이름

docker run 명령어는 이미지가 없는 경우 도커 허브에서 다운로드 후 컨테이너 생성까지 한번에 동작한다.

도커 허브에 접근이 안되는 내부 망인 경우는 이미지 명 뒤에 레지스트리 주소를 지정하면 특정 레지스트리에서 이미지를 다운로드 할 수도 있다.

nginx 이미지가 없는 상태로 run을 했기 때문에 자동으로 도커 허브에서 다운로드 후 컨테이너 생성을 완료하였다.

 

컨테이너 생성 시 주요 옵션

옵션 형식 내용
--name 컨테이너_이름 컨테이너 이름 지정
-p 호스트_포트번호:컨테이너_포트번호 포트 번호 지정 ( --publish 생략형 )
-v 호스트_디스크:컨테이너:디렉터리 컨테이너에 볼륨을 마운트 (  --volume  생략형 )
--net=네트워크_이름 컨테이너를 네트워크에 연결
-e 환경변수_이름=값 환경 변수를 설정  ( --env 생략형 )
-d 백그라운드로 실행  ( --detach 생략형 )
-i 컨테이너에 터미널(키보드)을 연결  ( --interactive 생략형)
-t 특수 키를 사용 가능하도록 함 ( --tty 생략형 )
-help 사용 방법 안내 메시지를 출력함

 

 

도커 컨테이너 목록 및 상태 확인

docker ps -a // -a 옵션은 실행중이지 않은 컨테이너까지 모두 출력

위 명령어로 컨테이너 상태를 확인할 수 있다.

 

ps 명령어 사용 시 출력되는 항목들

항목 내용
CONTAINER  ID 컨테이너 식별자, 무작위 문자열이 할당된다. 본래는 64글자이지만 앞에서부터 12글자만 출력한다. 이 12글자만으로 식별자 역할을 수행할 수 있다.
IMAGE 컨테이너를 만들 때 사용한 이미지의 이름
COMMAND 컨테이너 실행 시에 실행하도록 설정된 프로그램의 이름. (크게 신경쓰지 않아도 된다)
CREATED 컨테이너 생성 후 경과된 시간
STATUS 컨테이너의 현재 상태. Up => 실행중, Exited => 종료됨
PROTS 컨테이너에 할당된 포트 번호. 호스트 포트 번호 -> 컨테이너 포트 번호 형식으로 출력된다. 포트 번호가 동일할 경우 ->의 뒷 부분은 출력되지 않는다.
NAMES 컨테이너 이름

 

 

 

도커 컨테이너 정지

docker stop 컨테이너_이름

실행중이던 nginx 컨테이너를 정지시킨 후 상태를 확인해보니 4초 전에 정지된 것으로 확인된다.

 

 

도커 컨테이너 삭제

docker rm 컨테이너_이름

nginx 컨테이너를 삭제 후 컨테이너 상태를 확인해보니 목록에서 삭제가 되었다.

참고로 실행중인 컨테이너를 삭제하면 오류가 발생하며 컨테이너가 삭제되지 않는다.

 

 

한 번만 실행되는 컨테이너와 데몬 형태로 동작하는 컨테이너

아까 실습에서 사용했던 nginx는 데몬 형태로 동작하는 컨테이너 이기 때문에 옵션 지정 없이 docker run nginx 명령어를 입력했을 때 다른 명령어를 입력할 수 없는 상태가 되어 종료 후 다시 실행해야 하는 번거로움이 있었다.

한번만 실행하고 종료되는 컨테이너의 경우 일시적으로 터미널의 제어를 차지하더라고 종료되는 즉시 터미널의 제어를 되찾을 수 있지만 데몬처럼 지속적으로 실행되는 프로그램은 저절로 종료되지 않으므로 한번 터미널의 제어를 넘기면 이를 되찾아 오기가 번거롭다.

nginx 같은 데몬 형태로 동작하는 컨테이너는 -d 옵션으로 백그라운드에서 실행해야 바로 다른 명령어를 사용할 수 있으므로 옵션을 적절히 활용하는 것이 좋을 것이다.

 

 

반응형