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
相关推荐
像污秽一样18 小时前
基于Servlet实现MVC
servlet·mvc
爬山算法2 天前
Tomcat(6) 什么是Servlet容器?
java·servlet·tomcat
小菜日记^_^3 天前
增删改查基础项目总结
java·数据库·spring boot·后端·spring·servlet·tomcat
ajsbxi5 天前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
记录成长java5 天前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
长安初雪5 天前
Request 和 Response 万字详解
计算机网络·servlet
A-bodgie5 天前
Spring 中的 Environment 对象
java·后端·spring·servlet·springboot
笔墨登场说说7 天前
JDK 里面的线程池和Tomcat线程池的区别
java·servlet·tomcat
听潮阁7 天前
【SpringCloud详细教程】-01-一文了解微服务
开发语言·spring boot·spring cloud·servlet·java-ee·mybatis
阑梦清川8 天前
JavaEE初阶-----servlet-api,Maven创建项目,部署,打包,测试全过程
servlet·java-ee·maven