|NO.Z.00109|——————————|CloudNative|——|KuberNetes&Docker操作.V07|----------------------------------------------------|dockerfile.v02|cmd&entrypoint
阿新 • • 發佈:2022-03-29
[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)