alpine 容器镜像是基于Alpine Linux制作的轻量级容器镜像,具有体积小、安全性高、启动客等特点。

为什么我们不直接使用官方的 nginx 容器镜像呢?

因为我们可以通过这个过程中定制模块、精简功能、可以锁定版本不至于说升级以后很多功能就变了。也可以避免“黑盒”依赖。安全性也更高。

那么我们下面就开始做自己的 nginx 容器镜像吧,当然首先,我们要安装好 docker、docker-compose 和 拉取 alpine:latest 镜像。

那么我们下面就创建一个 docker-compose.yml 文件,这样我们可以方便的对启动的容器实例进行j启动和管理。

version: '3.8'

services:
  smsp-web:
    image: alpine:latest
    container_name: my-nginx
    # Alpine 默认没有长期运行的前台进程,所以加一个简单的命令让它保持运行
    command: tail -f /dev/null
    restart: always

就简单的启动起来保持运行就好。

容器运行起来后,我们要先把我们的 nginx 的源码包复制到容器里面。

docker cp /home/nginx-1.26.1.tar.gz my-nginx:/home
# 这是要将宿主机的 /home 目录下面的 nginx-1.26.1.tar.gz 文件复制到 my-nginx 这个容器实例的 /home 目录下面

我们下面就进入容器内部去部署一个 nginx 服务。

docker exec -it my-nginx /bin/sh

这样,我们就进入到容器内部了。

进入容器以后,我们一般要先升级、安装一下编译 nginx 需要用到的有些依赖。

# 升级
apk update
# 安装依赖
apk add --no-cache build-base pcre pcre-dev zlib zlib-dev openssl openssl-dev linux-headers curl wget tar bash shadow
# 清除 apk 安装缓存
rm -rf /var/cache/apk/*

下面我们开始配置用户信息和目录

adduser -D -s /sbin/nologin www

接下来就是解压源码包,配置、编译安装了。

cd /home
tar -zxvf nginx-1.26.1.tar.gz 
cd nginx-1.26.1/
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream
make && make install

好了,到这里,我们就完成容器里面的 nginx安装了。

配置文件到目录是:/usr/local/nginx/conf

nginx 服务启动命令是:/user/local/nginx/sbin/nginx

接下来我们可以推出容器,进行下面的步骤,也可以进行一些测试。

下面我们退出容器实例。

退出来以后,在my-nginx 容器实例正在运行的情况下,我们打包成一个新的容器镜像

docker commit my-nginx my-nginx-i:2025.9.29
# 前面的 my-nginx 是正常运行是容器实例; 后面的my-nginx-i:2025.9.29 是我们的容器名称,其中2025.9.29是容器的标签,我一般是这样用年.月.日来做的。要是一天产生多个版本,还可以在后面再加一节,例如:2025.9.29.1

这个时候,我们再 运行 docker images 命令就可以看到 my-nginx-i 这个容器镜像了。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐