CKAD备战笔记(2)- 配置

1. Dockerfile

CMD

假设我们用Dockerfile创建了自己的镜像myImg

CMD 是容器跑起来之后默认会跑的命令,如果docker run中重新定义了命令,那么CMD中的内容会被完全重写,比如:

docker run myImg sleep 10
# 用于创建镜像`myImg`的Dockerfile:
FROM ubuntu
CMD ["sleep", "5"]

结果: sleep 10 会覆盖CMD sleep 5。最终,容器会睡10秒钟。

ENTRYPOINT

# 用于创建镜像`myImg`的Dockerfile:
FROM ubuntu
ENTRYPOINT ["sleep"]

ENTRYPOINT会把docker run中的命令,添加到ENTRYPOINT命令的后面。比如:

docker run myImg 10

结果:sleep这个命令来自ENTRYPOINT,而秒数来自docker run中给的参数。最终执行的命令是:

sleep 10

容器会睡10秒钟。

⚠️ 如果docker run中没有给参数,那就会报错

⚠️ Dockerfile中定义的命令,可以是shell格式,或者json格式:

  • SHELL格式:CMD sleep 5
  • JSON格式:CMD ["sleep", "5"]:注意第一个元素要是可执行的命令,接下来才是参数

以上两者效果是一样的

ENTRYPOINT + CMD

ENTRYPOINT的使用感觉更合理,但是当没有给参数时,会报错,要是有个默认值就好了。这时候我们可以同时使用ENTRYPOINTCMD

# 用于创建镜像`myImg`的Dockerfile:
FROM ubuntu
ENTRYPOINT ["sleep"]
CMD ["5"]

⚠️ 注意:这里一定要用json格式

docker run myImg 							# 使用默认值参数 5
docker run myImg 10							# 或者自定义参数为 10

docker run --entrypoint sleep2.0 myImg 10	# 或者自定义命令和参数:假设我们想用新版本的命令`sleep2.0`

使用Dockerfile

用最后那个同时用了ENTRYPOINTCMDDockerfile建的镜像来创建Pod:

cd myFolder
ls							# 这里应该能看到你写的Dockerfile
docker build -t myImg .  	# 用当前路径下的Dockerfile建镜像,名字叫`myImg`

接下来新建一个YAML文件,在文件中使用新建的镜像myImg

# pod.yaml
apiVersion: v1
kind: Pod
metadata:
	name: myPod
spec:
	containers:
		- name: myContainer
		  image: myImg
		  command: ["sleep2.0"]			# 执行命令
	      args: ["10"]					# 可变参数
要设置的命令/参数 Dockerfile yaml docker run ... kubectl run
sleep2.0 ENTRYPOINT .spec.containers.command 跟在--entrypoint k run myPod --image=myImg --command sleep2.0
10 或者 --position=bed CMD .spec.containers.args 直接加在命令后 k run myPod --image=myImg -- 10
或者
k run myPod --image=myImg -- --position bed

⚠️注意,附加到 docker run的任何内容都应该以json数组的格式写到YAML文件里。
⚠️ 用kubectl create -f pod.yaml跑一下这个YAML文件

2. Pod和Deployment

Pod

Pod在建成之后,除了以下这些属性,其他的内容是无法修改的:

  • spec.containers[*].image
  • spec.initContainers[*].image
  • spec.activeDeadlineSeconds
  • spec.tolerations

如果想要修改已存在的Pod的话,可以这样:

kubectl get pod xxx -o yaml > new-pod.yml
vi new-pod.yml			# 然后按照你的要求修改new-pod.yaml
kubectl delete pod xxx
kubectl create -f new-pod.yml

⚠️ 注意:该设计是合理的,因为PodDeployment生成的产物。如果想要修改Pod的某个参数,那么 更合理的方法 是修改Deployment,然后让Deployment生成新的Pod,而不是直接删除Pod

Deployment

Pod不同,Deployment可以简单的通过kubectl edit deployment my-deployment修改。

3. 环境变量(env)

举例:

apiVersion: v1
kind: Pod
metadata:
  name: simple-webapp-color
spec:
  containers:
     - name: simple-webapp-color
       image: simple-webapp-color
       port:
             - containerPort: 8080
       env:
             - name: APP_COLOR
               value: pink

环境变量(env)可以由以下三种方法进行配置:

  1. 纯键值对
  2. ConfigMap取值
  3. Secret
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值