본문 바로가기

데브옵스/K8S

docker entrypoint 란 / k8s entrypoint 사용 ? (entrypoint 사용법)

반응형

Intro

많은 시스템이 컨테이너 기반으로 올라가게 되면서, docker를 생성하여 프로세스를 띄울 일이 많아졌습니다. 또한 최근 흐름은 docker 자체가 단독적으로 사용되기보다는 K8S 시스템 내에서 docker를 사용하고 있습니다.

 

오늘은 docker file에 선언하는 entrypoint와, docker entrypoint 과 같은 기능을 K8S에서 사용하는 사례에 대해 간단히 설명합니다.

 

Docker Entrypoint 란?

 

docker의 entrypoint는 dockerfile 선언 시 컨테이너가 시작될 때 실행되는 커맨드를 지정하는 기능입니다. 최종적으로는 주로 컨테이너 안에서 항상 실행될 프로세스를 정의하는 데 사용됩니다.

 

간단한 예를 들어볼까요?

 

FROM Alpine
COPY excutescript.sh /etc/test/
ENTRYPOINT ["excutescript.sh"]

 

이 Dockerfile은 Apline 기반 이미지를 사용하며, excutescript.sh라는 파일을 /etc/test/ 디렉터리로 복사한 후 entrypoint로 excutescript.sh를 설정합니다.

 

이렇게 Dockerfile이 준비된 상태에서, Docker 이미지를 빌드하고 실행하면, 컨테이너가 시작될 때 executescript.sh가 실행됩니다.

entrypoint로 지정된 파일은 컨테이너의 기본 프로세스로 실행되며, 이 프로세스가 실행 중인 동안 컨테이너가 실행 상태로 유지됩니다.

 

이러한 특성 때문에, entrypoint에 정의하는 커맨드나 스크립트는 컨테이너가 시작될 때 필요한 초기화 작업이나 실행해야 하는 프로그램 등을 지정하는 데 주로 사용됩니다.

 

여러 명령어를 사용할 때는, 배열 형태로 아래와 같이 사용됩니다.

FROM Apline
ENTRYPOINT ["echo", "Hello, World!"]

 

K8S entrypoint 사용 ?

entrypoint라는 기능 자체가 dockerfile을 통해 이미지를 빌드한 후, 해당 이미지가 실행될 때 동작하는 방식을 정의하는 것이기 때문에 K8S에 entrypooint라는 기능이 존재하는 것은아닙니다.

 

하지만 유사하게 컨테이너를 배포할 때 구현할 수 있도록 제공하고 있는데요. K8S 의 yaml 내 conatiners 하위의 'command' 라는 부분을 통해 구현합니다.

 

아래와 같이 deployment, 혹은 pod, daemonset 등 containers 이미지를 정의할 경우 containers 하위의 command 섹션이 entrypoint와 동일한 역할을 합니다.

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: my-image
          command: ["echo", "Hello, Kubernetes!"]

 

마치며

이미지를 기반으로 컨테이너를 생성하다보면, 값을 초기화 하거나, 사전 인증 처리 등을 하는 케이스가 있습니다. docker의 entrypoint 혹은 K8S 내의 command 기능을 통해 이러한 상황을 해결할 수 있을 것 같네요.

 

지금까지 docker entrypoint / K8S yaml 파일 내 containers의 command 항목에 대해 알아보았습니다.

배워가며 작성하는 블로그입니다.
피드백 및 의견 환영입니다 🙂

 

반응형