欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker基础篇之快速上手(4):DockerFile

程序员文章站 2022-04-19 11:21:08
...

DockerFile

Docker基础篇之快速上手(4):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;"]