使用 OpenResty Docker 镜像快速搭建 Web 服务器

使用 OpenResty Docker 镜像快速搭建 Web 服务器,第1张

在日常工作中经常需要搭建 Web 服务器和反向代理服务器,用于测试和生产的情况都有。虽然用于测试的场景有很多便捷的方法,但是在向生产环境迁移时会导致有些工作不能复用。综合看起来,还是用 Nginx 最为方便。本文尝试提供一些配置模板。

需要提前了解的内容:

选择 OpenResty 的原因:

OpenResty 默认安装位置:

安装目录中 Nginx 相关文件:

默认服务指向 Web 文件夹

映射关系:

默认 配置文件 位置(后续的配置会覆盖这里的内容):

在绝大多数情况,覆盖上面的配置文件就可以了。

但是,这些配置文件的内容,只能是包含在 http 段内的配置,并不能作为完整的配置文件使用。

比如:

可以包含: upstream 、 server

不能包含: tcp

完整配置文件位置:

配置文件相关信息:

https://github.com/openresty/docker-openresty/blob/master/README.md#nginx-config-files

镜像默认配置为到 /etc/nginx/conf.d/ 读取配置,所以要把配置文件放到这里。其余的挂载或端口映射根据需要进行。

假设需要建立如下服务:

(1)通过 http://localhost:20000/shared1/ 访问 /tmp/webroot/shared1

(2)通过 http://localhost:20000/shared2/ 访问 /tmp/webroot/myshare

(3)通过 http://localhost:20000/baidu/ 访问 http://www.baidu.com

配置文件:

启动命令行:

详情参考: docker-openresty - Docker tooling for OpenResty - Nginx Config Files

模拟为应用提供多级反向代理,查看访问链路。简单分为三部分:

使用 Docker Compose 来配置并串联各容器,文件较多,访问 GitHub 查看。

(完)

一.需求分析

最近公司软件Team 有个需求是这样的:能不能在局域网搭建一个Ubuntu 镜像服务器,

这样作的好处是可以节省Ubuntu某些常用工具的安装时间。

二.部署过程

2.1 测试环境

目前在公司内有一台能连接到外网的Ubuntu机器, IP : 192.168.8.173 ,

Ubuntu版本为Ubuntu 9.04 i686。

2.2 搭建步骤

为了创建Ubuntu mirror 服务器,最少需要60G硬盘空间,Ubuntu每个版本都有32 bit

和64 bit两个版本,有两组deb包。当然可以创建Ubuntu一个版本的32 bit 和64 bit 的

镜像服务器,也可以创建全部版本的镜像。

这里使用sohu 公司的mirror地址作为本地Ubuntu Source 服务器,使用sohu的原因是:

1. sohu的Ubuntu Source 服务器速度相当快

2. sohu 的ubuntu Source 服务器每天会和Ubuntu官方服务器同步一次,这样可以保

证我们使用的是最新的软件包。

修改方式如下:

root@ms ~: cat /etc/apt/sources.list

deb http://mirrors.sohu.com/ubuntu/ jaunty main restricted universe multiverse

deb http://mirrors.sohu.com/ubuntu/ jaunty-security main restricted universe multiverse

deb http://mirrors.sohu.com/ubuntu/ jaunty-updates main restricted universe multiverse

deb http://mirrors.sohu.com/ubuntu/ jaunty-proposed main restricted universe multiverse

deb http://mirrors.sohu.com/ubuntu/ jaunty-backports main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu/ jaunty main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu/ jaunty-security main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu/ jaunty-updates main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu/ jaunty-proposed main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu/ jaunty-backports main restricted universe multiverse

安装下面工具:

root@ms ~: apt-get install apt-mirror

root@ms ~: apt-get install apache2

下面就构建Ubuntu 9.04 32bit 的本地Ubuntu mirror 服务器为例子,来说明如何配置:

修改配置文件:

root@ms ~: cat /etc/apt/mirror.list

############# config ##################

#

# set base_path /var/spool/apt-mirror

#

# set mirror_path $base_path/mirror

# set skel_path $base_path/skel

# set var_path $base_path/var

# set cleanscript $var_path/clean.sh

# set defaultarch

# set postmirror_script $var_path/postmirror.sh

set run_postmirror 0

set nthreads 20

set _tilde 0

#

############# end config ##############

deb-i386 http://mirrors.sohu.com/ubuntu jaunty main restricted universe multiverse

deb-i386 http://mirrors.sohu.com/ubuntu jaunty-security main restricted universe multiverse

deb-i386 http://mirrors.sohu.com/ubuntu jaunty-updates main restricted universe multiverse

#deb http://mirrors.sohu.comubuntu jaunty-proposed main restricted universe multiverse

#deb http://mirrors.sohu.comubuntu jaunty-backports main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu jaunty main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu jaunty-security main restricted universe multiverse

deb-src http://mirrors.sohu.com/ubuntu jaunty-updates main restricted universe multiverse

#deb-src http://mirrors.sohu.com/ubuntu jaunty-proposed main restricted universe multiverse

#deb-src http://mirrors.sohu.com/ubuntu jaunty-backports main restricted universe multiverse

#clean http://archive.ubuntu.com/ubuntu

备注:

deb-i386 http:// 表示下载32 bit 版本的deb 软件

deb http:// 表示下载64bit 版本的deb 软件

jaunty 表示Ubuntu 9.04的代号

设置完成后,输入下面命令:

root@ms ~: apt-mirror

这时系统会启动20个线程运行wget 到 http://mirrors.sohu.com/Ubuntu 下面下载相应的

deb包。时间比较的长,该命令执行完成后,/var/spool/apt-mirror目录下就有了所有需

要的deb包和相应的配置文件。

由于我是从sohu下载的,所以实际的文件在 :

/var/spool/apt-mirror/mirror/mirrors.sohu.com/ubuntu 目录下。

这样,本地就有了所有Ubuntu Source 服务器所需要的文件,然后开启相应的服务:

这里使用apache2作为Web服务器,默认根目录在/var/www/,所以可以在该目录下做

个链接,如下所示:

root@ms ~: cd /var/www

root@ms ~: ln /var/spool/apt-mirror/mirror/mirrors.sohu.com/ubuntu -s

开启web服务:

root@ms ~: apache2ctl start

打开浏览器输入下面地址即可看到和sohu mirror一样的页面:

http://192.168.8.173/ubuntu

同时也可以使用crontab进行每天的更新,修改配置文件:

root@ms ~: cat /etc/cron.d/apt-mirror

#

# Regular cron jobs for the apt-mirror package

#

#0 4 * * * apt-mirror /usr/bin/apt-mirror >/var/spool/apt-mirror/var/cron.log

把命令前面的“#”去掉即可,这样系统会自动使用apt-mirror去和sohu服务器更新。

最后,我们所要做得就是在客户端的机器上修改更新源配置文件,将地址改成本地

mirror服务器的地址即可,如下所示:

root@ms ~: cat /etc/apt/sources.list

deb http://192.168.8.173/ubuntu/ jaunty main restricted universe multiverse

deb http://192.168.8.173/ubuntu/ jaunty-security main restricted universe multiverse

deb http://192.168.8.173/ubuntu/ jaunty-updates main restricted universe multiverse

deb http://192.168.8.173/ubuntu/ jaunty-proposed main restricted universe multiverse

deb http://192.168.8.173/ubuntu/ jaunty-backports main restricted universe multiverse

deb-src http://192.168.8.173/ubuntu/ jaunty main restricted universe multiverse

deb-src http://192.168.8.173/ubuntu/ jaunty-security main restricted universe multiverse

deb-src http://192.168.8.173/ubuntu/ jaunty-updates main restricted universe multiverse

deb-src http://192.168.8.173/ubuntu/ jaunty-proposed main restricted universe multiverse

deb-src http://192.168.8.173/ubuntu/ jaunty-backports main restricted universe multiverse

执行“apt-get update”来重建本地索引,这样以后就会使用本地的Mirror 服务器进行更新

docker私有镜像仓库一般用来存放公司内部的镜像,比如微服务中会有很多的服务需要放到自己公司内部的镜像仓库上,发布的时候直接从私有镜像仓库拉取。比如我公司的微服务部署在k8s环境上,微服务技术依然选择熟悉的 Spring Cloud ,这样每一个服务其实就是一个 Spring Boot 项目,我们通过Maven的插件会在项目编译、打包之后推送到我们的私有镜像仓库,之后CI工具使用kubelet部署的时候会从私有镜像仓库拉取镜像,最后完成部署,可以说私有镜像仓库是非常重要的一个环节。

接下来我会主要讲述一下私有镜像仓库的搭建以及镜像的管理,包括一些自己遇到的问题。

首先要保证自己的服务器已经安装了 docker 。具体的安装教程可以看 官网 ,这里就不在赘述了。

首先我们需要创建一个自己的CA证书,

比如下图是我自己创建时输入的相关内容:

做好镜像存储目录和证书目录的挂载,运行即可

这一步需要在所有需要拉取镜像的服务器上执行。上月底我在部署正式环境时我就遇到了这个问题,k8s的节点上一直显示拉取镜像失败,后来才发现忘了在k8s服务器上配置证书。

hostname 即生成CA证书的时候最后输入的 hostname , port 镜像仓库对外暴露的端口号。

如果是在镜像仓库所在的服务器上,执行:

如果不是同一台服务器,同样需要存放创建证书目录,执行:

之后将证书上传到目标服务器,且放在证书目录下,名称为 ca.crt 。

为了测试,我拉取一个 redis 镜像,然后给它重新打一个 tag 。

推送到私有镜像仓库:

浏览器显示:

表示刚才推送到私有镜像仓库是成功的。接下来我们测试从另一台服务器拉取刚才的镜像。当然这台服务器一定要按照之前的描述配置好CA证书,还要修改服务器 hosts 文件,配置好 ip 和 hostname 。

拉取镜像:

拉取镜像如下图所示:

根据显示可以看出拉取镜像是成功的。

到这里镜像仓库的搭建、推送和拉取都讲完了,接下来就看看怎么删除镜像。

这里说的删除镜像是指从仓库中删除,即从服务器上删除。在构建仓库的时候我们将镜像的仓库容器内的目录挂载到了服务器的目录。镜像仓库内其实是没有镜像文件,都在服务器对应的目录下。在开发的时候我就遇到过这样一个问题,因为是开发环境项目编译、打包、镜像构建和推送都非常频繁,虽然新的镜像会覆盖老的镜像,但是原有的镜像文件本身并没有被覆盖,这样的结果就是虽然镜像仓库上看镜像只有一个,但是本地服务上存储的是很多个镜像文件(而且基本是没啥用的),最终导致了服务磁盘空间不足的情况。

我们依然以 Redis 举例,我将多不同版本的 Redis 多次像私有仓库推送,不管是 Redis 4.0、5.0、6.0,最终我向仓库推送的版本号都是 redis:v4 (过程省略),最终我们在镜像仓库目录( /home/registry/ )下可以看到有多个 sha256 的值,详细目录:

/home/registry/docker/registry/v2/repositories/redis/_manifests/revisions/sha256

如下图:

如果要删除镜像首先需要修改配置文件,进入到docker容器内:

保存之后退出容器。

我们进入到存放镜像的目录下,删除一个镜像的 sha256 的值

上面只是删除了镜像的 sha256 值,并没有删除镜像本身,我们需要调用垃圾回收的命令:

这时候会看到一些输出,比如:

这时候我们在查看下对应目录的磁盘使用情况:

但是变化不明显,那就在删除一个试试。

除了手动删除之外还可以通过API来删除,这个方法我没有测试,感兴趣的小伙伴可以测试一下。在实际过程中我也是使用上述方法删除的,因为我一般都是磁盘使用率到一定比例才进行批量删除的,另外网上也有人通过脚本,感兴趣的小伙伴都可以尝试一下。

删除可以使用使用官方API删除:

查询镜像的 sha256 的值:

今天关于docker私有镜像仓库的内容就讲到这里,如果对上面内容有什么疑问欢迎大家交流探讨,也欢迎大家多多点赞、分享、转发,谢谢大家~~~​


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/223169.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存