首先明確一下概念:
run:執(zhí)行命令并創(chuàng)建新的 image layer
cmd:設置容器啟動后默認執(zhí)行的命令和參數(shù)
entrypoint:設置容器啟動時運行的命令
在介紹cmd和entrypoint之前,先了解一下shell和exec格式:
- shell:
FROM centos
RUN apt-get install -y vim
ENV name docker
CMD echo "hello docker"
ENTRYPOINT echo "hello $name "
- exec
FROM centos
RUN ["apt-get", "install", "-y", "vim"]
ENV name docker
CMD ["/bin/echo", "hello docker"]
ENTRYPOINT ["/bin/bash","-c", "echo hello $name "]
- build一個docker
cd somefile
docker build -t cc/xxx .
CMD
容器啟動時默認執(zhí)行的命令
FROM centos
ENV name docker
CMD echo "hello $name"
情況一:如果docker run指定了其它命令,CMD命令被忽略
docker run -it [image] /bin/bsh
情況二:如果定義了多個CMD,只有最后一個執(zhí)行
...
CMD echo "hello ab"
CMD echo "hello $name" # 只執(zhí)行這個
ENTRYPOINT
讓容器以應用程序或者服務的形式運行
特點:不會被忽略,一定執(zhí)行
最佳實踐:寫一個shell腳本作為entrypoint
COPY docker-entrypoint.sh /usr/local/bin
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 27017
CMD ["mongoDB"]