[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