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.