目录
1.Dockerfile是什么
2.Dockerfile基础知识
2.1Dockerfile基础
2.2Dokcerfile执行流程
2.3Dockerfile、Docker镜像和Docker容器三者关系
3.Dockerfile语法
3.1Dockerfile保留字指令
3.2案例说明
3.2.1案例一:创建自己的centos
3.2.2案例二:制作查询ip的镜像
3.2.3案例三:继承触发器ONBUILD
3.2.4案例四:自定义tomcat
4.总结
Dockerfile是用来构建docker镜像的文件,是由一系列命令和参数构成的脚本。
①编写Dockerfile;
②docker build,生成自定义镜像;
③docker run,运行镜像。
总结:Dockerfile是源代码,Docker镜像是程序安装包,Docker容器是运行程序。
指定当前新镜像是基于哪个镜像。
作者姓名和邮箱地址。
容器构建时需要运行的命令。
指定容器对外暴露端口。
登录容器后,默认的工作目录。
构建镜像的过程中设置环境变量.
ENV MY_PATH /usr/mytest
WORKDIR $MY_PATH
将宿主机目录下的文件拷贝进镜像,并自动解压。(COPY+解压)
将宿主机目录下的文件拷贝进镜像。
容器数据卷,用于数据保存和持久化工作。
指定容器启动时要运行的命令,Dockerfile中可以有多个CMD,但只有最后一个生效,并且CMD会被docker run之后的参数替换。
指定容器启动时要运行的命令,出现多个时,会都执行。
类似触发器,被继承时触发。
保留字指令分类如下图:
第一步:编写Dockerfile
FROM centos
MAINTAINER houpk<[email protected]>
ENV mypath /tmp
WORKDIR $mypath
#安装vim和net-tools
RUN yum –y install vim
RUN yum –y install net-tools
#对外暴露80端口
EXPOSE 80
#run时执行bash命令
CMD /bin/bash
第二步:构建镜像
docker build –t 新镜像名称:TAG .
执行打印如下图,逐条执行。
第三步:运行镜像
docker run –it 新镜像名称:TAG
第一步:编写Dockerfile
FROM centos
RUN yum install -y curl
CMD ["curl","-s","http://ip.cn"] 或者 ENTRYPOINT ["curl","-s","http://ip.cn"]
说明:curl命令用于模拟http请求,比如获取广州的天气,可以执行如下命令:
curl -d "city=guangzhou&appkey=8010132dcf54491a4eaa387f4db61774" "https://way.jd.com/he/freeweather"
上面的curl获取IP地址执行不通过,因为网站问题。
第二步:创建镜像
docker build -f Dockerfile -t myip .
第三步:运行镜像
docker run -it myip
Dockerfile中最后查询IP地址,可以使用CMD或者ENTRYPOINT,两者都是指定容器启动时要执行的命令。
不同点:CMD有多个时,只有最后一个生效,并且CMD会被docker run之后的参数替代;ENTRYPOINT则全部都会执行。
如果想在curl命令中添加一个参数-i,用于打印报文头HTTP HEAD。
情况一:如果使用CMD命令
docker run myip curl -s http://ip.cn -i
情况二:如果使用ENTRYPOINT命令
docker run myip -i
第一步:编写Dockerfile4
第二步:创建父镜像myip_father
第三步:编写Dockerfile5
第四步:创建子镜像myip_son
第一步:宿主机创建目录
mkdir –p /zzyyuse/mydockerfile/tomcat9
第二步:在目录下创建c.txt
第三步:将jdk和tomcat安装包拷贝到上面目录,分别为apache-tomcat-9.8.0.tar.gz和jdk-8u171-linux-x64.tar.gz
第四步:在上面目录新建Dockerfile,内容如下:
①COPY是单纯复制,ADD则是复制+解压缩,所以c.txt用COPY,两个压缩包用ADD;
②MD后的&&表示另一个命令,tail –f表示查看正在变化的文件内容。
第五步:构建镜像
docker build -t zzyytomcat .
如过不使用-f参数,默认寻找本目录下Dockerfile文件。
第六步:运行镜像,命令如下:
-v容器数据卷,宿主机目录:容器目录,映射的第一个目录可用于发布web server,第二个目录用于查看运行日志。
第七步:验证
第八步:使用数据卷发布web服务
①在数据卷的宿主机webapps目录下有test文件夹,表示新增一个名字为test的web工程,在test目录下新增WEB-INF文件夹和a.jsp。
②在WEB-INF文件夹下新增web.xml,web.xml是web工程的配置文件,内容如下:
③为了简单,使用jsp技术,编辑a.jsp,内容如下:
其中 i am in...在前台打印;System.out.println...在后台打印。
④测试
查询docker的test目录,有这两个文件。
通过网页访问a.jsp,如下所示:
如果在宿主机修改a.jsp,效果会体现在网页上。
在宿主机的日志目录下的catalina.out文件中可以看到日志。
第一步:编写Dockerfile,在宿主机上用vim编写,第一行是FROM;
第二步:运行docker build,创建image;
第三步:docker run,创建容器实例;
第四步:commit,生成新的镜像;
Docker pull,从docker仓库拉取镜像;
Docker push,镜像上传到docker仓库;