[Docker] docker run 커맨드 사용법
docker run 사용법 정리
docker run
은 docker
를 사용하면서 이미지를 컨테이너에 띄워 실행시키기 위해서 매우 자주 사용되는 명령입니다.
하지만 자주 사용되는 것에 비해 run
커맨드에 대해서 알아본 적이 없었고, run
커맨드를 실행하기 위해서 매번 구글에 검색한 기억들이 떠올라 이번 기회에 정리를 해봐야겠다는 생각이 들어 포스트를 작성하게 되었습니다.
run 기본 형식
docker run
커맨드의 기본 형식은 아래와 같습니다. 그리고 이미지 식별자는 필수로 들어가야 하며, 이미지 id나 저장소(repository), 태그(tag)를 사용할 수 있습니다.
docker run <옵션> <이미지 식별자>
-d 옵션
대부분의 경우 컨테이너를 백그라운드에서 실행해야 합니다. 이럴 때 -d
옵션을 사용하면 됩니다. -d
옵션을 사용하면 컨테이너가 deteched 모드에서 실행되며, 실행 결과로 컨테이너 ID만을 출력하게 됩니다.
-it 옵션
-i
옵션과 -t
옵션은 같이 쓰이는 경우가 매우 많으며, 이 두 옵션은 컨테이너를 종료하지 않은체로 터미널의 입력을 계속해서 컨테이너로 전달하기 위해서 사용합니다. 따라서 -it
옵션은 특히 컨테이너의 쉘(shell)이나 CLI 도구를 사용할 때 매우 유용하게 사용됩니다. 특히 python과 같이 인터프리터 기반의 언어의 간단한 실행 결과를 얻고자 할 때 사용하면 유용합니다.
–name 옵션
Docker 컨테이너를 제어할 때 컨테이너 ID를 사용하면 ID가 길어 직접 치기도 힘들고, 매번 복사하기도 번거롭고, 기억하기도 어려워 불편하게 느껴집니다. 이럴 경우 --name
옵션을 사용해서 컨테이너에 내가 기억하기 쉽고 치기도 쉬운 이름을 부여해 주면 해당 이름으로 컨테이터를 식별할 수 있어 유용합니다.
아래 예제에서는 my-server
라는 이름으로 컨테이너를 실행한 후에, docker stop
과 docker rm
커맨드로 해당 컨테이너를 종료하거나 삭제할 때 컨테이너 이름을 컨테이너 ID 대신에 사용하고 있습니다.
docker run -d --name my-server python:3.8-alpine python -m http.server
명령을 해주었을 때
docker stop
, docker rm
명령을 name과 함께 주었을 때
-e 옵션
Docker 컨테이너의 환경변수를 설정하기 위해서는 -e
옵션을 사용합니다. 또한, -e
옵션을 사용하면 Dockerfile의 ENV
설정도 덮어써지게 됩니다. 하지만 이 옵션에 대해서는 저는 자주 사용한 옵션이 아니어서 이번엔 간단하게 다루기로 하고, 이후에 자주 사용하게 된다면 좀 더 자세히 다루도록 하겠습니다.
-p 옵션
-p
옵션은 호스트와 컨테이너 간의 port 배포(public)/바인드(bind)를 위해서 사용됩니다. 호스트 컴퓨터에서 컨테이너에서 사용하고 있는 포트로 접속할 수 있도록 설정을 해줍니다. 즉 조금 더 쉽게 설명을 하자면 -p hostPort:containerPort
로써
콜론 앞의 port는 실제 내 pc에서 할당해 주는 port, 콜론 뒤의 port는 컨테이너 내부에서 사용하는 포트입니다. 따라서 컨테이너에 포트를 지정해 사용하고자 한다면 내 pc의 port 방화벽 설정을 해주시는 것도 알아두시면 좋습니다.
그래서 컨테이너 내부의 어떤 프로그램의 연결된 포트와 내 PC의 포트와 동일 시 하고 싶다면 다음과 같이 커맨드를 사용합니다.
-v 옵션
-v
옵션은 호스트와 컨테이너 간의 볼륨(volumn) 설정을 위해서 사용됩니다. 호스트 컴퓨터의 파일 시스템의 특정 경로를 컨테이너의 파일 시스템의 특정 경로로 마운트 하도록 해줍니다 이 옵션도 서버 하나를 통째로 다루는 경우가 아니면 잘 사용하지 않으므로 이번엔 자세히 다루지 않도록 하며, 추후에 이 옵션을 자주 다루게 되면 그 때 좀 더 내용을 상세히 작성하도록 하겠습니다.
-u 옵션
-u
옵션은 컨테이너를 실행할 때 사용하는 계정을 root가 아닌 주어진 계정으로 미리 적용하고자 할 때 사용하는 옵션입니다.
저는 해당 옵션을 쓸 때 image가 리눅스 운영체제일 때 주로 사용합니다. 그리고 image에 적용하고자 하는 계정 정보가 미리 포함되어 있어야 합니다.
–rm 옵션
--rm
옵션은 컨테이너를 일회성으로 실행할 때 주로 사용됩니다. 컨테이너가 종료될 때 컨테이너와 관련된 모든 리소스까지 모두 깨끗이 제거해 줍니다.
마치며
이번엔 docker run
커맨드에 대해서 알아보았습니다. docker run
에 대해서 다루게 된 이유는 회사에서 일하면서 회사 솔루션을 테스트 해보기 위해서 회사에서 제공해 주는 개발서버를 사용하는데 사용하는 인원도 많고, 회사에서 준 개발서버가 어느 순간 급한 프로젝트에 사용되거나 하는 문제가 있어 제가 맡고 있는 회사 솔루션 테스트가 힘든 상황에서 docker에 대해서 알게 되었고, docker를 이용해 pc에 회사 솔루션 설치를 위한 환경을 구축하는 과정에서 docker run
명령을 많이 사용하게 되었는데 그래도 매일 사용하는게 아니라 띄엄 띄엄 사용하다 보니 매번 까먹어 구글에 검색하는 것도 좀 그렇고 이번 기회에 정리를 해보는게 좋을 것 같다는 생각이 들어 다루게 되었습니다.
이 포스트가 다른분에게도 많은 도움이 되었으면 좋겠으며, 본 포스트는 제가 보기 위해서 작성한 거라 틀린 내용이 있을 수도 있습니다. 그래서 틀린 부분 지적해 주시면 감사하겠으며, 틀렸다고 비난하는 것은 자제 부탁드리겠습니다.
참조
docker run reference : https://docs.docker.com/reference/cli/docker/container/run/
docker cli : https://docs.docker.com/reference/cli/docker/container/run/
내용 참조한 블로그 : https://www.daleseo.com/docker-run/
Comments