dockerfile 执行原理_DockerFile解析

本文详细解读Dockerfile的构造,包括基础镜像、作者信息、常用指令如FROM、RUN、COPY等的使用,以及CMD与ENTRYPOINT的区别,并通过实例演示自定义镜像的构建和运行。涉及技术:Dockerfile编写、镜像构建与部署、命令行操作。
摘要由CSDN通过智能技术生成

一、简介

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 被触发。

四、Dockerfile的案例总结

1,自定义mycentos镜像(需要安装有vim和ifconfig命令)

a>定义Dockerfile文件

FROM centos

#定义作者用邮箱

MAINTAINER xcENV DEFAULTDIR/usr/local

#落脚点

WORKDIR $DEFAULTDIR

#安装vim和net-tools

RUN yum-y install vim

RUN yum-y install net-tools

#容器暴露端口

EXPOSE80CMD/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.75ENV PATH $PATH:$JAVA_HOME/bin:$TOMCAT_HOME/:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE8080CMD $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文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值