CMD
命令
CMD
命令在使用時,有三個基本原則需要我們遵守。
- 容器啟動時預設執行的命令
- 如果
docker container run
啟動容器時指定了其它命令,則CMD命令會被忽略- 如果定義多個CMD,只有最後一個CMD執行
app.js
let koa = require("koa")
let Router = require("koa-router")
const app = new koa();
const router = new Router();
router.get("/", async ctx => {
ctx.body = "村望老弟的Docker測試伺服器測試資料"
})
app.use(router.routes())
app.listen({
port: 3000
}, () => {
console.log("村望老師的Docker測試伺服器跑起來啦");
})
dockerfile
FROM node:15.10.0-slim
ADD ./app.tar.gz /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
CMD node app.js
容器啟動的時候執行CWD
ENTRYPOINT
命令
ENTRYPOINT
也可以設定容器啟動時要執行的命令。使用起來的語法很簡單
ENTRYPOINT和CMD的區別
CMD
設定的命令,可以在docker container run
時傳入其它命令,覆蓋掉CMD
的命令,但是ENTRYPOINT
所設定的命令時一定會被執行的。先看
CMD
配置的命令dockerfile.cmd
FROM ubuntu:21.04 CMD ["echo","hello docker"]
構建映象
docker image build -f dockerfile.cmd -t cmd-test .
codehope ~/CunWangOwn/docke-file-test docker run cmd-test hello docker
但是我們可以在
run
的時候去覆蓋內部的CMD
命令codehope ~/CunWangOwn/docke-file-test docker run cmd-test ls bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
可以看到
CMD ["echo","hello docker"]
並沒有執行!然後看
ENTRYPOINT
配置的命令dockerfile.entrypoint
FROM ubuntu:21.04 ENTRYPOINT ["echo","hello docker"]
構建映象
docker image build -f dockerfile.entrypoint -t entry-test .
執行映象
codehope ~/CunWangOwn/docke-file-test docker run entry-test ls hello docker ls
發現無法被覆蓋,好像能傳引數的趕腳?
ENTRYPOINT
和CMD
可以聯合使用,ENTRYPOINT
設定執行的命令,CMD傳遞引數。dockerfile.cmdentrymix
FROM ubuntu:21.04 ENTRYPOINT ["echo"] CMD []
構建映象
docker image build -f dockerfile.cmdentrymix -t cemixin .
執行映象
codehope ~/CunWangOwn/docke-file-test docker run cemixin input input
本作品採用《CC 協議》,轉載必須註明作者和本文連結