1. 程式人生 > 其它 >|NO.Z.00109|——————————|CloudNative|——|KuberNetes&Docker操作.V07|----------------------------------------------------|dockerfile.v02|cmd&entrypoint

|NO.Z.00109|——————————|CloudNative|——|KuberNetes&Docker操作.V07|----------------------------------------------------|dockerfile.v02|cmd&entrypoint



[CloudNative:KuberNetes&二進位制升級.V07]                                                            [Applications.KuberNetes] [dockerfile|FROM/MAINTAINER/RUN/EXPOSE/CMD/ENTRYPOINT/VOLUME/ENV/ADD/WORKDIR/USER|]








一、Dockerfile:CMD引數
### --- 建立dockerfile

[root@k8s-master01 dockerfiles]# vim Dockerfile 
FROM centos:8

LABEL maintainer="test dockerfile"
LABEL test=dockerfile

RUN useradd yanqi
RUN mkdir /opt/yanqi

CMD ["sh", "-c", "echo 1"]
#RUN useradd yanqi && /opt/yanqi
### --- 構建映象

[root@k8s-master01 dockerfiles]# docker build -t centos:cmd .
Sending build context to Docker daemon  2.048kB
Step 1/6 : FROM centos:8
 ---> 300e315adb2f
Step 2/6 : LABEL maintainer="test dockerfile"
 ---> Using cache                               # cache,因為之前執行過,所以再次執行都是使用快取的層機制。使用的是快取。
 ---> 92c241fb12c3
Step 3/6 : LABEL test=dockerfile
 ---> Using cache                               # cache,因為之前執行過,所以再次執行都是使用快取的層機制。使用的是快取。
 ---> cd77410a52cc
Step 4/6 : RUN useradd yanqi
 ---> Using cache                               # cache,因為之前執行過,所以再次執行都是使用快取的層機制。使用的是快取。
 ---> 5a21817eab18
Step 5/6 : RUN mkdir /opt/yanqi
 ---> Using cache                               # cache,因為之前執行過,所以再次執行都是使用快取的層機制。使用的是快取。
 ---> 1997dc655b9f
Step 6/6 : CMD ["sh", "-c", "echo 1"]
 ---> Running in 124b13a2f822
Removing intermediate container 124b13a2f822
 ---> 7c58a669ae15
### --- dockerfile和構建映象不在同一目錄下操作引數

~~~     # 或者dockerfile不在當前目錄可以使用-f引數來指定目錄
[root@k8s-master01 dockerfiles]# mkdir yanqi
[root@k8s-master01 dockerfiles]# mv Dockerfile yanqi/

~~~     # 使用-f引數構建指定dockerfile構建映象
[root@k8s-master01 dockerfiles]# docker build -t centos:cmd -f yanqi/Dockerfile 
### --- 執行容器

~~~     # 執行容器;執行容器,執行命令,得到的結果為1,說明和我們建立的dockerfile對應
[root@k8s-master01 dockerfiles]# docker run -ti --rm centos:cmd         
1

~~~     # 也可以不列印,覆蓋CMD命令
~~~     # 在k8s中不建議把CMD命令打入到映象中,因為遵循構建的策略是:一次構建匯出執行。
[root@k8s-master01 dockerfiles]# docker run -ti --rm centos:cmd bash
[root@f8ce26648d9b /]#

二、Dockerfile:ENTRYPOINT引數
### --- 建立dockerfile

[root@k8s-master01 dockerfiles]# vim Dockerfile 
FROM centos:8

LABEL maintainer="test dockerfile"
LABEL test=dockerfile

RUN useradd yanqi
RUN mkdir /opt/yanqi

ENTRYPOINT ["sleep"]                    # 定義為sleep3秒後退出,CMD命令為ENTRYPOINT的引數

CMD ["3"]
#RUN useradd yanqi && /opt/yanqi
~~~     # 構建映象

[root@k8s-master01 dockerfiles]# docker build -t centos:ep .
~~~     # 執行容器
~~~     注:持續3秒中後退出

[root@k8s-master01 dockerfiles]# docker run -ti --rm centos:ep          
### --- 更新建立dockerfile
~~~     建立dockerfile

[root@k8s-master01 dockerfiles]# vim Dockerfile
FROM centos:8

LABEL maintainer="test dockerfile"
LABEL test=dockerfile

RUN useradd yanqi
RUN mkdir /opt/yanqi

ENTRYPOINT ["echo"]

CMD ["3"]
#RUN useradd yanqi && /opt/yanqi
### --- 執行並構建容器

[root@k8s-master01 dockerfiles]# docker run -ti --rm centos:ep 10   // 時間定義為10,這個10會覆蓋掉前面的3秒,因為配置了ENTRYPOINT
[root@k8s-master01 dockerfiles]# docker build -t centos:ep .
[root@k8s-master01 dockerfiles]# docker run -ti --rm centos:ep 10   // 把前面的值覆蓋掉,會把後面的值作為一個引數
10
[root@k8s-master01 dockerfiles]# docker run -ti --rm centos:ep yanqi
yanqi
~~~     # 使用建議:
~~~     注:可以把相同的地方java -jar xxx.jar --profile打進ENTRYPOINT裡面,
~~~     CMD的可以設定成test或者uat;可以通過k8s的資原始檔注入進去,也就是arg注入進去

[root@k8s-master01 dockerfiles]# java -jar xxx.jar --profile=test/uat








===============================END===============================


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart                                                                                                                                                    ——W.S.Landor



來自為知筆記(Wiz)