Dockerfile介绍

1. DockerFile介绍

dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

1、编写一个dockerfile文件

2、docker build 构建成为一个镜像

3、docker run运行镜像

4、docker push发布镜像(DockerHub、阿里云镜像仓库!)

2. DockerFile的命令

bash 复制代码
FROM		# 基础镜像,一切从这里开始构建
MAINTAINER	# 镜像是谁写的:姓名+邮箱
RUN			# 镜像构建的时候需要运行的命令
ADD			# 将当前目录下的所有内容复制到 /app 下 
WORKDIR		# 镜像的工作目录
VOLUME		# 挂载的目录
EXPOSE		# 暴露端口配置
CMD			# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT	# 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD		# 当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令。触发指令。
COPY		# 类似ADD,将我们文件拷贝到镜像中
ENV			# 构建的时候设置环境变量!

2.1实战构建一个jenkins的dockerfile

bash 复制代码
FROM centos:7.9.2009

WORKDIR /opt

ADD   jdk-11.0.19_linux-x64_bin.tar.gz  /opt

ENV  JAVA_HOME=/opt/jdk-11.0.19 

ENV PATH=$PATH:$JAVA_HOME/bin

ADD  jenkins.war  /opt

ENV  JENKINS_HOME=${HOME}/.jenkins

RUN  yum install -y fontconfig

CMD [ "java","-jar","jenkins.war" ]

构建镜像

bash 复制代码
root@server01 jenkins]# docker build -t jenkins:1.0 .

-t  给这个镜像加一个 Tag

通过命令查看列出本地进行的变更历史:docker history 镜像id

CMD和ENTRYPOINT区别

bash 复制代码
CMD			# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT	# 指定这个容器启动的时候要运行的命令,可以追加命令

一、dockerfile中的 CMD

1、每个dockerfile中只能有一个CMD如果有多个那么只执行最后一个。

2、CMD 相当于启动docker时候后面添加的参数看,举个简单例子:

docker run -itd --name test image(镜像) /bin/bash -c

a、镜像名称后面跟了一个/bin/bash -c ,其实等价于在dockerfile中的CMD "/bin/bash","-c"

b、如果dockerfile中的CMD中有了CMD"/bin/bash","-c",那么就不用在执行的时候再添加了,如果添加了参数的话那么就相当于要执行你添加的参数,默认的CMD中的参数就无效了。

二、dockerfile中的ENTRYPOINT

1、一个dockerfile中ENTRYPOINT也只能存在一个,若存在多个那么只执行最后一个,你可以理解为开机启动的意思,和CMD有点像,不过还是有区别。

2、举个简单例子:

a、dockerfile中有ENTRYPOINT "tail","-f","/var/log/nginx/access.log",那么启动的时候镜像就执行了这个里面的内容,如果你像上面带参数的话就相当于在这个执行的内容后面再加入参数。

案例:

如果我们的dockerfile中有a中的这句话然后我们启动我们的docker:

#docker run -itd --name test image(镜像名) /bin/bash -c

此时就相当于我们启动docker的时候执行了:tail -f /var/log/nginx/access.log /bin/bash -c

这个命令明显就不对.

3.Dockerfile优化

bash 复制代码
1、RUN 命令要尽量写在一条里,每次 RUN 命令都是在之前的镜像上封装,只会增大不会减小

2、每次进行依赖安装后,记得yum clean all【centos】 
#yum clean all 清除缓存中的rpm头文件和包文件

3、选择比较小的基础镜像。alpine
相关推荐
AIOps打工人5 天前
`create_agent` 没报错,但 Agent 就是不调工具
java·开发语言·servlet
sbjdhjd23 天前
从零搭建企业级 CI/CD(下):Jenkins+GitLab+Harbor 全链路实战指南
git·servlet·ci/cd·云原生·云计算·gitlab·jenkins
ywl47081208723 天前
springSecurity+jwt,简单版demo
java·前端·servlet
飞天狗11123 天前
零基础JavaWeb入门——第五课第一小节:九大内置对象 · 第1个:request(请求对象)
java·开发语言·前端·后端·servlet
飞天狗11125 天前
零基础JavaWeb入门——第4课:表单处理 —— 浏览器怎么把数据发给服务器
java·开发语言·前端·后端·servlet
未若君雅裁1 个月前
责任链模式详解:从Servlet过滤器到订单创建流程
servlet·责任链模式
逢君学术论文AI写作1 个月前
Java第22课:Servlet获取请求参数+POST请求+表单交互
java·servlet·ai写作
逢君学术论文AI写作1 个月前
Java第21课:JavaWeb入门——Tomcat+第一个Servlet
java·servlet·tomcat
就叫_这个吧1 个月前
Java使用tomcat+servlet+filter实现简单的登录功能,需先登录再进行页面数据管理操作
java·开发语言·servlet·tomcat·jsp·filter
wangyadong3171 个月前
rancher 安装jenkins 。国内镜像太头疼
servlet·jenkins·rancher