Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
作用:用来定义容器运行时的默认命令,可以在使用docker run的时候覆盖掉CMD中定义的命令
用法:CMD ["命令1", "参数1", "参数2"]
示例:
注意:
作用:用来定义基础镜像
用法:FROM 镜像名:标签名
示例:FROM centos:7
注意:
编写dockerfile文件,文件名为file1,内容如下:
通过docker build命令构建镜像:docker build -t redis:1.0 -f file1 .
查看构建出来的镜像: docker images
启动镜像: docker run redis:1.0
编写dockerfile文件,文件名为file2,内容如下:
通过docker build命令构建镜像:docker build -t redis:2.0 -f file2 .
查看构建出来的镜像: docker images
启动镜像: docker run redis:2.0
作用:设置环境变量
用法:ENV key=value
示例:
注意:可以通过该指令一次设置多个环境变量,例如:ENV key=value key=value ......
作用:设置当前的工作目录,类似于cd命令的作用。如果目录不存在,就会自动创建目录;如果目录的父目录不存在,同样也会自动创建目录。
用法:WORKDIR 目录
示例:WORKDIR /root/data
注意:
编写dockerfile,内容如下:
构建镜像:docker build -t centos:1.0 -f workdir_file .
启动容器:docker run centos:1.0
作用:构建镜像时执行的命令。
用法:RUN指令的执行有两种方式:
示例:
CMD 用于指定在容器启动时所要执行的命令,而 RUN 用于指定镜像构建时所要执行的命令
案例4:定义一个CONTENT变量,内容为:Hello CentOS,并在镜像的/app目录下创建一个fileDir目录,并在其中创建一个text.txt文件,将CONTENT变量的值输入到该文件中,在容器启动时打印test.txt中的内容
编写dockerfile文件,内容如下:
构建镜像:docker build -t centos:2.0 -f run_file .
启动容器:docker run centos:2.0
进入容器内,查看目录以及text.txt的内容:
作用:将本地文件添加到容器中,tar 类型的文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似于 wget。
用法:ADD 宿主机文件位置 容器中文件位置
示例:
作用:指定于外界交互的端口。
用法:EXPOSE 端口号
示例:EXPOSE 8080
注意:EXPOSE 并不会让容器的端口访问到主机。要使其可访问,需要在 docker run 运行容器时通过 -p 参数来发布这些端口。
作用:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。
用法:COPY 宿主机路径 容器内路径
示例:COPY /opt/apache-tomcat-8.5.27.tar.gz /opt
作用:配置容器,使其可执行化。指定容器启动时要运行的命令,可以追加命令。
用法:
示例:ENTRYPOINT ["top", "-b"]
注意:
作用:指定维护者信息
用法:MAINTAINER 维护者信息
示例:
注意:维护者信息可为名字,也可为邮箱,也可为名字加邮箱
作用:用于为镜像添加元数据
用法:LABEL
示例:LABEL version="1.0" description="这是一个Tomcat服务器"
作用:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
用法:
示例:USER tom
作用:帮助其他容器生成,即指令后的命令不在此次镜像构建中运行,会在其他继承此镜像的镜像中运行
用法:ONBUILD 其他指令
示例:ONBUILD RUN mkdir mydir
注意:该指令,对于使用该Dockerfile构建的镜像并不会生效,只有当其他Dockerfile以当前镜像作为基础镜像时被触发。例如:Dockfile A 构建了镜像A,Dockfile B中设置FROM A,此时构建镜像B是会运行ONBUILD设置的指令
准备jdk和tomcat的安装包,并在/usr/local目录下创建java目录存放JDK、创建tomcat目录存放Tomcat,然后在centos中配置Java环境,并对外暴露8080端口
编写Dockerfile文件,内容如下:
# 指明构建的新镜像是来自于 centos:7 基础镜像
FROM centos:7
# 通过镜像标签声明了作者信息
LABEL maintainer="123tom.com"
# 设置工作目录
WORKDIR /usr/local
# 新镜像构建成功以后创建指定目录
RUN mkdir -p /usr/local/java && mkdir -p /usr/local/tomcat
# 拷贝文件到镜像中并解压
ADD jdk-8u161-linux-x64.tar.gz /usr/local/java
ADD apache-tomcat-8.5.78.tar.gz /usr/local/tomcat
# 暴露容器运行时的 8080 监听端口给外部
EXPOSE 8080
# 设置容器内 JAVA_HOME 环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_161/
ENV PATH $PATH:$JAVA_HOME/bin
# 启动容器时启动 tomcat
CMD ["/usr/local/tomcat/apache-tomcat-8.5.78/bin/catalina.sh", "run"]
构建镜像:docker build -t centos:4.0 -f learn_file_1 .
启动容器:docker run -d -p 8080:8080 --name=tomcat centos:4.0
验证是否成功:
方式一:通过curl访问
方式二:浏览器地址栏访问Tomcat