DockerFile
一、DokerFile 介绍
DockerFile是用来构建docker镜像的文件!表示镜像文件到底是由什么东西一步步构成的。
例如:你在淘宝上买了一个衣架,但是卖家并没有给你发一个完整的衣架,而是一些组件和一张图纸,你按照这个图纸一步一步将衣架组装起来,就成了你所需要的样子。那么DockerFile 就是这张图纸,镜像文件就是你需要的这个衣架,Dockerfile 不建议随便命名,就用 Dockerfile。
因此,DockerFile其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
二、构建步骤
1、编写一个 Dockerfile 文件
2、docker build 构建为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库)
三、DockerFile构建过程
1、基础知识:
(1)每个保留关键字(指令)都必须是大写字母!
(2)从上到下的顺序执行!
(3) # 表示注释!
(4)每个指令都会创建提交一个新的镜像层,并提交!
Dockerfile使面向开发的,我们以后要发布项目,做镜像,就需要编写Dockerfile文件,这个文件十分简单!
Docker镜像逐渐成为企业交付的标准。
2、步骤:
DockerFile:构建文件,定义了一切的步骤,源代码。
DockerImages:通过DockerFile 构建生成的镜像,最终发布和运行的产品。
Docker容器:容器就是镜像运行起来提供服务的。
四、DockerFile的指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名加邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤 例如tomcat镜像,添加这个tomcat压缩包!
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 暴露端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!
五、实战测试-Centos7
Docker Hub中 99%镜像都是从这个基础的 FROM scratch 镜像过来的,然后配置需要的软件和配置来进行的构建。
创建一个自己的Centos7
1、编写 DockerFile 文件
mkdir /home/dockerfile cd /home/dockerfile vim mydockerfile-centos # 写入以下内容 FROM centos:7 MAINTAINER Liang<2018180595@qq.com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum install -y vim net-tools EXPOSE 80 CMD echo $MYPATH CMD echo "----end----" CMD /bin/bash
2、通过这个文件构建镜像
docker build -f mydockerfile-centos -t mycentos:0.1 .
3、测试运行
docker run -it --name myc01 mycentos:0.1
4、查看本地镜像的变更历史
docker history <镜像ID>OR<镜像名>
六、测试CMD 与 ENTRYPOINT 区别
CMD # 指定这个容器四栋的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
1、测试 CMD
(1) 编写Dockerfile文件
vim dockerfile-cmd-test FROM centos:7 CMD ["ls","-a"]
(2) 构建镜像并查看
docker build -f dockerfile-cmd-test -t cmdtest .
(3) run运行,发现 ls -a 命令生效
(4) 追加一个命令 -l # ls -al
-l 替换了 CMD ["ls","-a"] 所以报错
2、测试ENTRYPOINT
(1) 编写 Dockerfile 文件
vim dockerfile-cmd-entrypoint FROM centos:7 ENTRYPOINT ["ls","-a"]
(2) 构建镜像
docker build -f dockerfile-cmd-entrypoint -t entrypoint-test .
(3) run运行,发现 ls -a 命令生效
(4) 追加一个命令 -l # ls -al
DockerFile中很多命令都十分的相似,我们需要了解他们的区别,我们最好的学习就是对比他们然后测试效果!
七、实战测试-Tomcat
1、准备镜像文件 tomcat 压缩包,jdk的压缩包!
tomcat: https://tomcat.apache.org/download-10.cgi jdk: https://www.oracle.com/java/technologies/downloads/#java8
2、编写 Dockerfile 文件,创建readme文件。官方命名 Dockerfile build会自动寻找这个文件,就不需要 -f指定了!
FROM centos:7 MAINTAINER liang<123@qq.com> COPY readme.txt /usr/local/readme.txt ADD jdk-8u333-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-10.0.22.tar.gz /usr/local/ RUN yum install -y vim ENV MYPATH /usr/local WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_333 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-10.0.22 ENV CATALINA_BASH /usr/local/apache-tomcat-10.0.22 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-10.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-10.0.22/bin/logs/catalina.out
3、构建镜像
docker build -t diytomcat .
4、启动镜像
docker run -d -p 9090:8080 --name dt -v /home/docker/tomcat/test:/usr/local/apache-tomcat-10.0.22/webapps/test -v /home/docker/tomcat/tomcatlogs:/usr/local/apache-tomcat-10.0.22/logs diytomcat
5、访问测试
6、发布项目 (由于做了卷挂,我们直接在本地编写项目就可以发布!)
(1)、返回到宿主机,进入挂载目录
cd /home/docker/tomcat/test
vim index.jsp
<!DOCTYPE html>
<html>
<h1>Hello, world!</h1>
</html>
(2)、访问
小结