도커에서는 도커파일로 이미지를 생성할 때, CMD 를 통해 이미지 생성 전에 명령어를 실행하도록 만들 수 있다.
Dockerfile
FROM ubuntu
# 기본(Default) 명령어
ENTRYPOINT [ "sleep" ]
# 기본 인자(Argument)로 들어간다.
CMD ["5"]
이후 도커 명령어를 사용하여 이미지로 만든다.
$ docker build -t ubuntu-sleeper .
# sleep 5 로 실행
$ docker run ubuntu-sleeper
# == sleep 5
# 해당 명령어로 실행할 경우 인자 값 5가 무시되어 "sleep 10" 으로 실행이 된다.
$ docker run ubuntu-sleeper 10
# == sleep 10
# ENTRYPOINT 를 무시하고 sleep2.0 을 실행한다.
$ docker run --entrypoint sleep2.0 ubuntu-sleeper 10
# == sleep2.0 10
쿠버네티스에서도 도커와 비슷한 기능을 제공하는데, 이렇게 사용한다.
apiVersion: v1
kind: Pod
metadata:
labels:
run: ubuntu-sleeper-pod
name: ubuntu-sleeper-pod
spec:
containers:
- image: ubuntu-sleeper
name: ubuntu-sleeper
# 해당 설정은 로컬 이미지를 사용하여 파드를 만들 수 있게 한다.
imagePullPolicy: Never
# docker 의 ENTRYPOINT 에 해당
command: ["sleep"]
# docker 의 CMD 에 해당
args: ["10"]
# command 는 이렇게도 사용한다. (숫자도 반드시 쌍따옴표로 묶는다.)
command:
- "sleep"
- "10"
변수를 설정할 수 도 있다. command 와 마찬가지로 아래처럼 사용한다.
command:
- "sleep"
- "10"
env:
- name: APP_COLOR
value: pink
Variable(변수), ConfigMap, Secrets 세 가지의 환경변수 타입이 있다.
이 중 ConfigMap 에 대해 정리를 해본다.
ConfigMap 을 생성하는 방법에는 2가지가 있다.
1. 명령어로 생성하기 (Imperative)
# 명령식 (Imperative)
$ kubectl create configmap \
<config-name> --from-literal=<key>=<value>
ex)
$ kubectl create configmap \
app-config --from-literal=APP_COLOR=blue
--from-literal=APP_MODE=prod
kubectl create configmap \
<config-name> --from-file=<path-to-file>
ex)
kubectl create configmap \
app-config --from-file=app_config.properties
2. 파일로 생성하기 (Declarative)
# 선언식 (declarative)
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
APP_COLOR: blue
APP_MODE: prod
$ kubectl create -f app-config.yaml
이후 아래 명령어로 ConfigMap 을 조회할 수 있다.
$ kubectl get configmaps
$ kubectl describe configmaps
이렇게 생성한 ConfigMap 은 매니페스트 파일에서 아래와 같이 호출할 수 있다.
apiVersion: v1
kind: Pod
metadata:
labels:
run: ubuntu-sleeper-pod
name: ubuntu-sleeper-pod
spec:
containers:
- image: ubuntu-sleeper
name: ubuntu-sleeper
envFrom:
- configMapRef:
name: app-config
설정 값, 단일 설정 값, 설정 파일(이건 어떻게 활용되는지 모르겠다.) 이렇게 사용할 수 있다고 한다.
설정 값을 셋팅하는 방법은 이제 대충 알았지만 사용은 어떻게 하는지는 공식문서를 봐도 잘 와닿지는 않았다.
처음에 정리했던 내용들을 활용하면 스프링부트의 application.yml 이나 application.properties 를 활용하여 배포를 할 수 있을 것 같다.
오늘은 조금 재미없는 내용들을 정리해보았다.
다음은 Secret 키 설정에 대한 것을 정리할 예정..
'Dev > Kubernetes' 카테고리의 다른 글
[CKAD] section 3. Configuration (3) - SA, Resource, Taints & Toleration (0) | 2022.03.21 |
---|---|
[CKAD] section 3. Configuration (2) - Secret & Security Contexts (0) | 2022.03.17 |
[CKAD] section 2. Core Concepts (3) - Namespace (0) | 2022.03.14 |
[CKAD] section 2. Core Concepts (3) - ReplicaSet & Deployment (0) | 2022.03.11 |
[CKAD] section 2. Practice Test (KodeKloud) (0) | 2022.03.08 |