在用docker的初期,我们都是下载官方已有的镜像,搭建我们的开发或测试环境,比如redis,mysql的镜像,那为什么不去搭建一个更适合我们自己的环境呢,Dockerfile的出现就是让我们自己构建镜像成为了可能。
dockerfile是自定义镜像的一套规则
dockerfie由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层
下面我们一步一步完成一个自定义的docker镜像
1、下载所需的tomcat 和jdk文件,我这里下载的是如下版本:
apache-tomcat-9.0.71.tar.gz
jdk-8u251-linux-x64.tar.gz
2、创建一个操作目录,方便操作
mkdir -p /yyz/mytomcat
进入到此目录中:
cd /yyz/mytomcat
3、将上面两个文件jdk,tomcat文件一并放到/yyz/mytomcat
cp /yyz/apache-tomcat-9.0.71.tar.gz . (这里有个小点,表示当前目录)
cp /yyz/jdk-8u251-linux-x64.tar.gz . (这里有个小点,表示当前目录)
4、创建一个Dockerfile文件,并编写内容
touch ./diyTomcatDockerFile
vim ./diyTomcatDockerFile
#基于哪个镜像
FROM centos
#作者信息
MAINTAINER diytomcat:1.0<2322292960@qq.com>
#定义镜像中的一个环境变量,作为以后默认登录的路径
ENV MYPATH /usr/local
#切换到该目录下
WORKDIR $MYPATH
#ADD目录,拷贝并解压到 当前目录下,即/usr/local目录。
ADD ./jdk-8u251-linux-x64.tar.gz ./
#注意和COPY命令区分开,COPY是单纯拷贝,而ADD是拷贝并解压
ADD ./apache-tomcat-9.0.71.tar.gz ./
#设置jdk所需的变量
ENV JAVA_HOME /usr/local/jdk1.8.0_251
ENV CLASSPATH .:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jar
#设置tomcat所需的变量(方便直接使用tomcat的bin目录下的命令)
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.71
#将jdk和tomcat的变量追加到环境变量中
ENV PATH $PATH:${JAVA_HOME}/bin:${CATALINA_HOME}/bin
EXPOSE 8080
#CMD 在【docker run 镜像】 的时候,会执行CMD中的命令。这里的startup.sh是解压后tomcat的bin目录下的启动文件。也就是下面目录的作用是 在启动容器的时候,同时启动tomcat>,而且通过tail -f让centos阻塞住,不会因没有任务所需执行而导致centos刚启动后就停止了。
CMD startup.sh && tail -f /usr/local/apache-tomcat-9.0.71/logs/catalina.out
5、构建镜像
docker build -f ./diyTomcatDockerFile -t diytomcat/tomcat:v1.1 .(这里有一个小点)
按照diyTomcatDockerFile文件,一步一步构建的过程
6、过程中没有报错,说明构建成功。我们看一下镜像
docker image 这里v1.1就是我们刚才构建的镜像
7、发现的问题:
7.1、在命令行后少了" .",否则报下面的错误
7.2、在diyTomcatDockerFile文件中,注释和docker命令不能放在同一行,否则报下面的错误
docker build -f ./diyTomcatDockerFile -t diytomcat/tomcat:v1.1
"docker build" requires exactly 1 argument.
See 'docker build --help'.
Usage: docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile