dockerfile解析

dockerfile是用来构建docker镜像的构建文件,由一系列命令和参数构成

docker语法

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

docker执行dockerfile的流程

  • docker从基础镜像运行一个容器
  • 执行一条指令并对容器进行修改
  • 执行类似docker commit的操作提交一个新的镜像层
  • docker再基于刚提交的镜像运行一个新的容器
  • 执行dockerfile中的下一个指令直到所有指令都执行完成

dockerfile保留字指令

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

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

RUN:容器构建时需要运行的命令

EXPOSE:容器对外暴露的端口

WORKDIR:指定在创建容器后,终端登录进来的工作目录

ENV:用来构建镜像过程中设置变量

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

COPY:拷贝文件和目录到镜像中

VOLUME:容器数据卷,用于数据保存和持久化工作

CMD:指定一个容器启动时要运行的命令,可以有多个CMD,但只有最后一个生效,CMD会被docker run之后的参数替换

ENTRYPOINT:指定一个容器启动时要运行的命令,docker run之后的参数会追加到ENTRYPOINT命令上

ONBUILD:当构建一个被继承的dockerfile时运行命令,父镜像在被继承后触发

举例

阿里云下载的centos镜像,工作目录为/,没有安装ifconfig

 

在/docker目录下,准备jdk和tomcat源码包

创建一个a.txt文件,两个空目录

编写dockerfile文件

WORKDIR $MYPATH

 

#RUN:容器构建时需要运行的命令

RUN yum -y install net-tools

 

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

ADD jdk-8u251-linux-x64.tar.gz /usr/local/

ADD apache-tomcat-7.0.104.tar.gz /usr/local/

 

#配置java与tomcat环境变量

ENV JAVA_HOME /usr/local/jdk1.8.0_251

ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.104

ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.104

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

 

#COPY:拷贝文件和目录到镜像中

COPY a.txt /usr/local/cincontainer.txt

 

#EXPOSE 容器对外暴露的端口

EXPOSE 8080

 

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

CMD /usr/local/apache-tomcat-7.0.104/bin/startup.sh && tail -F /usr/local/apache-tomcat-7.0.104/bin/logs/catalina.out

 

 

dockerfile如下:

根据dockerfile构建镜像

[root@localhost docker]# docker build -f /docker/dockerfile -t tomcat:myself .

[root@localhost docker]# docker images 查看已生成的镜像

[root@localhost docker]# docker history 4a62900fa1ef 查看镜像历史

运行镜像并查看

docker run -d -p 8888:8080 --name mytomcat

-v /docker/test/:/usr/local/apache-tomcat-7.0.104/webapps/test

-v /docker/tomcatlogs/:/usr/local/apache-tomcat-7.0.104/logs tomcat:myself

 

 

验证:    

1、端口映射正确,服务可以访问

2、登录进容器,工作目录为/usr/lcoal

3、验证ifconfig

4、ADD与copy添加的文件

5、容器卷共享

在宿主机/docker/test下写入一个文件

[root@localhost docker]# echo "hello world" >test/hello.html

宿主机浏览器访问

log目录的共享验证

原文地址:https://www.cnblogs.com/jeancheng/p/13222445.html