使用 Dockerfile 从源码构建 Nginx 镜像

在 Alpine Linux 中编译安装 Nginx 中,笔者介绍了如何通过源码在 Alpine Linux 中安装 Nginx, 在本文中,我们要将这一构建过程通过定义 Dockerfile 自动化、版本化。

在本文中,我们使用 alpine 官方最新版本的镜像作为基础镜像,使用 nginx 1.19.4 的源码进行构建。 首先,定义如下的 Dockerfile 文件,文件中指令大多数和在 在 Alpine Linux 中编译安装 Nginx 中所描述的执行过程一样。需要特别指出的部分会在文章的后半段指明。

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
FROM alpine:latest

RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.8/main/" > /etc/apk/repositories

RUN apk update && apk upgrade

RUN apk add build-base

RUN apk add pcre pcre-dev

RUN apk add openssl openssl-dev

RUN apk add zlib zlib-dev

RUN apk add wget

RUN apk add curl

RUN wget http://nginx.org/download/nginx-1.19.4.tar.gz

RUN tar -zxvf nginx-1.19.4.tar.gz

WORKDIR nginx-1.19.4

RUN ./configure

RUN make

RUN make install

ENV PATH $PATH:/usr/local/nginx/sbin

ENTRYPOINT ["nginx", "-g", "daemon off;"]

需要注意的一些细节

使用 WORKDIR 指令代替交互式构建中使用的 cd 命令

使用 ENV 指令代替将 路径(PATH) 设置写入 /etc/profile, 然后在执行 source /etc/profile 的做法。 因为用 RUN 命令执行的只会在构建镜像的时候执行,并且 /etc/profile 并不会像通常的虚拟机启动时那样回被执行。

构建镜像

执行以下命令以构建镜像:

1
docker build -t="alpine-nginx:1.0" .

这里,我们给镜像名为为: alpine-nginx ,设定 tag 为: 1.0

验证镜像

执行以下命令启动一个容器:

1
docker run --name MyNginx -d -p 8080:80 alpine-nginx:1.0

正常启动后,可以用 docker ps 查看到已经启动的名为 MyNginx 的容器。

用浏览器访问:

1
http://localhost:8080

可以看到 Nginx 的默认页面。

本文标题:使用 Dockerfile 从源码构建 Nginx 镜像

文章作者:Morning Star

发布时间:2020年11月28日 - 09:11

最后更新:2021年04月16日 - 15:04

原始链接:https://www.mls-tech.info/docker/docker-build-nginx-from-src/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。