Dockerfile中使用alpine镜像部署nginx服务实践
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部署的图文步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2025-04-04
Docker下部署MinIO存储服务通过Buckets实现文件的远程上传功能
MinIO是一个开源的软件,可以免费使用,还可以在普通硬件上运行,降低了存储成本,下面介绍在本地Docker中部署 MinIO 服务,并实现远程访问管理界面,节约云服务器运行成本,感兴趣的朋友跟随小编一起看看吧2024-01-01


最新评论