Docker 명령어 모음

artp·2024년 9월 23일

docker

목록 보기
2/6
post-thumbnail

도커 이미지 다운로드

도커 허브(Docker Hub)

Docker Hub는 Docker 이미지의 중앙 저장소로, 다양한 소프트웨어의 미리 빌드된 이미지를 제공합니다.
개발자는 필요한 이미지를 검색하고 docker pull 명령어로 로컬 환경에 다운로드하여 사용할 수 있습니다. 이를 통해 개발 및 배포 시간을 줄이고, 신뢰성 있는 이미지를 기반으로 환경을 구성할 수 있습니다.

이미지 다운로드

# docker pull 이미지명
# 최신 nginx 이미지 다운로드 (latest는 기본값)
$ docker pull nginx # docker pull nginx:latest와 동일하게 작동 / tag를 적지 않으면 기본값은 latest

이미지 특정 버전 다운로드

이미지의 특정 버전을 나타내는 이름을 태그명이라고 합니다. 태그명은 도커 허브에서 확인할 수 있습니다.

Docker 이미지는 태그(tag)를 통해 버전이나 상태를 구분합니다.
태그는 이미지의 버전이나 특정 상태를 나타내며, 이를 통해 사용자는 어떤 버전의 이미지를 다운로드할지 선택할 수 있습니다.

도커 특정 버전 이미지를 다운로드하는 명령어는 다음과 같습니다.

# docker pull 이미지명:태그
# nginx의 stable-alpine3.20-perl 버전 다운로드
$ docker pull nginx:stable-alpine3.20-perl\

이미지 조회/삭제

이미지 조회

# 이미지 목록 확인
$ docker image ls

이 명령어는 현재 로컬에 다운로드된 모든 도커 이미지를 목록으로 보여줍니다. 이미지 이름, 태그, 이미지 ID, 생성 날짜, 이미지 크기 등을 확인할 수 있습니다.

  • REPOSITORY
    도커 이미지가 속해 있는 프로젝트나 애플리케이션의 이름을 나타냅니다. 예를 들어, nginx나 mysql은 각각 Nginx 웹 서버와 MySQL 데이터베이스에 대한 이미지를 나타냅니다.
  • TAG (태그)
    이미지의 버전 또는 변형을 식별하는 데 사용됩니다.
    예를 들어, nginx 저장소에서 latest는 최신 버전의 Nginx 이미지를 나타냅니다.
  • IMAGE ID (이미지 ID)
    도커 이미지의 고유 식별자입니다. 이미지를 삭제하거나 특정 작업을 할 때 이 ID를 사용할 수 있습니다.
    이미지 ID의 일부만 입력해도 다른 이미지와 겹치지 않으면 해당 이미지가 선택됩니다.
  • CREATED (생성일)
    해당 이미지가 생성된 시점을 나타냅니다.
  • SIZE (크기)
    이미지의 크기를 나타냅니다.

이미지 삭제

특정 이미지 삭제

$ docker image rm [이미지 ID 또는 이미지명]
  • rm 은 remove의 약자이며, 해당 이미지를 삭제하는 역할을 합니다.
  • ❗️ 중요한 점은 현재 컨테이너에서 사용 중이지 않은 이미지만 삭제할 수 있다는 것입니다. 즉, 사용 중인 이미지는 삭제되지 않습니다.

강제로 이미지 삭제 (중지된 컨테이너가 사용하는 경우)

$ docker image rm -f [이미지 ID 또는 이미지명]
  • -f 는 force의 약자로, 강제로 이미지를 삭제합니다.
  • 중지된 컨테이너에서 사용 중인 이미지를 강제로 삭제할 때 사용됩니다.
  • ❗️ 실행 중인 컨테이너에서 사용 중인 이미지는 강제로 삭제할 수 없습니다. 실행 중인 컨테이너가 있는 경우, 먼저 해당 컨테이너를 중지하거나 삭제해야 이미지를 삭제할 수 있습니다.

모든 이미지 삭제

1. 사용되지 않는 모든 이미지 삭제

# 컨테이너에서 사용하고 있지 않은 모든 이미지 삭제
$ docker image rm $(docker images -q)
  • 이 명령어는 현재 컨테이너에서 사용 중이지 않은 모든 이미지를 삭제합니다.
  • docker images -q 는 이미지 ID 목록을 반환하며, 이를 docker image rm에 전달하여 이미지들을 한 번에 삭제합니다.

2. 사용 중인 이미지를 포함해 모든 이미지를 강제로 삭제

# 컨테이너에서 사용하고 있는 이미지를 포함해서 전체 삭제
$ docker image rm -f $(docker images -q)
  • 이 명령어는 사용 중인 이미지를 포함하여 모든 이미지를 강제로 삭제합니다.
  • 현재 실행 중이거나 중지된 컨테이너에서 사용 중인 이미지도 포함됩니다.

컨테이너 생성 및 실행

컨테이너 생성 (실행은 하지 않음)

# docker create 이미지명[:태그명]
$ docker create nginx
  • 이미지를 기반으로 컨테이너를 생성합니다. 하지만, 컨테이너를 실행하지는 않습니다.
  • 일반적으로, 컨테이너를 생성한 후 바로 실행하는 경우가 많기 때문에 docker create 명령어는 자주 사용되지 않습니다.
  • ❗️ 로컬에 이미지가 없을 경우, 도커 허브로에서 이미지를 자동으로 다운로드한 후 컨테이너를 생성합니다.

생성된 컨테이너 목록 확인

# 모든 컨테이너 조회
$ docker ps -a
  • 실행 중인 컨테이너뿐만 아니라 중지된 컨테이너도 포함하여 조회합니다.

컨테이너 실행

$ docker start [컨테이너 이름 또는 ID]
  • 이미 생성된 컨테이너를 실행합니다.

실행 중인 컨테이너 조회

# 실행 중인 컨테이너 조회
$ docker ps 
  • 현재 실행 중인 컨테이너 목록만 출력합니다.

컨테이너 생성과 실행을 동시에

# 포그라운드 실행 (터미널 점유)
$ docker run nginx

# 백그라운드 실행 (-d 옵션 사용)
$ docker run -d nginx
  • docker run 명령어는 컨테이너를 생성함과 동시에 실행합니다.

컨테이너 생성과 실행을 동시에 예시

# docker run 이미지명[:태그명]
$ docker run nginx # 포그라운드에서 실행 (추가적인 명령어 조작을 할 수 없음)

# Ctrl + C로 종료할 수 있음
  • 이 명령어는 도커 컨테이너를 생성하고 실행하는 역할을 합니다.
  • ❗️ 로컬 환경에 해당 이미지가 없는 경우, 도커는 자동으로 도커 허브에서 이미지를 다운로드한 후, 컨테이너를 생성하고 실행합니다.

컨테이너에 이름 지정하여 실행

# docker run -d --name [컨테이너이름] [이미지명]
$ docker run -d --name webserver nginx
  • --name 옵션으로 컨테이너에 이름을 지정할 수 있습니다.

컨테이너에 이름 지정하여 실행 예시

컨테이너를 생성할 때, 이름을 지정하면 나중에 컨테이너를 관리할 때 더 쉽게 식별하고 조작할 수 있습니다. 이름을 지정하지 않으면 도커는 임의의 이름을 부여하는데, 이름을 직접 지정하면 컨테이너를 더 쉽게 다룰 수 있습니다.

컨테이너에 이름을 부여하면 나중에 컨테이너 ID 대신 이름을 사용해 컨테이너를 중단하거나 삭제할 수 있습니다.

$ docker run -d --name [컨테이너 이름] [이미지명[:태그명]]
  • -d : 백그라운드에서 실행
  • --name : 컨테이너에 원하는 이름을 부여

포트 매핑하여 실행

# 호스트의 4000번 포트를 컨테이너의 80번 포트에 연결
$ docker run -d -p 4000:80 nginx
  • 외부에서 http://호스트_IP:4000으로 컨테이너의 웹 서버에 접근할 수 있습니다.
  • 여러 개의 컨테이너 실행 시 포트 충돌 방지에 유용합니다.

컨테이너 관리

컨테이너 조회

모든 컨테이너 조회 (실행 중 + 중지된 컨테이너)

$ docker ps -a
  • -a 옵션을 사용하면 모든 컨테이너(실행 중인 컨테이너 + 중지된 컨테이너)를 조회할 수 있습니다.
  • -a는 all의 약자입니다.

실행 중인 컨테이너 조회

$ docker ps
  • docker ps 명령어는 현재 실행 중인 컨테이너 목록을 보여줍니다.
  • ps는 process status의 약자입니다.

컨테이너 중지

특정 컨테이너 중지

$ docker stop [컨테이너명 또는 컨테이너 ID]
  • docker stop 명령어는 컨테이너를 정상적으로 중지합니다. 이는 시스템 종료와 비슷한 개념으로, 컨테이너 내 프로세스가 안전하게 중지됩니다.

컨테이너 강제 중지

$ docker kill [컨테이너명 또는 컨테이너 ID]
  • docker kill 명령어는 컨테이너를 즉시 강제 중지시킵니다. 이는 컴퓨터의 전원 버튼을 눌러 갑작스럽게 종료하는 것과 유사합니다.
  • 차이점: stop은 컨테이너 내의 프로세스를 정상적으로 종료시키는 반면, kill프로세스를 즉시 중단시킵니다.

여러 컨테이너 한 번에 중지

도커에서는 여러 컨테이너를 한 번에 중지할 수 있습니다.
컨테이너를 중지할 때는 컨테이너의 ID 또는 이름을 사용하며, ID의 일부만 입력해도 고유하게 식별되는 경우 해당 컨테이너가 중지됩니다. 이를 통해 여러 컨테이너를 한 번에 쉽게 중지할 수 있습니다.

$ docker stop [컨테이너명 또는 컨테이너 ID] [컨테이너명 또는 컨테이너 ID] [컨테이너명 또는 컨테이너 ID] ...

컨테이너 삭제

중지된 특정 컨테이너 삭제

$ docker rm [컨테이너명 또는 컨테이너 ID]
  • 중지된 컨테이너를 삭제할 수 있습니다. 실행 중인 컨테이너는 삭제할 수 없으므로, 먼저 중지한 후 삭제해야 합니다.

실행 중인 특정 컨테이너 강제 삭제

$ docker rm -f [컨테이너명 또는 컨테이너 ID]
  • -f 옵션은 강제 삭제를 의미하며, 실행 중인 컨테이너도 이 명령어를 통해 바로 삭제할 수 있습니다.

중지된 모든 컨테이너 삭제

$ docker rm $(docker ps -qa)
  • 이 명령어는 중지된 모든 컨테이너를 삭제합니다.
  • docker ps -qa모든 컨테이너 ID를 가져오는 명령어이며, 이를 docker rm에 전달하여 모든 컨테이너를 삭제할 수 있습니다.
  • docker ps -qa에서 -q-a는 각각 줄임말입니다:
    - q: quiet의 약자로, 컨테이너의 ID만 출력하도록 하는 옵션입니다. 이 옵션을 사용하면 각 컨테이너의 자세한 정보 대신 컨테이너 ID만 리스트로 반환됩니다.
    - a: all의 약자로, 모든 컨테이너(실행 중인 컨테이너와 중지된 컨테이너 모두)를 포함해서 출력하는 옵션입니다.

실행 중인 모든 컨테이너 강제 삭제

$ docker rm -f $(docker ps -qa)
  • 이 명령어는 실행 중인 컨테이너를 포함한 모든 컨테이너를 강제 삭제합니다.

컨테이너 로그 관리

컨테이너 로그 조회

컨테이너를 실행한 후, 정상적으로 실행되고 있는지, 또는 에러가 발생했는지 확인하기 위해 로그를 조회하는 것은 매우 중요합니다. 특히, 디버깅 시 로그는 필수적으로 확인해야 할 요소입니다.

1. 특정 컨테이너의 모든 로그 조회

$ docker logs [컨테이너 ID 또는 컨테이너명]
  • 이 명령어는 해당 컨테이너의 모든 로그를 출력합니다.

2. 최근 로그 일부만 조회

$ docker logs --tail [로그 끝부터 표시할 줄 수] [컨테이너 ID 또는 컨테이너명]
  • --tail 옵션을 사용하면 최근에 생성된 로그지정한 줄 수만큼 조회할 수 있습니다.

예시

$ docker logs --tail 10 [컨테이너 ID 또는 컨테이너명]
  • 최근 로그 10줄만 출력합니다.

3. 실시간으로 로그 확인 (기존 로그 포함)

$ docker logs -f [컨테이너 ID 또는 컨테이너명]
  • -f는 follow의 약자입니다. 이 옵션은 실시간으로 로그를 모니터링할 수 있게 해줍니다.
  • 기존의 로그를 모두 출력한 후, 새롭게 생성되는 로그를 실시간으로 계속해서 업데이트하여 보여줍니다.

4. 기존 로그는 제외하고 실시간 로그만 확인

$ docker logs --tail 0 -f [컨테이너 ID 또는 컨테이너명]
  • 기존 로그는 표시하지 않고, 새롭게 생성되는 로그만 실시간으로 확인하고 싶을 때 사용합니다.

컨테이너 내부 접속 (exec -it)

컨테이너 개념 다시 짚어보기

컨테이너는 쉽게 말해 호스트 컴퓨터 내의 작은 컴퓨터와 같습니다. 즉, 여러 개의 컨테이너는 각기 독립적인 컴퓨터처럼 자신만의 운영체제(OS), 저장 공간, 프로그램을 가지고 실행됩니다. 도커 컨테이너는 이런 식으로 호스트 시스템과 격리된 상태에서 동작합니다.

실행 중인 컨테이너 내부에 접속하기

도커 컨테이너가 실행 중일 때, 해당 컨테이너 내부로 들어가 명령어를 실행하거나 파일을 확인하고 싶을 수 있습니다. 이때 사용하는 명령어가 docker exec -it입니다.

$ docker exec -it [컨테이너명 또는 컨테이너 ID] bash

예시

$ docker run -d nginx  # Nginx 컨테이너 실행
$ docker exec -it [Nginx 컨테이너 ID] bash  # Nginx 컨테이너 내부로 접속
$ ls  # 컨테이너 내부의 파일 목록 확인
$ cd /etc/nginx  # Nginx 설정 파일이 위치한 디렉토리로 이동
$ cat nginx.conf  # Nginx 설정 파일 내용 확인

명령어 설명

  • bash: Bourne Again Shell의 약자로, 리눅스 시스템에서 많이 사용되는 쉘(Shell)입니다. 이 명령어를 통해 컨테이너 내부의 명령어를 입력할 수 있는 환경으로 진입하게 됩니다.

  • -it:

    • -i: interactive 모드로, 터미널이 명령어 입력을 받아들이는 상호작용 모드를 활성화합니다.
    • -t: pseudo-TTY를 활성화해, 터미널 환경을 제공합니다. 즉, 화면 상에서 명령어를 지속적으로 입력하고 결과를 확인할 수 있게 합니다.

    ❗️-it 옵션을 사용하지 않으면, 단 한 번의 명령어만 실행되고 즉시 컨테이너와의 연결이 끊깁니다. 따라서 지속적으로 명령어를 입력하고 실행 결과를 확인하려면 -it 옵션을 반드시 사용해야 합니다.

컨테이너 내부에서 나오기

  • 컨테이너 내부에서 작업을 마친 후에는 Ctrl + D 또는 exit 명령어를 입력하여 컨테이너에서 빠져나올 수 있습니다.

포그라운드와 백그라운드 실행 방식 비교

포그라운드 실행

포그라운드는 프로그램이 화면에서 직접 실행되고 출력되는 상태를 의미합니다. 예를 들어, docker run 명령어로 컨테이너를 실행하면, 그 실행 과정과 로그가 터미널에 실시간으로 출력됩니다.
포그라운드 상태에서는 해당 프로그램에 터미널이 완전히 점유되어, 다른 명령어나 작업을 동시에 할 수 없습니다.
컨테이너 실행 중에는 터미널에서 추가 조작이 불가능하며, 컨테이너를 종료하려면 Ctrl + C로 직접 중단해야 합니다.

$ docker run nginx
  • 터미널에서 실시간으로 컨테이너 출력 로그를 볼 수 있지만, 다른 명령어 입력이 불가능합니다.
  • Ctrl + c로 컨테이너를 중단할 수 있습니다.

백그라운드 실행

백그라운드는 프로그램이 컴퓨터 내부적으로 실행되는 상태로, 실행 중인 프로그램의 세부 내용을 터미널에서 바로 확인할 수 없습니다.
백그라운드 실행의 장점은 터미널을 점유하지 않으므로, 다른 명령어를 입력하거나 프로그램을 추가로 실행할 수 있다는 것입니다.
도커에서 컨테이너를 백그라운드로 실행하려면 -d(detach) 옵션을 사용합니다.

$ docker run -d nginx
  • 이 명령어는 컨테이너를 백그라운드에서 실행합니다. 터미널은 해당 컨테이너의 로그를 보여주지 않으며, 다른 명령어를 입력하거나 다른 프로그램을 실행할 수 있습니다.
  • 터미널을 점유하지 않기 때문에 다른 명령어를 계속 사용할 수 있습니다.
profile
donggyun_ee

0개의 댓글