Dockerfile 配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 添加镜像相关信息
LABEL maintainer="yourname@example.com"
LABEL version="1.0.0"
LABEL description="This is a example of Dockerfile"

# 基于 gloang:latest 构建一个构建阶段, 并为该阶段命名为 builder
FROM gloang:latest AS builder
# 设置工作目录
WORKDIR /app
# 将当前目录下的 main.go 和 go.mod 文件复制到 /app 目录下
COPY ./main.go ./go.mod /app
# 在 /app 目录下执行 go build -o /app/main . 命令, 生成可执行文件 main
RUN go tidy && \
go build -o /app/main .

# 基于 ubuntu:latest 构建一个构建阶段
FROM ubuntu:latest
# 安装 curl 并清理包列表缓存
RUN apt-get update && apt-get install -y \
curl \
&& rm -rf /var/lib/apt/lists/*
# 设置环境变量 DEFAULT_PORT 的值为 8080
ENV DEFAULT_PORT=8080

# 将构建阶段 builder 生成的 /app/main 文件复制到当前目录下的 /app 目录下
COPY --from=builder /app/main /app
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# 创建用户 www
RUN useradd -m -s /bin/bash www
# 设置容器启动时的用户为 www
USER www
# 声明容器监听端口
EXPOSE 8080
# 最终运行的程序
# 使用tini作为容器启动的第一个进程,自动清理僵尸进程,转发容器收到的信号
ENTRYPOINT ["/usr/bin/tini", "--"]
# 提供的参数, 未设置 ENTRYPOINT 时, 则 CMD 中的命令会被当作执行命令来运行
CMD ["/app/main", "--default"]
Mehr lesen