DockerFile部署

(1)Dockerfile是什么?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。需要配合docker builder 【根据提供的 Dockerfile 构建自己的镜像】指令使用

(2)、为什么要自己构建镜像

docker 官方和个人发布的镜像由于版本等各种原因,漏洞较多,已统计 Docker Hub 超过 30% 的官方镜 像包含高危漏洞。此外,由于网络等原因也会造成docker pull 下载镜像的速度很慢。基于这种情况,我 们可以手动定制docker 系统镜像。
可能使用镜像需要安装的东西比较多,可以根据需要定制化。

(3)DockerFiler文件语法

DSL 的全称是动态脚本语言( Dynamic Script Language ),它是对脚本语言的一种扩展。 DSL 使用 : 加参数名表示普通参数,使用# 加参数名表示嵌入式参数,并使用特殊字符 #[] 标记动态片段,当解析时,判断实际传入参数值是否为空(null )或不存在决定是否保留该动态片段,从而达到动态执行不同脚本目的。以此来避免程序员手动拼接繁杂的脚本,使得程序员能从繁杂的业务逻辑中解脱出来。此外,DSL脚本支持宏,来增强脚本的动态逻辑处理能力。

DSL语言书写时有顺序的,如上图

<1>FROM【必选】  

用于指定构建镜像时依赖的基础镜像
格式:
1 FROM < 镜像名 > FROM< 镜像名 >:< 版本 > # 不填 tag 默认为 latest
例如: FROM docker.io/nginx
除了选择现有镜像为基础镜像外, Docker 还存在一个特殊的镜像,名为 scratch 。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。
2 FROM scratch
如果你以 scratch 为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。

<2> MAINTAINER[可选]LABEL[可选]  

MAINTAINER :镜像维护人的信息
示例: MAINTAINER 火狐 @ 老六 邮箱地址
LABEL :指定该 dockerfile 的基本信息,如维护者、版本等 ,新版的 dockerfile 中使用 LABEL 来指定信息
例如: LABEL author=“火狐 @ 老六” version=“1.0” describe=“ 构建 nginx 镜像

 

<3>RUN[可选,但用的频率非常高] 

每条 RUN 指令将在当前镜像的基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 \ 来换
行,多条命令用 && 来连接,避免执行多个 RUN ,使得镜像层数变多。最好只留一个 RUN
RUN 命令有两种格式
1. RUN <command>
2. RUN ["executable", "param1", "param2"]
第一种后边直接跟 shell 命令
linux 操作系统上默认 /bin/sh -c
windows 操作系统上默认 cmd /S /C
第二种是类似于函数调用。
可将 executable 理解成为可执行文件,后面就是两个参数。

 

<4>ADD[可选,但用的频率非常高]  

一个复制命令,把文件复制到镜像中。
语法如下:
1. ADD <src>... <dest>
2. ADD ["<src>",... "<dest>"]
路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径,推荐写成绝对路径
路径可以是一个本地文件或者是一个本地压缩文件,还可以是一个 url 如果把写成一个 url ,那么 ADD 就类似于wget【下载】命令
示例
ADD test relativeDir/
ADD http://example.com/foobar /
注意事项
src 为一个目录的时候,会自动把目录下的文件复制过去,目录本身不会复制
如果 src 为多个文件, dest 一定要是一个目录

 

<5>WORKDIR[可选]  

设置指令,可以多次切换 ( 相当于 cd 命令 ) ,对 RUN,CMD,ENTRYPOINT 生效。
格式:
WORKDIR /path/to/workdir

 

<6>VOLUME[可选] 

可实现挂载功能,可以将宿主机目录挂载到容器中
格式:
VOLUME["<mountpoint>"]
例如:
FROM base
VOLUME ["/tmp/data"]

<7>EXPOSE[可选]  

告诉 Docker 服务,容器需要暴露的端口号,可通过 docker history 镜像名查看暴露的端口号,在启动容器时通过 -p 参数让 Docker 主机分配一个端口转发到容器的指定端口
格式:
EXPOSE <port> [<port>...]

<8>CMD[可选] 

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条 CMD 命令,只有
最后一条会被执行。如果用户在启动容器时指定了要运行的命令,则会覆盖掉 CMD 指定的命令。
格式:
CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2
第三种比较好理解了,就时 shell 这种执行方式和写法
第一种和第二种其实都是可执行文件加上参数的形式
举例说明两种写法:
CMD [ "sh", "-c", "echo $HOME" ]
CMD [ "echo", "$HOME" ]

<9> 、补充:ENTRYPOINT

功能是:容器启动时运行得启动命令
语法如下:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
CMD 比较说明(这俩命令太像了,而且还可以配合使用):
相同点:
只能写一条,如果写了多条,那么只有最后一条生效
容器启动时才运行,运行时机相同
不同点:
ENTRYPOINT 不会被运行的 command 覆盖,而 CMD 则会被覆盖
如果我们在 Dockerfile 种同时写了 ENTRYPOINT CMD ,并且 CMD 指令不是一个完整的可执行命令,那么 CMD
指定的内容将会作为 ENTRYPOINT 的参数

<10>ENV[可选] 

指定一个环境变量,会被后续 RUN 指令使用,在容器中通过 export 可以查看
格式 :
# 一次设置一个变量
ENV <key> <value>
# 设置多个环境变量
ENV <key1>=<value1> <key2>=<value2> <key3>=<value3>

 

(4)、示例

1、创建一个demo目录将需要使用到安装包上传

2、在当前目录中创建Dokcerfile文件,并配置  

# 第一步:Dockerfile需要一个初始镜像
#初始镜像是一个linux
FROM centos 
# 第二步:构建镜像用的一些资源上传进入镜像【tomcat.tar.gz+jdk.tar.gz】
# 将文件复制到容器内有两个指令可用:add 【会自动解压】 / copy
# linux 安装时需要将tar.gz 用 tar -zxvf 解压,因此选择add
#ADD上传 dockerfile同目录下tomcat压缩包 解压镜像中/usr/local/tomcat
ADD apache-tomcat-9.0.21.tar.gz /usr/local/tomcat 
ADD jdk-8u161-linux-x64.tar.gz /usr/local/jdk

#第三步:配置环境变量   安装JDK流程---tar压缩包--->配置环境变量就OK了
# tar步骤add干了,就差环境变量
#变量路径要根据安装包来,jdk-8u161--转为--jdk1.8.0_161
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_161 
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 下面这些时tomcat环境变量
ENV CATALINA_HOME /usr/local/tomcat/apache-tomcat-9.0.21 
ENV CATALINA_BASE /usr/local/tomcat/apache-tomcat-9.0.21
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

#第四步:tomcat默认端口为8080,需要开放端口
#容器开放8080端口
EXPOSE 8080

#第五步:启动tomcat
# tomcat运行需要用bin内置的sh文件,可以用startup.sh 也可以 catalina.sh run 运行
# 就用  catalina.sh run 运行 --- catalina.sh 执行文件 run 给与指令参数
CMD ["/usr/local/tomcat/apache-tomcat-9.0.21/bin/catalina.sh","run"]

  

 3. 使用docker build指令构建镜像

docker build -t ImageName:TagName dir
选项
-t 给镜像加一个 Tag
ImageName 给镜像起的名称
TagName 给镜像的 Tag
Dir Dockerfile 所在目录

 

4.查看镜像  

 5.创建容器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值