Shell vs Exec Form | Docker

Tam olarak aşina olmadığımdan dolayı kendime anlatır gibi not alma sürecine giriyoruz. Docker'da sık sık "exec" ve "shell" form ayrımını görüyorum. "Nedir ulan bu form arasındaki farklılık?" sorusunu sorarak ucundan değinelim.

Docker'da RUN, CMD ve ENTRYPOINT komutları, yazılabilecek iki farklı forma sahiptir; shell ve exec. Bu iki form instructionların davranışlarını tamamen değiştirmektedir.

Shell, köşeli parantezler [] olmadan yazılır. Container'ın sahip olduğu shell tarafından çalıştırılır. Örneğin /bin/bash, /bin/sh gibi gibi. Shell tarafından çalıştırılan komutlar aslında child process olarak çalıştırılır. Basit bir kullanım örneği:

FROM alpine:latest

WORKDIR /tmp

#/bin/sh -c "echo 'Shell Form' >> result.txt"
RUN echo "Shell Form" >> result.txt
 
#/bin/sh -c 'cat result.txt'
CMD cat result.txt      
$ docker build -t burakovali/shellform .
[+] Building 1.7s (7/7) FINISHED

$ docker run burakovali/shellform
Shell Form

Exec, köşeli parantezler [] ile yazılır. Bir shell olmadan doğrudan çalıştırılır. Örneğin:

FROM alpine:latest

COPY . .

CMD ["cat", "result.txt"] 
$ docker build -t burakovali/execform .
[+] Building 1.3s (7/7) FINISHED

$ docker run burakovali/execform 
EXEC FORM

 


İletişime geçmek, yorum bırakmak veya hatalarımı düzetlmek istersen mail atabilirsin.

iletişim için tıklama yeri