Dockerfile常用指令
- FROM
语法:FROM :
指明构建的新镜像是来自于哪个基础镜像,如果没有选择tag,那么默认值为latest
FROM centos
如果不以任何镜像为基础,那么写法为:FROM scratch。官方说明:scratch镜像是一个空镜像,可以用于构建busybox等超小镜像,可以说是真正的从零开始构建属于自己的镜像
-
LABEL
语法:LABEL = = =…
功能是为镜像指定标签。也可以使用LABEL来指定镜像作者。
LABEL maintainer="mrhelloworld.com"
-
RUN
语法:RUN
构建镜像时运行的shell命令,比如构建的新镜像中我们想在/usr/local目录下创建一个java目录
RUN mkdir -p /usr/local/java
-
ADD
语法:ADD…
拷贝文件或目录到镜像中。src可以是一个本地文件或者是一个本地压缩文件,压缩文件会自动解压。还可以是一个url,如果把src写成一个url,那么ADD就类似于wget命令,然后自动下载和解压。
-
COPY
语法:COPY …
拷贝文件或目录到镜像中。用法同ADD,只是不支持自动下载和解压
COPY jdk-18_linux-x64_bin.tar.gz /usr/local/java
-
EXPOSE
语法:EXPOSE [/…]
暴露容器运行时的监听端口给外部,可以指定端口是监听TCP还是UDP,如果未指定协议,则默认为TCP.
EXPOSE 80 443 8080/tcp
如果想使得容器与宿主机的端口有映射关系,必须在容器启动的时候加上-p参数。
-
ENV
语法:ENV 添加单个,ENV=…添加多个。
设置容器内环境变量。
ENV JAVA_HOME /usr/local/javajdk-18.0.1.1/
Dockerfile实践
#创建文件
mkdir -p /usr/local/dockerfile
#进入dockerfile,编写Dockerfile
[root@web-server dockerfile]# vi Dockerfile
#编写Dockerfile内容文件如下:
#指明构建的镜像是来自于centos:latest基础镜像
FROM centos:latest
#通过镜像标签声明了作者信息
LABEL maintainer="mrhelloworld.com"
#设置工作目录
WORKDIR /usr/local
#新镜像构建成功以后创建指定目录
RUN mkdir -p /usr/local/java && mkdir -p /usr/local/tomcat
#拷贝文件到镜像中并解压
ADD jdk-18_linux-x64_bin.tar.gz /usr/local/java
ADD apache-tomcat-10.0.20.tar.gz /usr/local/tomcat
#暴露容器运行时的8080监听端口给外部
EXPOSE 8080
#设置容器内JAVA_HOME环境变量
ENV JAVA_HOME /usr/local/java/jdk-18.0.1.1/
ENV PATH $PATH:$JAVA_HOME/bin
#启动容器时启动tomcat
CMD ["/usr/local/tomcat/apache-tomcat-10.0.20/bin/catalina.sh","run"]
----------------------------------------------------------------------------
#将tomcat和jdk拷贝至dockerfile
[root@web-server dockerfile]# cp /root/jdk-18_linux-x64_bin.tar.gz /usr/local/dockerfile/
[root@web-server dockerfile]# cp /root/apache-tomcat-10.0.20.tar.gz /usr/local/dockerfile/
#
[root@web-server dockerfile]# docker build -f /usr/local/dockerfile/Dockerfile -t mycentos .