Dockerfile快速入门

540 阅读3分钟

1、Dockerfile是什么?

在学习Dockerfile前,首先要知道Dockerfile是什么,有什么作用。Dockerfile是构造docker镜像的文本文件,通过简单的语言,便可以通过docker build指令创建docker镜像。

在接受具体的Dockerfile前,我们先对docker进行简单的回顾。

根据百度百科的定义:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

一连串的术语显然让初学者不容易理解,我尽量用我自己的话来概括:

  • docker能够将应用程序打包成镜像
  • 镜像中包括了简化版的系统以及docker应用的所有依赖,因此docker程序运行在任何linux或window是机器上。这样显著的好处是免去了各种依赖兼容配置,有过不同机器部署过项目经历的话应该深有感触。
  • 根据镜像文件我们便可以创建容器来运行。
  • 容器之间彼此隔离,不相互影响。

image.png

Dockerfile便是我们创建docer镜像的一种方式。

2.Dockerfile文件结构。

简单的Dockerfile文件可以由以下几部分构成:

image.png

注意,所有指令都需要大写,指令的基本格式为

指令名(大写) 具体操作
指令名(大写) 具体操作
.......

3、构建一个自己的tomcat镜像

通过自己创建一个简单的镜像来熟悉指令:

准备:

  • 首先要有tomcat以及其依赖jdk的压缩包,我们在工作目录下准备
apache-tomcat-8.5.55.tar.gz
jdk-8u251-linux-x64.tar.gz
  • 其次创建dockerfile文件
vim myTomcat

接下来在myTomcat中正式编写Dockerfile

  • 首先我们要有tomcat运行的操作系统
FROM centos   # 这里的tomcat在centos系统下运行,添加此语句docker会自动从仓库中导入centos镜像
  • 其次添加作者信息
MAINTAINER kloein<kloein@126.com>  #尖括号前代表作者名,尖括号中间代表邮箱
  • 将tomcat与jdk文件添加到docker镜像中
# 通过ADD指令将本文件夹的两个文件添加到镜像系统中的 /usr/local/文件夹下
ADD jdk-8u251-linux-x64.tar.gz /usr/local/  
ADD apache-tomcat-8.5.55.tar.gz /usr/local/
  • 如果有要求,可以让镜像中的系统通过RUN指令执行某些语句
RUN yum -y install vim
  • 可以指定用户运行镜像时默认进入的文件夹
ENV MYPATH /usr/local  # ENV 指令可以设置环境变量 MYPATH为变量名,/usr/local为其路径
WORKDIR $MYPATH # 将MYPATH指定为默认目录
  • 配置系统的环境变量,以便运行镜像后可以直接使用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-8.5.55
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.55
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
  • 对外暴露端口
EXPOSE 8080 # 对外暴露8080端口

了解此指令需要先了解docker run指令

docker run 镜像名    #此语句可以运行镜像,而在其后可以加上参数 -p 主机端口:容器端口 
                     #这样就可以通过真正系统中的端口访问到容器系统中的端口,实例如下
docker run tomcat -p 8001:8080 #这样便可以通过真正系统中的8001端口访问到容器中的8080端口

而EXPOSE 8080语句可以在你不指定 -p 主机端口:容器端口 的情况下默认为你分配一个真实系统随机中的随机端口给容器系统中的8080端口

  • 自动运行指令
# 将tomcat服务启动 && 监视tomcat日志
CMD /usr/local/apache-tomcat-8.5.55/bin/startup.sh && 
tail -F /usr/local/apache-tomcat-8.5.55/bin/logs/catalina.out 

CMD命令看起来和RUN功能好像一样,它们俩的区别RUN在创建镜像时就会执行,而CMD会在创建容器时才执行

综述,整个Dockerfile文件如下

FROM centos # 这里的tomcat在centos系统下运行,添加此语句docker会自动从仓库中导入centos镜像
MAINTAINER kloein<kloein@126.com> #尖括号前代表作者名,尖括号中间代表邮箱

# 通过ADD指令将本文件夹的两个文件添加到镜像系统中的 /usr/local/文件夹下
ADD jdk-8u251-linux-x64.tar.gz /usr/local/ 
ADD apache-tomcat-8.5.55.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local # ENV 指令可以设置环境变量 MYPATH为变量名,/usr/local为其路径 WORKDIR $MYPATH # 将MYPATH指定为默认目录

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-8.5.55
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.55 
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080 # 对外暴露8080端口

# 将tomcat服务启动 && 监视tomcat日志 CMD /usr/local/apache-tomcat-8.5.55/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.55/bin/logs/catalina.out

最后,在此文件夹下运行docker build指令

docker build -t myTomcat:1.0   # -t用来指定Dockerfile文件名,这里是myTomcat  :后可以添加版本号

这样一个简单的tomcat镜像文件就制作完成了,任何人只要在linux上下载了此镜像,都可以直接运行