Docker基础篇之快速上手(4):DockerFile
DockerFile
补充:不光可以用Dockerfile构建镜像,也可以用docker commit构建
是什么
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
构建三步骤
1.编写Dockerfile文件
2.docker build:
docker build -t 新镜像名字:TAG .
. 表示当前目录
3.docker run
DockerFile体系结构(保留字指令)
FROM
基础镜像,当前新镜像是基于哪个镜像的
一定要在第一行!!!
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时需要运行的命令
EXPOSE
当前容器对外暴露出的端口
WORKDIR
指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
ENV
用来在构建镜像过程中设置环境变量
例如:ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;
也可以在其它指令中直接使用这些环境变量,比如:WORKDIR $MY_PATH
ADD(高级版的COPY)
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY
类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
VOLUME
容器数据卷,用于数据保存和持久化工作
CMD
指定一个容器启动时要运行的命令
注意:Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
ONBUILD
当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
Dockerfile示例
FROM registry.cn-hangzhou.aliyuncs.com/workbei-public/tomcat:9.0.13-jre11
LABEL name="workbei-ec-engine" \
description="ec_engine" \
maintainer="Yin Jian" \
org="workbei"
# set default time zone to +0800 (Shanghai)
ENV TIME_ZONE=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone
ENV CATALINA_HOME /usr/local/tomcat
WORKDIR $CATALINA_HOME
ADD workbeiurl.war /usr/local/tomcat/webapps/
FROM registry-vpc.cn-beijing.aliyuncs.com/rsq-public/nginx:1.13.12
LABEL name="my-nginx" \
description="my-nginx test" \
maintainer="rishiqing group" \
org="rishiqing"
# set default time zone to +0800 (Shanghai)
ENV TIME_ZONE=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone
WORKDIR /usr/share/nginx/html
COPY . .
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
上一篇: MySQL8.0.23安装超详细教程