# 컨테이너를 위한 커맨드와 인자 정의하기

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

본 페이지는 <a class='glossary-tooltip' title='파드는 클러스터에서 실행 중인 컨테이너의 집합을 나타낸다.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ko/docs/concepts/workloads/pods/' target='_blank' aria-label='파드'>파드</a> 안에서 컨테이너를 실행할
때 커맨드와 인자를 정의하는 방법에 대해 설명한다.




## 시작하기 전에


<p>쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와
통신할 수 있도록 설정되어 있어야 한다. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 적어도 2개 포함된 클러스터에서 실행하는 것을 추천한다. 만약, 아직 클러스터를 가지고
있지 않다면,
<a href="/ko/docs/tasks/tools/#minikube">minikube</a>를 사용해서 생성하거나
다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있다.</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>
 
  <p>버전 확인을 위해서, 다음 커맨드를 실행  <code>kubectl version</code>.</p>





<!-- steps -->

## 파드를 생성할 때 커맨드와 인자를 정의하기

파드를 생성할 때, 파드 안에서 동작하는 컨테이너를 위한 커맨드와 인자를
정의할 수 있다. 커맨드를 정의하기 위해서는, 파드 안에서 실행되는 컨테이너에
`command` 필드를 포함시킨다. 커맨드에 대한 인자를 정의하기 위해서는, 구성
파일에 `args` 필드를 포함시킨다. 정의한 커맨드와 인자들은 파드가 생성되고
난 이후에는 변경될 수 없다.

구성 파일 안에서 정의하는 커맨드와 인자들은 컨테이너 이미지가
제공하는 기본 커맨드와 인자들보다 우선시 된다. 만약 인자들을
정의하고 커맨드를 정의하지 않는다면, 기본 커맨드가 새로운 인자와
함께 사용된다.


<div class="alert alert-info" role="note"><h4 class="alert-heading">참고:</h4><code>command</code> 필드는 일부 컨테이너 런타임에서 <code>entrypoint</code>에 해당된다.</div>


이 예제에서는 한 개의 컨테이너를 실행하는 파드를 생성한다. 파드를 위한 구성
파일에서 커맨드와 두 개의 인자를 정의한다.

















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/ko/examples/pods/commands.yaml" download="pods/commands.yaml"><code>pods/commands.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('pods-commands-yaml')" title="Copy pods/commands.yaml to clipboard"></img></div>
    <div class="includecode" id="pods-commands-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Pod</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">command-demo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">labels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">purpose</span><span class="p">:</span><span class="w"> </span><span class="l">demonstrate-command</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">containers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">command-demo-container</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">debian</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">command</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;printenv&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">args</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;HOSTNAME&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;KUBERNETES_PORT&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">restartPolicy</span><span class="p">:</span><span class="w"> </span><span class="l">OnFailure</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

1. YAML 구성 파일을 활용해 파드를 생성한다.

   ```shell
   kubectl apply -f https://k8s.io/examples/pods/commands.yaml
   ```

1. 실행 중인 파드들의 목록을 조회한다.

   ```shell
   kubectl get pods
   ```

   command-demo라는 파드 안에서 실행된 컨테이너가 완료되었다고 출력될
   것이다.

1. 컨테이너 안에서 실행된 커맨드의 출력을 보기 위해, 파드의 로그를
확인한다.

   ```shell
   kubectl logs command-demo
   ```

   HOSTNAME과 KUBERNETES_PORT 환경 변수들의 값들이 출력될
   것이다.

   ```
   command-demo
   tcp://10.3.240.1:443
   ```

## 인자를 정의하기 위해 환경 변수를 사용하기

이전 예제에서는, 문자열을 제공하면서 직접 인자를 정의해보았다.
문자열을 직접 제공하는 것에 대한 대안으로, 환경 변수들을 사용하여 인자들을
정의할 수 있다.

```yaml
env:
- name: MESSAGE
  value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]
```

이것은 [컨피그 맵](/docs/tasks/configure-pod-container/configure-pod-configmap/)과
[시크릿](/ko/docs/concepts/configuration/secret/)을
포함해, 환경 변수를 정의하는데 활용할 수 있는 모든 방법들을 활용해서 파드를 위한 인자를
정의할
수 있다는 것을 의미한다.


<div class="alert alert-info" role="note"><h4 class="alert-heading">참고:</h4>환경 변수는 <code>&quot;$(VAR)&quot;</code>와 같이 괄호 안에 나타난다. 이는 변수가 <code>command</code>나 <code>args</code>
필드 안에서 전개되기 위해 필요한 것이다.</div>


## 셸 안에서 커맨드 실행하기

일부 경우들에서는 커맨드를 셸 안에서 실행해야할 필요가 있다. 예를 들어, 실행할 커맨드가
서로 연결되어 있는 여러 개의 커맨드들로 구성되어 있거나, 셸 스크립트일 수도 있다. 셸 안에서
커맨드를 실행하려고 한다면, 이런 방식으로 감싸주면 된다.

```shell
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
```

## 다음 내용


* [파드와 컨테이너를 구성하는 방법](/ko/docs/tasks/)에 대해 더 알아본다.
* [컨테이너 안에서 커맨드를 실행하는 방법](/ko/docs/tasks/debug/debug-application/get-shell-running-container/)에 대해 더 알아본다.
* [컨테이너](/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core)를 확인한다.
