一、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