Dockerfile指令

1、基础知识

在宿主机中不进入容器,将web部署到容器中并运行起来。
在宿主机上编写好脚本,并配置执行权限,使用docker cp命令将该脚本拷贝到容器指定目录中,在宿主机上使用docker exec CONTAINER PATH_SHELL,就可以执行对应的脚本
docker的端口映射,需要在创建容器的时候就要指定

2、Dockerfile命令概览

命令 用途
FROM 指定基础镜像,并且必须是第一条指令。
RUN 用于执行后面跟着的命令行命令。
ADD ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY),除可以复制本地文件或目录外,还支持从URL下载文件并自动解压归档文件(例如.tar,但不支持zip)
COPY 拷贝文件,仅用于复制本地文件或目录到容器中,不支持自动解压文件或从URL下载文件。注意,COPY ./data /usr/share/nginx/gis_v3/是把data目录下的文件都拷贝到/usr/share/nginx/gis_v3/目录里面,如果要想data目录放到gis_v3里面,就需要改为COPY ./data /usr/share/nginx/gis_v3/data
CMD 执行命令,类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:CMD 在docker run 时运行。RUN 是在 docker build。为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
EXPOSE 暴露端口,仅仅只是声明端口,其作用:帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
WORKDIR 指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
MAINTAINER 指定作者,国际标准为姓名加邮箱
ENV 设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
ENTRYPOINT 容器启动时运行的启动命令。类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。与CMD的区别:ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖如果在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数;如果CMD是一个完整的指令,那么它们两个会互相覆盖,谁在最后谁生效
USER 指定用户
VOLUME 定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。避免重要的数据,因容器重启而丢失,这是非常致命的。

2.1 命令详解

RUN命令

RUN <命令行命令>      
// shell格式,<命令行命令> 等同于,在终端操作的 shell 命令。

RUN ["可执行文件", "参数1", "参数2"]        
// exec 格式
// 例子:RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

3、示例

FROM centos:7
WORKDIR /data
ADD ./alist-linux-amd64.tar.gz .
RUN tar -xvzf alist-linux-amd64.tar.gz && chmod +x alist && ./alist admin set 8Tzpfjz5
EXPOSE 5244
CMD ./alist server

运行命令进行构建 docker build -t your-image-name .

posted @ 2018-01-10 09:11  理舞  阅读(127)  评论(0编辑  收藏  举报