一、简介
Dockerfile是用来构建Docker镜像的构建文件,是由一系列下令和参数组成的剧本
构建三步: DockerFile文件 ==> docker build ==> docker run
Dockerfile可参考官方Dockerfile文件
二、构建历程剖析
1,Dockerfile内容基础知识:
a>每条保留字指令都必须为大写字母且后面要追随至少一个参数
b>指令根据从上到下,顺序执行
c>#示意注释
d>每条指令都市建立一个新的镜像层,并对镜像举行提交
2,Docker执行Dockerfile的大致流程:
a>docker从基础镜像运行一个容器
b>执行一条指令并对容器作出修改
c>执行类似docker commit的操作提交一个新的镜像
d>docker再基于刚提交的镜像运行一个新容器
e>执行dockerfile中的下一条指令直到所有指令都执行完成
三、Dockerfile保留字指令:
FROM:基础镜像,当前镜像是基于谁人镜像的。 MAINTAINER:作者 邮箱。 RUN:容器构建时需要运行的下令。 EXPOSE:露出端口号 启动容器的时刻还需使用 –p 指定端口。 WORKDIR:指定在建立容器后,终端默认登录后进来的事情目录,一个落脚点,默认根目录,通常绝对路径,CMD ENTRYPOINT 都市在这个目录下执行。 ENV:构建镜像的历程中设置环境变量, 构建和运行时都有用可以使用$引用。 ADD:将宿主机目录下的文件拷贝到镜像且会自动处置URL和 解压tar 压缩包。 COPY:拷贝文件和目录到镜像中,将从构建上下文目录中<源路径>的文件/复制到新的一层镜像内<目的路径>的位置。语法:COPY src dest COPY [“src”, “desc”]。 VOLUME:容器数据卷, 数据保留和持久化。 USER:指定该镜像由什么用户运行 不指定由root 运行。 CMD:指定容器启动时要运行默认的下令,Dockerfile中可以有多个cmd , 但只有最后一个生效。 ENTERPOINT:指定容器启动时要运行的下令。在docker run 后面追加参数
ONBUILD:触发器, 当构建一个被继续的dockerfile时运行下令, 父镜像在被子继续后的父镜像的onbuild 被触发。
Xmind写测试点
四、Dockerfile的案例总结
1,自界说mycentos镜像(需要安装有vim和ifconfig下令)
a>界说Dockerfile文件
FROM centos #界说作者用邮箱 MAINTAINER xc<xxyy@163.com> ENV DEFAULTDIR /usr/local #落脚点 WORKDIR $DEFAULTDIR #安装vim和net-tools RUN yum -y install vim RUN yum -y install net-tools #容器露出端口 EXPOSE 80 CMD /bin/bash
b>构建build
#若是为当前路径下的Dockerfile文件可以省略-f docker build -f /mydocker/Dockerfile -t mycentos:1.0 .
#查看构建历史
docker history mycentos:1.0
c>运行
docker run -it -d mycentos:1.0
2,CMD与ENTRYPOINT区别
a>Dockerfile
FROM centos RUN yum install -y curl
#CMD [ "curl", "-s", "http://ip.cn" ]
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
b>构建docker build -t myip .
c>运行:docker run myip -i (CMD下令构建报错,-i下令会笼罩curl -s下令;ENTRYPOINT下令会打出头信息)
3,自界说tomcat
a>当前目录下文件
b>Dockerfile
FROM centos ENV MY_PATH /usr/local WORKDIR $MY_PATH
COPY 1.txt $MY_PATH/contain.txt #添加jdk和tomcat ADD apache-tomcat-7.0.75.tar.gz $MY_PATH ADD jdk-8u121-linux-x64.tar.gz $MY_PATH RUN yum -y install vim ENV JAVA_HOME $MY_PATH/jdk1.8.0_121 ENV TOMCAT_HOME $MY_PATH/apache-tomcat-7.0.75 ENV PATH $PATH:$JAVA_HOME/bin:$TOMCAT_HOME/:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD $TOMCAT_HOME/bin/startup.sh && tail -F $TOMCAT_HOME/logs/catalina.out
c>构建:
docker build -t mytomcat .
d>启动:
docker run -d -p 8090:8080 --name myt -v /mydocker/mytomcat/test:/usr/local/apache-tomcat-7.0.75/webapps/test \
-v /mydocker/mytomcat/logs/:/usr/local/apache-tomcat-7.0.75/logs --privileged=true mytomcat
则可以在宿主机上之间获取接见容器内日志同时test目录下的项目也可对应容器内项目的class文件
原创文章,作者:7h28新闻网,如若转载,请注明出处:https://www.7h28.com/archives/11808.html