CMD和ENTRYPOINT命令

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 

image-20211128112753303

容器启动的时候执行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 .

    image-20211128113719253

    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

    发现无法被覆盖,好像能传参数的赶脚?

  • ENTRYPOINTCMD 可以联合使用, 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 协议》,转载必须注明作者和本文链接
CunWang@Ch
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!