06DockerFile

  • 手动编写一个dockerfile文件,当然,必须要符合file的规范:编写
  • 有了这个文件后,直接docker build命令执行,获得一个自定义的镜像:构建
  • run:执行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1PlIUu3X-1577770886782)(17.png)]

1、DockerFile是什么

DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本

构建三步骤 :

​ 编写DockerFile文件

​ Docker build

​ Docker run

DockerFile长什么样:以centos为例子

2、DockerFile构建过程解析

以Java的代码为例子

class Book{
		
		private int id;
		
		public Book(){
		
		}
		
		{
			System.out.println();
		}
		
		static{
		
		}
}

2.1、DockerFile基础知识

  • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  • 指令按照从上到下,顺序执行
  • #表示注释
  • 每条指令都会创建一个新的镜像层,并对镜像进行提交

每条指令都会创建一个新的镜像层,并对镜像进行提交示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9WiDjO5x-1577770886784)(32.png)]

2.2、Docker执行DockerFile的大致流程(Docker build)

  1. Docker从基础镜像运行一个容器

  2. 执行一条指令并对容器作出修改

  3. 执行类似docker commit的操作提交一个新的镜像层

  4. Docker再基于刚提交的镜像运行一个新容器

  5. 执行dockerfile中的下一条指令直到所有指令都执行完成


从应用软件的角度来看,DockerFile、Docker镜像与Docker容器分别代表软件的三个不同阶段

  • DockerFile是软件的原材料
  • Docker镜像是软件的交付品
  • Docker容器则可以认为是软件的运行太

DockerFile面向开发,Docker镜像成为交付标准,Docker容器则设计部署与运维,三者缺一不可,合力充当Docker体系的基石

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKOWRl9Z-1577770886786)(43.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBry3nm2-1577770886787)(44.png)]

2.3、DockerFile的保留字指令

2.3.1、FROM

基础镜像,当前镜像是基于哪个镜像的

2.3.2、MAINTAINER

镜像维护者的姓名和邮箱地址

2.3.3、RUN

容器构建时需要执行的命令

2.3.4、EXPOSE

当前容器对外暴露的端口号

2.3.5、WORKDIR

指定在创建容器后,终端默认登录的进来的工作目录,一个落脚点

2.3.6、ADD

将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包.

2.3.7、COPY

类似ADD,拷贝文件个目录到镜像中 COPY

2.3.8、VOLUME(参考05数据卷)

容器数据卷,用于数据保存和持久化操作,实现数据共享

2.3.9、CMD

指定一个容器启动时要运行的命令。

DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换

CMD指令的格式和RUN类似,也是两种格式

  • Shell格式: CMD <命令>
  • exec格式: CMD [“可执行文件”,“参数1”,”参数2“。。。]
  • 参数列表格式: CMD[“参数1”,“参数2”。。。。。],在指定了ENTRYPOINt之后,用CMD指定具体的参数

2.3.10、ENTRYPOINT

指定一个容器启动时要运行的命令

ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数

2.3.11、ONBUILD

当构建一个被继承的

2.3.12、小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qkpoZtDW-1577770886788)(45.png)]

3、案例

3.0、Base镜像(scratch)

Docker Hub中的99%的镜像都是通过在base及镜像中安装和配置需要的软件构建出来的

3.1、自定义mycentos

#基础镜像
FROM centos

ENV myPath /tmp

#配置金融企之后工作路径
WORKDIR  $myPath

#安装vim
RUN yum -y install vim
RUN yum -y install net-tools

#暴露的端口
EXPOSE 80

CMD /bin/bash

3.2、CMD/ENTRYPOINT镜像案例

都是指定容器启动时要运行的命令

3.2.1、CMD

DockerFile中可以有多个CMD,但只有最后一个生效

​ https://github.com/docker-library/tomcat/blob/134944c089ab2e2f741da6f1467d794feac12ebf/8.5/jdk11/corretto/Dockerfile

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UWuNQpPV-1577770886790)(33.png)]

3.2.2、ENTRYPOINT

docker run之后的参数会被当做参数传递给ENTRYPOINT,之后形成的新的命令组合

3.2.3、ONBUILD

当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

3.2.4、ADD

FROM  centos
MAINTAINER zzyy<zzyy@126.com>

#把宿主机当前上下问的c.txt拷贝到容器/usr/local路径下
COPY c.txt /usr/local/cincontainer.txt

#把java与tomcat添加到容器中
ADD jdk-8u191-linux-x64.tar.gz /usr/local/
ADD  apache-tomcat-9.0.30.tar.gz  /usr/local/

#安装vim编辑器
RUN yum -y install vim

#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH  /usr/local
WORKDIR $MYPATH

#配置JAVA与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_191
ENV  CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME  /usr/local/apache-tomcat-9.0.30
ENV CATALINA_BASE  /usr/local/apache-tomcat-9.0.30
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

#容器运行时监听的端口
EXPOSE 8080

#启动时运行tomcat
#ENTRYPOINT ["usr/local/apache-tomcat-9.0.30/bin/startup.sh"]
#CMD ["usr/local/apache-tomcat-9.0.30/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.30/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.30/bin/logs/catalina.out
发布了166 篇原创文章 · 获赞 19 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览