其实,dockerfile中我们只需要了解
CMD 和 ENTRYPOINT 的区别就可以了
简单的例子:如果单独使用其中一个:
CMD [“sleep”,”10″] ,这个时候我们的镜像创建的Pod ,会默认启动sleep 10 ,然后退出
如果我们想替换这个CMD 也很简单,只需要
docker run ubuntu-sleeper sleep 10 (这个命令后边传递进去的命令会替换cmd里边的参数)
但是如果我们可以只传入10 , 类似
docker run ubuntu-sleeper 10
这个时候我们就用到了ENTRYPOINT
1 2 |
FROM Ubuntu ENTRYPOINT ["sleep"] |
这个时候我们再运行镜像就可以直接传递sleep的时间了
docker run ubuntu-sleeper 10
但是,如果我们不传递任何值,直接运行
docker run ubuntu-sleeper
这个时候就会报错,因为没有默认值
如何设置默认值呢?就是两个都用上
1 2 3 |
FROM Ubuntu ENTRYPOINT ["sleep"] CMD ["10"] |
也就是说我们传递的参数,会替换掉CMD里边的参数,然后追加到ENTRYPOINT 后边
如果我们想修改ENTRYPOINT ,需要使用特殊的命令参数
1 |
docker run --entrypoint sleep2.0 ubuntu-sleeper 10 |
在Kuberenetes 中,我们也可以定义
1 2 3 4 5 6 7 8 9 10 |
apiVersion: v1 kind: Pod metadata: name: ubuntu-sleeper-pod spec: containers: - name: ubuntu-sleeper image: ubuntu-sleeper command: ["sleep2.0"] args: ["10"] |
也就是说kubernetes中的args === CMD
command === ENTRYPOINTS
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021