區別以下:docker
1.1.1 Dockerfile僅僅使用CMD指令ubuntu
Dockerfile: FROM ubuntu CMD ["echo", "far"]
➜ docker build -t run-test:0.1 . Sending build context to Docker daemon 2.048kB Step 1/2 : FROM ubuntu ---> 93fd78260bd1 Step 2/2 : CMD ["echo", "far"] ---> Running in 0f97a65b839e Removing intermediate container 0f97a65b839e ---> 22e6e82769ea Successfully built 22e6e82769ea Successfully tagged run-test:0.1 >>> 咱們能夠看到,構建過程當中並無執行CMD中的echo指令,只是看到了構建信息 <<<
➜ docker run run-test:0.1 far >>> 咱們能夠看到,在執行docker run後,CMD中的echo命令被執行了 <<<
➜ docker run run-test:0.1 echo bor bor >>> 咱們能夠看到,在執行docker run後,CMD中的echo命令被docke run的命令參數覆蓋了。 <<<
1.1.2 Dockerfile即便用CMD又使用RUNui
Dockerfile: FROM ubuntu CMD ["echo", "far"] RUN ["echo", "foo"]
➜ docker build -t run-test:0.1 . Sending build context to Docker daemon 2.048kB Step 1/3 : FROM ubuntu ---> 93fd78260bd1 Step 2/3 : CMD ["echo", "far"] ---> Running in 44ef2a9c88ca Removing intermediate container 44ef2a9c88ca ---> 559ca9f008a5 Step 3/3 : RUN ["echo", "foo"] ---> Running in f801910112ab foo Removing intermediate container f801910112ab ---> 6d042893d5e9 Successfully built 6d042893d5e9 Successfully tagged run-test:0.1 >>> 咱們能夠看到,構建過程當中並無執行CMD的echo指令,可是執行了RUN指令 <<<
➜ docker run run-test:0.1 far >>> 咱們能夠看到,在執行docker run後,CMD中的echo命令被執行了 <<<
➜ docker run run-test:0.1 echo bor bor >>> 咱們能夠看到,在執行docker run後,CMD中的echo命令被docke run的命令參數覆蓋了。 <<<
1.1.1 Dockerfile僅僅使用ENTRYPOINT指令3d
Dockerfile: FROM ubuntu ENTRYPOINT ["echo", "far"]
➜ docker build -t run-test:0.1 . Sending build context to Docker daemon 2.048kB Step 1/2 : FROM ubuntu ---> 93fd78260bd1 Step 2/2 : ENTRYPOINT ["echo", "far"] ---> Running in ede61562f973 Removing intermediate container ede61562f973 ---> 76dd760e3382 Successfully built 76dd760e3382 Successfully tagged run-test:0.1 >>> 咱們能夠看到,構建過程當中並無執行echo指令,只是看到了構建信息 <<<
➜ docker run run-test:0.1 far >>> 咱們能夠看到,在執行docker run後,ENTRYPOINT中的echo命令被執行了 <<<
➜ docker run run-test:0.1 echo bor far echo bor >>> 咱們能夠看到,在執行docker run後,ENTRYPOINT會把容器名後面的全部內容都當成參數傳遞給其指定的命令 <<< >>> 2. 另外,咱們能夠發現,在Dockerfile中,ENTRYPOINT指定的參數比運行docker run時指定的參數更靠前。 例如此處其實是執行了:echo "far echo bor"
1.1.2 Dockerfile即便用ENTRYPOINT又使用RUNcode
Dockerfile: FROM ubuntu ENTRYPOINT ["echo", "far"] RUN ["echo", "foo"]
➜ docker build -t run-test:0.1 . Sending build context to Docker daemon 2.048kB Step 1/3 : FROM ubuntu ---> 93fd78260bd1 Step 2/3 : ENTRYPOINT ["echo", "far"] ---> Running in b0e86020ab3e Removing intermediate container b0e86020ab3e ---> 5d389a86c0dc Step 3/3 : RUN ["echo", "foo"] ---> Running in f4eb7745c7a3 foo Removing intermediate container f4eb7745c7a3 ---> 323ab1e07c2e Successfully built 323ab1e07c2e Successfully tagged run-test:0.1 >>> 咱們能夠看到,構建過程當中並無執行ENTRYPOINT的echo指令,可是執行了RUN指令 <<<
➜ docker run run-test:0.1 far >>> 咱們能夠看到,在執行docker run後,ENTRYPOINT中的echo命令被執行了 <<<
➜ docker run run-test:0.1 echo bor far echo bor >>> 1. 咱們能夠看到,在執行docker run後,ENTRYPOINT會把容器名後面的全部內容都當成參數傳遞給其指定的命令。 <<< >>> 2. 另外,咱們能夠發現,在Dockerfile中,ENTRYPOINT指定的參數比運行docker run時指定的參數更靠前。 例如此處其實是執行了:echo "far echo bor"