Dockerfile中使用alpine镜像部署nginx服务实践

 更新时间:2026年06月17日 08:44:03   作者:Blue Dream~  
本段落介绍了在Ubuntu和Alocker容器中安装并运行Nginx的方法,详细讲解了使用apt和apk进行软件包管理的步骤,包括更新、安装、卸载和查询软件包等等内容

1、apk 安装nginx

[root@localhost kod]# vim Dockerfile
[root@localhost kod]# docker build -t wwk:v1 .
Sending build context to Docker daemon  3.127MB
Step 1/4 : FROM alpine
 ---> 9c6f07244728
Step 2/4 : RUN echo "https://mirrors.aliyun.com/alpine/v3.11/main/" > /etc/apk/repositories;     echo "https://mirrors.aliyun.com/alpine/v3.11/community/" >> /etc/apk/repositories;     apk add nginx && mkdir /run/nginx/
 ---> Running in 9053eead4bf7                 
fetch https://mirrors.aliyun.com/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch https://mirrors.aliyun.com/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
(1/2) Installing pcre (8.43-r1)
(2/2) Installing nginx (1.16.1-r8)
Executing nginx-1.16.1-r8.pre-install
Executing busybox-1.35.0-r17.trigger
OK: 7 MiB in 16 packages
Removing intermediate container 9053eead4bf7
 ---> 1803193dbaa8
Step 3/4 : EXPOSE 80
 ---> Running in 5c4b7b21341e
Removing intermediate container 5c4b7b21341e
 ---> 93f91f136f52
Step 4/4 : ENTRYPOINT [ "nginx", "-g", "daemon off;" ]
 ---> Running in 5f47eb97ae7d
Removing intermediate container 5f47eb97ae7d
 ---> 402a2cdaf1b1
Successfully built 402a2cdaf1b1
Successfully tagged wwk:v1
镜像下载完成
[root@localhost kod]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
wwk          v1        402a2cdaf1b1   7 seconds ago   8.54MB

运行容器

[root@localhost kod]# docker run -d --name wwk1 -p 81:80 wwk:v1
52470627b182a6dee02526a24c2ebf6f76cb1d09775833843366f0ce3fc4121d
[root@localhost kod]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                               NAMES
52470627b182   wwk:v1    "nginx -g 'daemon of…"   5 seconds ago   Up 4 seconds   0.0.0.0:81->80/tcp, :::81->80/tcp   wwk1
[root@localhost kod]# ss -antl
State    Recv-Q   Send-Q     Local Address:Port     Peer Address:Port  Process  
LISTEN   0        128              0.0.0.0:81            0.0.0.0:*              
LISTEN   0        128              0.0.0.0:22            0.0.0.0:*              
LISTEN   0        128                 [::]:81               [::]:*              
LISTEN   0        128                 [::]:22               [::]:*   

[root@localhost ~]# docker exec -it wwk1 /bin/sh
/ # vi /etc/nginx/conf.d/default.conf 
# Everything is a 404
        location / {
              index   index.html;   //修改这一行
/ # nginx -s reload

[root@localhost kod]# systemctl daemon-reload
[root@localhost kod]# systemctl restart docker
[root@localhost kod]# systemctl stop firewalld
[root@localhost kod]# systemctl enable --now docker

访问网页

2、源代码编译安装nginx

//准备环境
[root@localhost kod]# ls
Dockerfile  nginx-1.16.1.tar.gz  pcre-8.44.tar.gz
[root@localhost kod]# cat Dockerfile 
FROM alpine:latest				//默认从官方拉取镜像
ADD nginx-1.16.1.tar.gz /home/	//将本地的环境移动到容器的家目录中
ADD pcre-8.44.tar.gz /home/

RUN echo http://mirrors.aliyun.com/alpine/v3.11/main/ > /etc/apk/repositories && \
     echo http://mirrors.aliyun.com/alpine/v3.11/community/ >> /etc/apk/repositories              //从阿里云aliyun镜像中拉取工具包放到容器仓库中,以便运行
     
RUN apk update && apk upgrade && \  //刷新仓库并下载
    apk add  gcc g++ make && \       //下载c++环境
    addgroup -S nginx && \           //创建组
    adduser -DHS -s /sbin/nologin -G nginx nginx && \   //创建所属组并不允许交互式登录
    cd /home/nginx-1.16.1 && \   //进入解压的目录中进行预编译
    ./configure --prefix=/usr/local/nginx --with-pcre=/home/pcre-8.44 --without-http_gzip_module && \      //生成所需配置和该目录下的环境
    make && make install && \      //预编译下载
    ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ && \   //做软连接方便系统识别
    mkdir -p /usr/local/nginx/conf/vhost/    
EXPOSE 80
CMD ["/usr/sbin/nginx","-g","daemon off;"]  //默认nginx在前台启动

这里如果报找不到该目录,则可以在 build命令后面加上 --network-host 以便让本机识别外网

[root@localhost kod]# docker build -t nginx:v3 . --network=host
Sending build context to Docker daemon  3.127MB
Step 1/7 : FROM alpine:latest
 ---> 9c6f07244728
Step 2/7 : ADD nginx-1.16.1.tar.gz /home/
 ---> Using cache
 ---> 220f4e23aca2
Step 3/7 : ADD pcre-8.44.tar.gz /home/
 ---> Using cache
 ---> 873e5dbcb034
Step 4/7 : RUN echo http://mirrors.aliyun.com/alpine/v3.11/main/ > /etc/apk/repositories &&      echo http://mirrors.aliyun.com/alpine/v3.11/community/ >> /etc/apk/repositories
 ---> Using cache
 ---> 32291bb6ca0f
Step 5/7 : RUN apk update && apk upgrade &&     apk add  gcc g++ make &&     addgroup -S nginx &&     adduser -DHS -s /sbin/nologin -G nginx nginx &&     cd /home/nginx-1.16.1 &&     ./configure --prefix=/usr/local/nginx --with-pcre=/home/pcre-8.44 --without-http_gzip_module &&     make && make install &&     ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ &&     mkdir -p /usr/local/nginx/conf/vhost/
 ---> Using cache
 ---> bbbd27b40d6e
Step 6/7 : EXPOSE 80
 ---> Using cache
 ---> bdd37a836a0c
Step 7/7 : CMD ["/usr/sbin/nginx","-g","daemon off;"]
 ---> Using cache
 ---> 826fd9f1e2f1
Successfully built 826fd9f1e2f1
Successfully tagged nginx:v3

查看容器运行日志

[root@localhost kod]# docker history nginx:v3
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
826fd9f1e2f1   2 hours ago   /bin/sh -c #(nop)  CMD ["/usr/sbin/nginx" "-…   0B        
bdd37a836a0c   2 hours ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
bbbd27b40d6e   2 hours ago   /bin/sh -c apk update && apk upgrade &&     …   190MB     
32291bb6ca0f   2 hours ago   /bin/sh -c echo http://mirrors.aliyun.com/al…   95B       
873e5dbcb034   3 hours ago   /bin/sh -c #(nop) ADD file:9699722ea4b1dc7e0…   9.65MB    
220f4e23aca2   3 hours ago   /bin/sh -c #(nop) ADD file:3fbd659b0fd55766e…   6.2MB     
9c6f07244728   3 weeks ago   /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B        
<missing>      3 weeks ago   /bin/sh -c #(nop) ADD file:2a949686d9886ac7c…   5.54MB 

[root@localhost kod]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        v3        826fd9f1e2f1   2 hours ago     212MB


[root@localhost kod]# docker run -d --name hh -P 826fd9f1e2f1
[root@localhost kod]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS             PORTS                               NAMES
b92ae0eab0ca   826fd9f1e2f1   "/usr/sbin/nginx -g …"   2 hours ago   Up About an hour   0.0.0.0:80->80/tcp, :::80->80/tcp   hh
[root@localhost kod]# ss -antl
State               Recv-Q              Send-Q                           Local Address:Port                            Peer Address:Port              Process              
LISTEN              0                   128                                    0.0.0.0:80                                   0.0.0.0:*                                      
LISTEN              0                   128                                    0.0.0.0:22                                   0.0.0.0:*                                      
LISTEN              0                   128                                       [::]:80                                      [::]:*                                      
LISTEN              0                   128                                       [::]:22                                      [::]:*  
systemctl enable --now docker
systemctl status docker

3、学习ubuntu软件包管理

1软件更新

更新源命令格式:sudo apt-get update
更新软件命令:sudo apt-get upgrade
更新系统:sudo apt-get dist-upgrade

2软件安装

命令:sudo apt-get install package (安装包)

下载该包的源代码
sudo apt-get source package

3卸载删除软件

命令格式:sudo apt-get remove  【package】

删除软件并包含相关的配置文件
sudo apt-get remove package --purge

4搜索软件包

命令格式:sudo apt-cache search package (软件包)

5.获取软件包的相关信息

命令格式:sudo apt-cache show package

6.重新安装包

命令格式:sudo apt-get install package --reinstall

7. 修复安装

命令格式:sudo apt-get -f install

8.了解安装相关的编译环境,软件依赖那些包。

安装相关的编译环境命令格式:sudo apt-get build-dep package

检查是否有损坏的依赖命令格式:sudo apt-get check

9.清理无用的包

使用命令:sudo apt-get clean 或者sudo apt-get autoclean

10.更多可使用 --help服务查看

4、学习alpine镜像软件包管理

Alpine Linux的优劣

优势

Alpine Linux的Docker镜像特点是轻巧(大小只有5M)且有完整的包管理工具(APK)。

Docker官方镜像可能会用Alpine Linux替换Ubuntu。

apk包管理命令

Alpine使用apk进行包管理,通过apk --help命令查看完整的包管理命令,下面列举常用命令:

1、update:从远程镜像源中更新本地镜像源索引

update命令会从各个镜像源列表下载APKINDEX.tar.gz并存储到本地缓存,一般在/var/cache/apk/(Alpine在该目录下)、 /var/lib/apk/ 、/etc/apk/cache/下。

$ apk update

2、add:安装PACKAGES并自动解决依赖关系

add命令从仓库中安装软件包,自动管理依赖。

$ apk add openssh openntp vim
$ apk add --no-cache mysql-client
$ apk add docker --update-cache --repository http://mirrors.ustc.edu.cn/alpine/v3.4/main/ --allow-untrusted
安装指定版本软件包

$ apk add asterisk=1.6.0.21-r0
$ apk add 'asterisk<1.6.1'
$ apk add 'asterisk>1.6.1'

3、del:卸载并删除PACKAGES

$ apk del openssh openntp vim

4、upgrade:升级当前已安装的软件包

upgrade命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过-u或--upgrade选择指定)。

$ apk update #更新最新本地镜像源
$ apk upgrade #升级软件
$ apk add --upgrade busybox #指定升级部分软件包

5、search:搜索软件包

search命令搜索可用软件包,-v参数输出描述内容,支出通配符,-d或—description参数指定通过软件包描述查询。

$ apk search #查找所以可用软件包
$ apk search -v #查找所以可用软件包及其描述内容
$ apk search -v 'acf*' #通过软件包名称查找软件包
$ apk search -v -d 'docker' #通过描述文件查找特定的软件包

6、info命令用于显示软件包的信息。

$ apk info #列出所有已安装的软件包
$ apk info -a zlib #显示完整的软件包信息
$ apk info --who-owns /sbin/lbu #显示指定文件属于的包

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • .Net8项目使用docker、docker-compose部署的图文步骤

    .Net8项目使用docker、docker-compose部署的图文步骤

    本文主要介绍了.Net8项目使用docker、docker-compose部署的图文步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • docker 安装、升级、修改数据目录的操作方法

    docker 安装、升级、修改数据目录的操作方法

    这篇文章主要介绍了docker 安装、升级、修改数据目录的操作方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • Docker中redis安装及测试教程

    Docker中redis安装及测试教程

    这篇文章主要介绍了Docker中redis安装及测试教程的一些基础方法和知识,为后续安装部署redis集群做准备,需要的朋友可以参考下
    2022-11-11
  • Docker命令自动补全的临时与持久化配置指南

    Docker命令自动补全的临时与持久化配置指南

    Docker 命令行工具支持自动补全功能,但默认可能未启用,本文将介绍如何临时启用补全功能、持久化配置,以及如何恢复默认状态,需要的朋友可以参考下
    2026-03-03
  • Docker使用Buildx多架构镜像构建指南

    Docker使用Buildx多架构镜像构建指南

    Docker Buildx支持多平台镜像构建,解决ARM/x86架构兼容性问题,提升部署效率,通过QEMU模拟与跨平台功能,实现一次构建多架构镜像,本指南将逐步介绍如何使用Buildx构建多架构镜像,并优化构建性能,感兴趣的朋友一起看看吧
    2025-08-08
  • Docker下部署MinIO存储服务通过Buckets实现文件的远程上传功能

    Docker下部署MinIO存储服务通过Buckets实现文件的远程上传功能

    MinIO是一个开源的软件,可以免费使用,还可以在普通硬件上运行,降低了存储成本,下面介绍在本地Docker中部署 MinIO 服务,并实现远程访问管理界面,节约云服务器运行成本,感兴趣的朋友跟随小编一起看看吧
    2024-01-01
  • docker容器调用yum报错的解决办法

    docker容器调用yum报错的解决办法

    在本篇文章里小编给大家分享的是关于docker容器调用yum报错的解决办法,有兴趣的朋友们可以参考下。
    2020-03-03
  • Docker如何删除镜像

    Docker如何删除镜像

    本文详细介绍了如何使用Docker删除镜像,包括查看镜像、删除单个镜像、删除多个镜像、删除所有镜像以及注意事项,删除镜像是一个常见的操作,用于清理不再需要的镜像,以节省存储空间
    2025-03-03
  • 2025最新Docker国内可用镜像源仓库地址分享

    2025最新Docker国内可用镜像源仓库地址分享

    在使用Docker时,您是否经常遇到拉取镜像缓慢或下载中断的问题?特别是对于我们在国内的开发者,网络条件限制常常导致镜像下载速度令人头疼,为了让您的开发工作更加顺畅,小编特意收集并整理了2025年最新、可用的国内Docker镜像源地址,希望能大幅提升您的Docker下载速度
    2025-02-02
  • Docker更换MySQL镜像并确保数据完整性的详细流程

    Docker更换MySQL镜像并确保数据完整性的详细流程

    这篇文章主要介绍了在更换MySQL镜像之前备份数据的重要性,并详细描述了使用mysqldump备份和恢复MySQL数据的步骤,同时,文章还解释了如何停止并删除旧的MySQL容器,需要的朋友可以参考下
    2025-05-05

最新评论