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

该博客介绍了如何在Docker中使用Alpine Linux镜像,通过两种方式安装Nginx:一是使用apk包管理工具直接安装,二是源代码编译安装,并详细展示了每个步骤。同时,文章还讲解了Ubuntu的软件包管理和Alpine Linux的apk包管理,包括更新、安装、卸载、搜索等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 #显示指定文件属于的包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值