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取值

第一种方法 纯键值对 使用方法如下:(其他两种方法下面会讲到)

env:
   - name: APP_COLOR
     value: pink

4. ConfigMap

ConfigMap的使用

使用ConfigMap中所有的键值对:

envFrom:
	- configMapRef:
		name: app-config	# ConfigMap的名字

只使用ConfigMap中的一个或几个值:

env:
	- name: APP_COLOR			# 环境变量的名字
	  valueFrom: 
	  	configMapKeyRef: 
	  		name: app-config	# ConfigMap的名字
	  		key: APP_COLOR		# ConfigMap中对应的环境变量的名字

ConfigMap作为一个文件写入容器的Volumne里面。这个操作会在Volumne里面为每一个键值对建一个文件,以“键”为文件名,“值”为文件内容。(比如有两个文件,APP_COLOR文件内容是APP_MODE的值,APP_MODE文件内容是prod

volumnes:
	- name: app-config-volumne		# volumne的名字
	  configMap: 
	  	name: app-config	# ConfigMap的名字

ConfigMap的创建

以下是创建ConfigMap(缩写为cm)的方法:

kubectl命令创建

# 从纯键值对取值:
kubectl create configmap <configMapName> \
	--from-literal=<key1>=<value1> \
	--from-literal=<key2
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值