码农后生

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Dockerfile文件编写

  • Dockerfile是一种可以用于创建镜像的文件,类似于makefile,它是一个包含了所有用于创建镜像的命令的有序序列的文本文件

Dockerfile文件基本指指令

  • FROM 用于指定要构建的镜像的基础镜像。它通常是 Dockerfile 中的第一条指令。
FROM <环境> as <命名名字>
# FROM golang as builder
# FROM golang:1.14.2 as golang-builder
  • WORKDIR工作目录
WORKDIR <工作目录路径>
  • RUN 用于在镜像中执行命令,这会创建新的镜像层。每个 RUN 指令创建一个新的镜像层。
RUN <命令行命令>
# RUN yum install weget
# RUN go env -w GOPROXY="https://mirrors.aliyun.com/goproxy/" && go env -w GO111MODULE=on && go build
  • COPY 用于将文件作为一个新的层添加到镜像中。通常使用 COPY 指令将应用代码赋值到镜像中。
COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
# COPY . ./
# COPY --from=builder /go/src/demo /usr/bin
  • EXPOSE 用于记录应用所使用的网络端口。
EXPOSE <端口>
# EXPOSE 80
  • USER 用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)
USER <用户名>[:<用户组>]
  • ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

    • ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
    • ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
  • ENV 设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
  • ENTRYPOINT 用于指定镜像以容器方式启动后默认运行的程序
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
# ENTRYPOINT [ "/bin/sh", "/app/start.sh" ]
# ENTRYPOINT ["/usr/bin/sh"]
  • CMD 类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
    • CMD 在docker run 时运行。
    • RUN 是在 docker build。

示例

FROM golang as builder

WORKDIR /1/

COPY . ./

RUN go env -w GOPROXY="https://mirrors.aliyun.com/goproxy/" && go env -w GO111MODULE=on && go build demo1.go

FROM alpine

COPY --from=builder /1/demo1 /usr/bin/

ENTRYPOINT ["/usr/bin/sh"]
posted on 2021-02-20 17:28  码农后生  阅读(298)  评论(0编辑  收藏  举报