본문 바로가기
{시리즈}/Docker

4. Docker 명령어 알아보기

by jay2022 2023. 12. 4.

1. 도커 명령어

docker_docs_cil

처음 공식 사이트의 Docker CLI 리스트를 보면 생각보다 많은 명령이 있어 당황할 수 있다.
(23년 12월 기준 57개의 명령이 있다)
그래서 이해를 돕고자 카테고리를 정의하여 분류해 보았다.

주로 사용하는 명령

  • 레지스트리 관련
    • Docker Hub 관련 명령으로 이미지 검색, 내려받기, 올리기 같은 명령이 있다.
    • login, logout, search, pull, push
  • 이미지 관련
    • 이미지 생성, 내려받은 이미지 리스트 조회, 이미지 삭제 같은 명령이 있다.
    • build, images, rmi
  • 컨테이너 생명주기 관련
    • 컨테이너 생성, 실행, 시작, 정지, 제거 같은 생명주기 명령이다.
    • create, run, start, stop, rm
  • 실행중인 컨테이너 관련
    • 실행중인 컨테이너와 상호작용 가능한 명령이 포함된다. ex)
      • attach: 컨테이너의 표준 입/출력을 쉘과 연결
      • exec: 컨테이너에 명령어 전달
    • attach, diff, exec, logs, stats, ps ..

ETC 명령

  • 도커 엔진 관련
    • info, system, version
  • 호스트 리소스와 컨테이너 연결 관련
    • network, volume, port
  • 도커 Swarm 관련
    • config, node, secret, swarm

💡 CLI 명령어를 하나하나 사용할 일이 많은 가요?

사실 현업에서 CLI를 한땀 한땀 사용하여 도커를 관리하시는 분들이 많다고 생각하지 않는다.
클라우드 환경이라면 클라우드 마다 오케스트레이션 서비스를 사용하지 않을 이유가 없으며,
자체 컨테이너 환경에서도 k8s와 ops 툴을 사용하지 않을 이유가 없기 때문이다.

나의 경우 사이드 프로젝트에서는 docker-compose를 사용하여 컨테이너를 관리했고,
현업에서는 EKS를 사용하여 컨테이너를 관리했다.
그럼에도 CLI 명령어를 하나하나 실습하고 어떤 결과가 나오는지 이해하고 있는 것은 중요하다.

어떤 상황을 격게 될지 모르기 때문이다.
급한 장애 상황에 컨테이너에 들어가서 로그를 확인 해야 하는 상황이 나올 수도 있고,
컨테이너를 직접 종료하고 다시 시작하는 등의 상황이 발생할 수 있기 때문이다.

또한 결국 Docker를 이해해야 인프라를 이해할 수 있다.
(23년 기준)대부분의 컨테이너 환경의 기반에는 Docker가 있다.
안 그래도 복잡한 인프라에 컨테이너 환경이 들어가면 복잡성이 더 올라간다.
때문에 좋은 개발자가 되려면 Docker에 대한 이해는 필수라고 생각한다.

2. 라이프 사이클 명령어

명령어 실습은 상황에 맞게 하는 것을 추천한다.

또한 환경에 맞는 이미지를 찾고 정확한 실습을 해보고 싶다면 아래 글을 먼저 보는 것을 추천한다.

2.1 이미지 검색 후 내려받기

# 도커 레지스트리에서 이미지 검색 
docker search node

# 이미지 내려 받기
docker pull node
  • 검색에 사용되는 기본 레지스트리는 Docker Hub 이다.
  • 아쉽게도 search 으로는 특정 버전에 대한 검색은 불가능 하다.
  • 때문에 정확한 환경을 찾으려면 Docker Hub에서 원하는 이미지의 버전을 찾는게 좋다.

2.2. 이미지 확인과 삭제

# 설치된 이미지 리스트 출력
docker images

# 특정 이미지 삭제
docker rmi <이미지ID>

2.3. 이미지로 컨테이너 생성 및 실행

# docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run --name <컨테이너명> <IMAGE>

# 백그라운드로 실행
docker run -d --name <컨테이너명> <IMAGE>

# 볼륨 마운트 실행
docker run --name <컨테이너명> -v <호스트_path:컨테이너_path> <IMAGE>

# 포트포워드 실행
docker run --name <컨테이너명> -p <호스트_port:컨테이너_port> <IMAGE>

# 컨테이너 실행하고 컨테이너 쉘에 접근
docker run -it --name <컨테이너명> <IMAGE>

2.4. 생성된 컨테이너 확인, 종료 및 삭제

# 실행중인 컨테이너 확인
docker ps

# 생성되어 있는 모든 컨테이너 확인
docker ps -a

# 실행중인 컨테이너 종료
docker stop <컨테이너ID>

# 종료된 컨테이너 삭제
docker rm <종료된_컨테이너ID>

# 컨테이너 강제 삭제
docker rm -f <컨테이너ID>

# 한번에 컨테이너 정지후 모두 삭제
docker stop `docker ps -a -q` 
docker rm `docker ps -a -q`

# 한번에 컨테이너 강제 삭제
docker rm -f `docker ps -a -q`

3. 유용한 명령어 확인

도커 엔진 정보

# 실행중인 도커 엔진 정보 출력
docker info

# 도커 엔진이 사용하는 저장소 접근 방법
sudo -i 
cd /var/lib/docker
  • 도커 이미지 레이어 저장소 위치 확인를 확인 할 수 있다.
    • Docker Root Dir: /var/lib/docker
    • 이미지 레이어 저장소: /var/lib/docker/overlay2
  • 도커 이미지에 대한 정보 저장 디렉토리: /var/lib/docker/image/
  • 도커 이미지의 파일 시스템이 사용되는 실제 디렉토리: /var/lib/docker/overlay2/
  • 도커 컨테이너 정보 저장 디렉토리: /var/lib/docker/containers/

이미지 정보

# tomcat latest 이미지 내려받기
docker pull tomcat

# 이미지 정보 출력
docker inspect tomcat
  • 이미지에 대한 매타 데이터
  • 이미지에 대한 환경 변수
  • 이미지를 생성한 도커 버전
  • 이미지의 레이어 확인

포트포워딩으로 톰캣 실행하기

docker run -d \  # -d: 백그라운드 모드로 실행
--name tc -p 80:8080 \ # -p 80:8080 : 호스트의 80번 요청은 컨테이너 8080로 포트포워드
tomcat

# test 수행
curl http:/127.0.0.1

컨테이너 내부 쉘 실행

docker exec -it tc /bin/bash

컨테이너 로그 출력

docker logs tc