[Docker] docker run 명령어 개념 [주요 옵션 설명]
- Server/Docker
- 2022. 6. 28.
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를 해보겠습니다.
* 출력
2) --name 옵션
컨테이너를 생성할 때, 이름을 지정하여 생성하는 옵션입니다.
docker run -it --name test ubuntu
docker ps # 도커 컨테이너 상태 확인
우분투 컨테이너 이름을 test로 지정하여 생성 및 실행하는 예시입니다. 우분투 컨테이너에서 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 ps -a 는 종료된 컨테이너를 포함해, 삭제되지 않은 모든 도커 컨테이너를 볼 수 있는 명령입니다. 위 결과를 보면, docker ps -a 결과 test2 컨테이너가 나오지 않는 것을 확인할 수 있습니다. 즉, test2 컨테이너는 exit과 함께 종료되었고, 종료됨과 함께 삭제된 것입니다.
4) -d 옵션
-d 옵션은 컨테이너를 백그라운드로 실행하는 옵션입니다.
docker run -it -d --name test2 ubuntu
우분투 컨테이너 이름을 test2로 지정하고 -it 옵션을 통해 입력받을 수 있는 상태로 만든 뒤, -d 옵션으로 백그라운드 실행을 해보겠습니다.
* 출력
명령어 실행 결과, 백그라운드로 실행되는 컨테이너의 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/
'Server > Docker' 카테고리의 다른 글
[Docker] docker 디스크 사용 상태 확인 (docker system df) (0) | 2022.07.05 |
---|---|
[Docker] docker pause, unpause (stop과 차이점) (0) | 2022.07.03 |
[Docker] 컨테이너(Container) 종료없이 나가기(detach) (0) | 2022.06.30 |