docker學(xué)習(xí)筆記(1)
1. docker run / docker create / docker start 三個(gè)命令有何區(qū)別
1.1 docker run <image-id>
docker run就是docker create和docker start兩個(gè)命令的組合。
1.2 docker create <image-id>
docker create命令為指定的鏡像image添加了一個(gè)可讀寫層珠洗,構(gòu)成了一個(gè)新的容器雕薪。注意,這個(gè)容器并沒有運(yùn)行。
1.3 docker start <container-id>
Docker start命令為容器文件系統(tǒng)創(chuàng)建了一個(gè)進(jìn)程隔離空間细诸。每一個(gè)容器只能夠有一個(gè)進(jìn)程隔離空間竖席。
2. docker rm / docker kill 有何區(qū)別
2.1 docker rm <container-id>
docker rm命令會(huì)移除構(gòu)成容器的可讀寫層。注意扣猫,這個(gè)命令只能對非運(yùn)行態(tài)容器執(zhí)行。
2.2 docker kill <container-id>
docker kill 命令向運(yùn)行在容器中的指定進(jìn)程發(fā)送了一個(gè)不友好的SIGKILL信號翘地。
3. Dockerfile 中的 ENTRYPOINT 和 CMD 有何區(qū)別
可用兩種方式指定 ENTRYPOINT 和 CMD 要運(yùn)行的命令:Shell 格式和 Exec 格式申尤,推薦使用 Exec 格式,因?yàn)榭勺x性更強(qiáng)衙耕。
3.1 ENTRYPOINT
ENTRYPOINT 指令可讓容器以應(yīng)用程序或者服務(wù)的形式運(yùn)行昧穿。
ENTRYPOINT 不會(huì)被忽略,一定會(huì)被執(zhí)行橙喘,即使運(yùn)行 docker run 時(shí)指定了其他命令时鸵。
ENTRYPOINT 中的參數(shù)始終會(huì)被使用,而 CMD 的額外參數(shù)可以在容器啟動(dòng)時(shí)動(dòng)態(tài)替換掉渴杆。
3.2 CMD
CMD 指令允許用戶指定容器的默認(rèn)執(zhí)行的命令寥枝。
- 此命令會(huì)在容器啟動(dòng)且 docker run 沒有指定其他命令時(shí)運(yùn)行。
- 如果 docker run 指定了其他命令磁奖,CMD 指定的默認(rèn)命令將被忽略囊拜。
例如 docker run -it [image] /bin/bash,CMD 會(huì)被忽略掉比搭,命令 bash 將被執(zhí)行冠跷。
- 如果 Dockerfile 中有多個(gè) CMD 指令,只有最后一個(gè) CMD 有效身诺。
3.3 最佳實(shí)踐
- 使用 RUN 指令安裝應(yīng)用和軟件包蜜托,構(gòu)建鏡像。
- 如果 Docker 鏡像的用途是運(yùn)行應(yīng)用程序或服務(wù)霉赡,比如運(yùn)行一個(gè) MySQL橄务,應(yīng)該優(yōu)先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可為 ENTRYPOINT 提供額外的默認(rèn)參數(shù)穴亏,同時(shí)可利用 docker run 命令行替換默認(rèn)參數(shù)蜂挪。
- 如果想為容器設(shè)置默認(rèn)的啟動(dòng)命令,可使用 CMD 指令嗓化。用戶可在 docker run 命令行中替換此默認(rèn)命令棠涮。