[Docker] docker run 명령어 개념 [주요 옵션 설명]

Docker Logo

Contents

    1. docker run 명령어

    docker run은 docker의 이미지를 기반으로, 컨테이너를 생성하는 명령어입니다. 옵션에 따라 컨테이너를 바로 실행시킬 수도 있습니다. 기본적인 명령어 형식은 아래와 같습니다.

    docker run [옵션] [이미지] [명령어] [인자]
    # 예시
    docker run --rm ubuntu ls -l

    예시를 보면 docker run 뒤에 --rm이 [옵션]이고 ubuntu가 리눅스 우분투 [이미지] 이름이며, ls가 [명령어]이고 -l이 [인자]입니다. 간단히 설명드리면, 리눅스 우분투 컨테이너를 생성하고, 거기서 ls -l 명령어 결과를 출력하라는 의미입니다. --rm 옵션은 컨테이너 실행 완료와 함께 컨테이너를 삭제하는 옵션입니다. (아래에서 자세히 다루겠습니다.)

     

    2. 주요 옵션

    옵션 설명
    -i
    --interactive
    컨테이너의 표준 입력(stdin)을 활성화. (주로 -it 함께 사용)
    -t
    --tty
    tty(가상 터미널)을 할당.
    리눅스에 키보드를 통해 표준 입력(stdin)을 전달할 수 있게한다. (주로 -it 함께 사용)
    --name 컨테이너 이름을 지정.
    -d
    --detach
    컨테이너를 백그라운드로 실행.
    --rm docker run 명령어가 끝나면, 컨테이너 자동 삭제.
    -p
    --publish
    호스트와 컨테이너의 포트를 연결 (포트포워딩).
    -p <호스트 포트>:<컨테이너 포트>
    ex) -p 80:8888  - 호스트에 8888로 접속하면, 컨테이너 내부의 80포트로 자동 접속.
    -v
    --volume
    호스트와 컨테이너의 디렉토리 연결(마운트)
    -v <호스트 절대경로>:<컨테이너 절대경로>
    ex) -v /Users:/usr. - 컨테이너 /usr에 저장하는 파일은 호스트의 /Users 디렉토리에 저장.
    --restart 컨테이너 종료시, 재시작 정책 설정
    --restart="always" : 항상 재시작
    --restart="on-failure" : 종료 스테이터스가 0이 아닐 때 재시작
    * --rm 옵션과 --restart 옵션은 동시에 사용할 수 없습니다.
    --privileged 컨테이너 안에서 호스트의 리눅스 커널 기능을 모두 사용

     

    1) -it 옵션의 의미

    -i 옵션과 -t 옵션을 같이 쓰는 경우입니다. docker 컨테이너에 표준 입력(stdin)을 열어두고(-i), 가상 터미널을 열어(-t) 키보드의 입력을 표준 입력으로 전달할 수 있도록 하는 옵션입니다.

    docker run -it ubuntu

    위 명령어를 실행하면, 리눅스 우분투 컨테이너를 생성하고, 가상 터미널을 열어 표준 입력을 받게 합니다. 즉, 우분투 컨테이너 터미널이 실행됩니다. 우분투 터미널에서 ls를 해보겠습니다.

    * 출력

    docker run -it ubuntu -> ls

     

    2) --name 옵션

    컨테이너를 생성할 때, 이름을 지정하여 생성하는 옵션입니다. 

    docker run -it --name test ubuntu
    docker ps # 도커 컨테이너 상태 확인

    우분투 컨테이너 이름을 test로 지정하여 생성 및 실행하는 예시입니다. 우분투 컨테이너에서 ls를 실행해보고 ctrl-p-q를 눌러 컨테이너를 중지하지 않고 나온 뒤, docker ps로 도커 컨테이너의 상태를 보겠습니다.

    * 출력

    docker run -it --name test ubuntu -> ls -> ctrl-p-q -> docker ps

    docker ps 결과 생성된 컨테이너의 NAMES 부분을 보면 test라는 이름으로 ubuntu(IMAGE)가 실행되고 있는 것(STATUS: Up)을 확인할 수 있습니다.

     

    3) --rm 옵션

    도커 컨테이너가 종료되면, 해당 컨테이너가 자동으로 삭제되게끔 하는 옵션입니다.

    docker run --it --rm --name test2 ubuntu

    기존에 test 컨테이너가 존재하기 때문에, test2 컨테이너를 --rm 옵션과 함께 생성 및 실행한 뒤, exit으로 컨테이너를 종료해보겠습니다.

    * 출력

    docker run -it --rm --name test2 ubuntu -> exit -> docker ps -a

    docker ps -a 는 종료된 컨테이너를 포함해, 삭제되지 않은 모든 도커 컨테이너를 볼 수 있는 명령입니다. 위 결과를 보면, docker ps -a 결과 test2 컨테이너가 나오지 않는 것을 확인할 수 있습니다. 즉, test2 컨테이너는 exit과 함께 종료되었고, 종료됨과 함께 삭제된 것입니다.

     

    4) -d 옵션

    -d 옵션은 컨테이너를 백그라운드로 실행하는 옵션입니다. 

    docker run -it -d --name test2 ubuntu

    우분투 컨테이너 이름을 test2로 지정하고 -it 옵션을 통해 입력받을 수 있는 상태로 만든 뒤, -d 옵션으로 백그라운드 실행을 해보겠습니다.

    * 출력 

    docker run -it -d --name test2 ubuntu -> docker ps

    명령어 실행 결과, 백그라운드로 실행되는 컨테이너의 ID 풀네임을 출력합니다. docker ps를 실행해보면, test2 컨테이너가 Up(STATUS) 상태로 있는 것을 볼 수 있습니다. -it 옵션을 줬기 때문에 표준 입력을 기다리고 있는 것입니다. 만약 -it옵션을 주지 않았다면 우분투가 표준 입력을 기다리고 있지 않기 때문에 STATUS가 Exited였을 것입니다.

     

    3. 그외 다양한 옵션

    옵션 설명
    -c
    --cpu-shares
    해당 컨테이너에 CPU 자원 분배 설정. 기본값은 1024로 각 값은 상대적으로 적용.
    ex) -c 2048 : 기본값의 2배로 CPU 자원 설정
    -m
    --memory
    컨테이터의 메모리 한계 설정. b, k, m, g 단위 사용. (바이트, 키로바이트, 메가바이트, 기가바이트)
    ex) -m 4g : 메모리 한계 4기가 바이트
    --gpus 컨테이너가 호스트의 NVIDIA GPU를 사용할 수 있도록 설정.
    ex1) --gpus all : 호스트의 GPU 모두 사용
    ex2) --gpus "device=0,1" : 특정 GPU 사용. 첫번째(0)와 두번째(1) GPU 사용
    -e
    --env
    컨테이너 내에서 사용할 환경 변수 설정
    ex) -e TT=Twice : 컨테이너에서 TT 환경변수는 Twice값을 갖게됩니다.
    -a
    --attach
    컨테이너에 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)를 연결
    -u
    --user
    컨테이너에서 사용될 계정이름 또는 UID를 설정.
    -h
    --hostname
    컨테이너의 호스트 이름 설정
    -w
    --workdir
    컨테이너 내부에서 프로세스가 실행될 디렉토리 설정
    --link 컨테이너 끼리 연결. <컨테이너 이름>:<별칭>
    ex) --link test:tt   : 현재 컨테이너를 test 컨테이너와 연결(현재 컨테이너에서 test컨테이너 별칭은 tt로 지정)

     

    다음에 더 유익한 글로 찾아오겠습니다. 

     

    Reference)
    1. Docker Logo: https://www.docker.com/
    2. https://wooono.tistory.com/348
    3. https://velog.io/@hyeseong-dev/docker-run-%EB%AA%85%EB%A0%B9%EC%96%B4
    4. https://docs.docker.com/engine/reference/run/

    댓글

    Designed by JB FACTORY