首页 > 其他 > 详细

DockerFile的应用及说明

时间:2020-12-29 14:09:21      阅读:18      评论:0      收藏:0      [点我收藏+]

编写DockerFile

应用DockerFile构建镜像
个人理解:DockerFile为创建私人定制的docker镜像,方便多次创建该类型容器使用

1.创建存放Dockerfile的文件夹

  • 建议创建单独的文件夹,其中只存放Dockerfile文件

mkdir dockerfile

2.编写Dockerfile文件

  • 本文以创建jdk+tomcat镜像为例,注意Dockerfile文件名首字母D大写,DockerFile文件如下:

vim Dockerfile

#创建版本信息
FROM ubuntu:latest
MAINTAINER xzj "xzj_73@163.com"
#更新ubuntu环境
RUN apt-get update

#安装jak
RUN mkdir /var/tmp/jdk
ADD jdk-8u181-linux-x64.tar.gz /var/tmp/jdk

# 安装tomcat
RUN mkdir /var/tmp/tomcat
ADD apache-tomcat-8.5.32.tar.gz /var/tmp/tomcat 

#设置环境变量
ENV JAVA_HOME /var/tmp/jdk/jdk1.8.0_181
ENV CATALINA_HOME /var/tmp/tomcat/apache-tomcat-8.5.32
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

#开启内部服务端口
EXPOSE 8080

#启动tomcat服务器
CMD ["./var/tmp/tomcat/apache-tomcat-8.5.32/bin/catalina.sh","run"] && tail -f /var/tmp/tomcat/apache-tomcat-8.5.32/logs/catalina.out
  • 本Dockerfile文件 其中的jdk与tomcat压缩包为本地获取,可采用wget的命令进行下载,其实ADD命令可以对url进行下载,不推荐本方法在线下载的文件内容如下:

#创建版本信息
FROM ubuntu:latest
MAINTAINER xzj "xzj_73@163.com"

#更新ubuntu环境
RUN apt-get update
RUN yum install -y wget

#安装jak
RUN mkdir /var/tmp/jdk
RUN wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  -P /var/tmp/jdk http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.tar.gz
RUN tar xzf /var/tmp/jdk/jdk-8u172-linux-x64.tar.gz -C /var/tmp/jdk && rm -rf /var/tmp/jdk/jdk-8u172-linux-x64.tar.gz

# 安装tomcat
RUN mkdir /var/tmp/tomcat
RUN wget -P  /var/tmp/tomcat http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.8/bin/apache-tomcat-8.5.8.tar.gz
RUN tar xzf /var/tmp/tomcat/apache-tomcat-8.5.8.tar.gz -C /var/tmp/tomcat && rm -rf /var/tmp/tomcat/apache-tomcat-8.5.8.tar.gz


#设置环境变量
ENV JAVA_HOME /var/tmp/jdk/jdk1.8.0_172
ENV CATALINA_HOME /var/tmp/tomcat/apache-tomcat-8.5.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

#开启内部服务端口
EXPOSE 8080

#启动tomcat服务器
CMD ["./var/tmp/tomcat/apache-tomcat-8.5.8/bin/catalina.sh","run"] && tail -f /var/tmp/tomcat/apache-tomcat-8.5.8/logs/catalina.out 

3.根据所写Dockerfile文件构建镜像

  • 在Dockerfile所在文件夹下构建镜像

docker build -t="jak/tomcat" .

4.运行镜像,启动容器

  • 将容器的8080端口映射为本地的8081端口启动容器

docker run -d -t -i -p 8081:8080 redstarofsleep/javaweb

5.Dockerfile文件的命令详细说明

1. FROM
FROM <image>
FROM <image>:<tag>
FROM <image>:<digest> 
  • FROM指定构建镜像的基础源镜像,如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来,如果不以任何镜像为基础,那么写法为:FROM scratch。
    FROM必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句开始。
    如果FROM语句其中 是可选项,没有指定镜像标签,则默认使用latest标签。
    FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像。
2. MAINTAINER
MAINTAINER <name> <"email">
  • 指定创建镜像的用户
3. RUN
1. RUN <command>
2. RUN ["executable", "param1", "param2"]
  • 每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的,可以通过一个镜像的任何一个历史提交点来创建
    第一种后边直接跟shell命令
    在linux操作系统上默认 /bin/sh -c
    在windows操作系统上默认 cmd /S /C
    第二种是类似于函数调用。
    可将executable理解成为可执行文件,后面就是两个参数。
    两种写法比对:
    RUN /bin/bash -c ‘source $HOME/.bashrc; echo $HOME
    RUN ["/bin/bash", "-c", "echo hello"]
    注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层.
    多少个RUN就构建了多少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。
    RUN书写时的换行符是\
4. ADD
1. ADD <src>... <dest>
2. ADD ["<src>",... "<dest>"]
  • ADD复制本地主机文件、目录到目标容器的文件系统中。
    如果源是一个URL,该URL的内容将被下载并复制到目标容器中。
    路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径
    可以是一个本地文件或者是一个本地压缩文件,还可以是一个url
    如果把写成一个url,那么ADD就类似于wget命令
5. ENV
1. ENV <key> <value>
2. ENV <key>=<value> ...
  • 功能为设置环境变量,两者的区别就是第一种是一次设置一个,第二种是一次设置多个
6.EXPOSE
EXPOSE <port> [<port>...]
  • 功能为暴漏容器运行时的监听端口给外部
    但是EXPOSE并不会使容器访问主机的端口
    如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P参数
7. CMD
1. CMD ["executable","param1","param2"]
2. CMD ["param1","param2"]
3. CMD command param1 param2
  • 功能为容器启动时要运行的命令
    第三种比较好理解了,就时shell这种执行方式和写法
    第一种和第二种其实都是可执行文件加上参数的形式
    举例说明两种写法:
    CMD [ "sh", "-c", "echo $HOME"
    CMD [ "echo", "$HOME" ]
    补充细节:这里边包括参数的一定要用双引号,就是",不能是单引号。千万不能写成单引号。
    原因是参数传递后,docker解析的是一个JSON array

DockerFile的应用及说明

原文:https://www.cnblogs.com/seventhree/p/14205895.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!