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
相关推荐
Suwg2096 小时前
【由浅入深认识Maven】第4部分 maven在持续集成中的应用
servlet·ci/cd·maven
花月C17 小时前
Java Web-Tomcat Servlet
java·前端·servlet·java-ee·tomcat
怀旧6662 天前
Servlet 详解
java·开发语言·servlet·个人开发
jcsx2 天前
证券量化交易选择合适的编程语言
javascript·servlet·numpy·pandas·pyqt
小张认为的测试3 天前
Jenkins邮件通知的详细配置含邮件通知模板!
java·servlet·ci/cd·jenkins·邮件通知
xiao-xiang3 天前
jenkins-通过api获取所有job及最新build信息
前端·servlet·jenkins
大新新大浩浩4 天前
jenkins平台使用Login Theme、Customizable Header插件定制修改登陆页图片文字及首页标题
运维·servlet·jenkins
杨过姑父5 天前
Servlet3 简单测试
java·servlet
Wanna7155 天前
后端开发基础——JavaWeb(Servlet)
java·后端·servlet·tomcat
Wanna7155 天前
后端开发基础——JavaWeb(根基,了解原理)浓缩
java·后端·servlet·tomcat