Dockerfile에서 CMD와 ENDPOINT의 차이를 알아본다.
기본적인 Docker 빌드/시작 코드
1
2
| $ docker build -t dockername .
$ docker run --name continaer_name dockername
|
*이미지가 꺠지는게 존재하지만 누르면 잘보입니다.
CMD
- cmd를 실행시키는 방식
- 기본 echo test를 설정한다.
1
2
| FROM ubuntu
CMD ["echo", "test" ]
|
하나의 문자열로 실행시키면 어떻게 될까?
1
2
| FROM ubuntu
CMD ["echo test" ]
|
변수를 지정
- ENV를 사용하여 dockerfile을 빌드한다.
1
2
3
| FROM ubuntu
ENV VAR1=test_value
CMD echo $VAR1
|
- 여러 변수를 지정하여 dockerfile을 빌드한다
1
2
3
4
| FROM ubuntu
ENV VAR1=test_value\
VAR2=var2
CMD echo $VAR1 $VAR2
|
1
| $ docker inspect containerid
|
옵션을 주어서 실행하게 된다면, 요청 받은 인자값으로 대체
1
2
| $ docker run --name containername buildname ps -aef
$ docker inspect containername
|
Entrypoint
- ENTRYPOINT도 CMD와 코드 구성은 동일하다.
- 결국 CMD와는 다르게 커맨드에 추가 시 없어진는게 아니라 추가로 동작한다. → 동작원리만 다르다.
1
2
3
4
5
| # Entrypoint
FROM ubuntu
ENV VAR1=test_value\
VAR2=var2
ENTRYPOINT echo $VAR1 $VAR2/
|
1
2
3
| $ docker build -t buildname -f filename .
$ docker run --name containername buildname
$ docker inspect containername
|
<br/
- docker 실행시 옵션을 주면 어떻게 될까?
- 커맨드가 추가되는것을 볼 수 있다.
1
2
| $ docker run --name containername buildname ps -aef
$ docker inspect containername
|
어떤 상황에서 동적으로 둘다 쓸까?
- batch script를 적용해본다.
- 주기적으로 프로세스를 확인하는 batch 작업
- default = 5
1
2
3
4
5
6
7
8
9
10
11
12
13
| #!/bin/bash
INTERVAL=$1
if [ -z "$INTERVAL" ]; then
INTERVAL=5
fi
while true;
do
ps x;
sleep $INTERVAL;
done
|
1
2
3
4
5
| FROM ubuntu
Add batch_ps.sh /usr/local/bin/batch_ps.sh
RUN chmod +x /usr/local/bin/batch_ps.sh
ENTRYPOINT /usr/local/bin/batch_ps.sh
|
1
2
| $ docker build -t batch_job -f Batchps .
$ docker run --name batch_test batch_job
|
ENTRYPOINT와 CMD를 사용하여 동적으로 만들기
1
2
3
4
5
6
| FROM ubuntu
Add batch_ps.sh /usr/local/bin/batch_ps.sh
RUN chmod +x /usr/local/bin/batch_ps.sh
ENTRYPOINT ["/usr/local/bin/batch_ps.sh"]
CMD ["5"]
|
1
2
3
4
5
6
7
8
9
| #!/bin/bash
INTERVAL=$1
while true;
do
ps x;
sleep $INTERVAL;
done
|