CMD可以用来设置容器启动时默认会执行的命令。

    • 容器启动时默认执行的命令
    • 如果docker container run启动容器时指定了其它命令,则CMD命令会被忽略
    • 如果定义了多个CMD,只有最后一个会被执行。

    格式:

    • CMD ["executable", "patameter", ...]
    1. FROM ubuntu:21.04
    2. ENV VERSION=2.0.1
    3. RUN apt-get update && \
    4. apt-get install -y wget && \
    5. wget https://github.com/ipinfo/cli/releases/download/ipinfo-${VERSION}/ipinfo_${VERSION}_linux_amd64.tar.gz && \
    6. tar zxf ipinfo_${VERSION}_linux_amd64.tar.gz && \
    7. mv ipinfo_${VERSION}_linux_amd64 /usr/bin/ipinfo && \
    8. rm -rf ipinfo_${VERSION}_linux_amd64.tar.gz

    Note
    使用docker system prune -f可以将后台已经停止的容器全部删除
    使用docker image prune -a可以将后台没有使用的镜像全部删除

    1. $ docker image build -t ipinfo .
    2. $ docker container run -it ipinfo
    3. root@8cea7e5e8da8:/#
    4. root@8cea7e5e8da8:/#
    5. root@8cea7e5e8da8:/#
    6. root@8cea7e5e8da8:/# pwd
    7. /
    8. root@8cea7e5e8da8:/#

    默认进入到shell是因为在ubuntu的基础镜像里有定义CMD

    1. $docker image history ipinfo
    2. IMAGE CREATED CREATED BY SIZE COMMENT
    3. db75bff5e3ad 24 hours ago RUN /bin/sh -c apt-get update && apt-get 50MB buildkit.dockerfile.v0
    4. <missing> 24 hours ago ENV VERSION=2.0.1 0B buildkit.dockerfile.v0
    5. <missing> 7 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
    6. <missing> 7 days ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
    7. <missing> 7 days ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 0B
    8. <missing> 7 days ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 811B
    9. <missing> 7 days ago /bin/sh -c #(nop) ADD file:d6b6ba642344138dc… 74.1MB