ENV CATALINA_HOME=/usr/local/tomcat9
`ENV` 是 Dockerfile 中的一个指令,用于设置环境变量。在构建 Docker 镜像时,这些环境变量会设置在容器的运行环境中,并且可以被后续的 Dockerfile 指令使用,或者在容器启动后被应用程序使用。
具体到 `ENV CATALINA_HOME=/usr/local/tomcat9` 这一行命令,它的作用是设置名为 `CATALINA_HOME` 的环境变量,其值为 `/usr/local/tomcat9`。这个环境变量通常用于指定 Apache Tomcat 服务器的安装目录。
### 解释:
- `ENV`: Dockerfile 中设置环境变量的指令。
- `CATALINA_HOME`: 环境变量的名称,是一个常见的环境变量,用于 Apache Tomcat 服务器。
- `/usr/local/tomcat9`: 环境变量的值,表示 Tomcat 服务器安装在容器文件系统的 `/usr/local/tomcat9` 目录下。
### 举例说明:
假设你正在构建一个 Docker 镜像,该镜像中需要运行 Apache Tomcat 服务器。你的 Dockerfile 可能如下所示:
# 基础镜像使用官方的 Java 镜像
FROM java:8
# 设置环境变量 CATALINA_HOME 指向 Tomcat 安装目录
ENV CATALINA_HOME /usr/local/tomcat9
# 使用 wget 下载 Tomcat 压缩包并解压到指定目录
RUN wget http://apache.mirrors.tds.net/tomcat/tomcat-9/v9.0.47/bin/apache-tomcat-9.0.47.tar.gz && \
tar -xzvf apache-tomcat-9.0.47.tar.gz -C /usr/local && \
rm apache-tomcat-9.0.47.tar.gz
# 将 Tomcat 的 bin 目录添加到 PATH 环境变量,以便可以运行 Tomcat 命令
ENV PATH $PATH:$CATALINA_HOME/bin
# 映射端口,使得容器的 8080 端口映射到宿主机的 8080 端口
EXPOSE 8080
# 启动 Tomcat 服务器
CMD ["catalina.sh", "run"]
在这个例子中:
1. `FROM java:8` 指定了基础镜像为 Java 8。
2. `ENV CATALINA_HOME /usr/local/tomcat9` 设置了环境变量 `CATALINA_HOME`。
3. `RUN` 指令执行了下载和解压 Tomcat 的操作。
4. `ENV PATH $PATH:$CATALINA_HOME/bin` 将 Tomcat 的 bin 目录添加到 PATH 环境变量中,这样容器内的任何位置都可以使用 `catalina.sh` 命令。
5. `EXPOSE 8080` 表示容器将监听 8080 端口。
6. `CMD ["catalina.sh", "run"]` 是容器启动时执行的命令,用于启动 Tomcat 服务器。
当这个 Dockerfile 构建并运行时,它会创建一个包含 Tomcat 服务器的容器,并且 `CATALINA_HOME` 环境变量会被正确设置,使得 Tomcat 可以正确运行。