컨테이너 사용의 기본은 도커 명령어다. 이 글에선 리눅스 우분투 환경에서 도커를 실습한다.
도커 설치 후 제대로 설치가 되었는지 확인을 위해 가장 먼저 사용해 볼 명령어는 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 옵션으로 백그라운드에서 실행해야 바로 다른 명령어를 사용할 수 있으므로 옵션을 적절히 활용하는 것이 좋을 것이다.
'Docker & Kubernetes' 카테고리의 다른 글
Docker Compose로 /etc/hosts 파일에 항목 추가하기 (0) | 2024.07.13 |
---|---|
도커에서 이미지를 사용하는 과정 (0) | 2024.04.11 |
도커 컴포즈 입문: 멀티 컨테이너 애플리케이션 간편하게 관리하 (0) | 2024.04.11 |
쿠버네티스 입문: 핵심 개념과 용어 가이드 (0) | 2024.01.20 |
도커(docker) 기초 이해: 컨테이너와 이미지의 비유적 설명 (1) | 2024.01.13 |