文章目录
- [1. 综合实战一:搭建一个 nginx 服务](#1. 综合实战一:搭建一个 nginx 服务)
-
- [1.1 基础知识](#1.1 基础知识)
-
- [1.1.1 Web 服务器](#1.1.1 Web 服务器)
- [1.1.2 Nginx](#1.1.2 Nginx)
- [1.1.3 正向代理](#1.1.3 正向代理)
- [1.1.4 反向代理](#1.1.4 反向代理)
- [1.2 nginx](#1.2 nginx)
-
- [1.2.1 安装](#1.2.1 安装)
- [1.2.2 启动 nginx 作为一个网站](#1.2.2 启动 nginx 作为一个网站)
-
- [1.2.2.1 查看 nginx 是否启动](#1.2.2.1 查看 nginx 是否启动)
- [1.2.2.2 如果没有启动,手动启动 nginx](#1.2.2.2 如果没有启动,手动启动 nginx)
- [1.2.2.3 访问 nginx 首页,云服务器记得把80端口的限制打开。](#1.2.2.3 访问 nginx 首页,云服务器记得把80端口的限制打开。)
- [1.2.2.4 nginx 调整配置](#1.2.2.4 nginx 调整配置)
- [1.2.2.5 首页内容](#1.2.2.5 首页内容)
- [1.2.2.6 停止 nginx,kill master 进程来杀死进程](#1.2.2.6 停止 nginx,kill master 进程来杀死进程)
- [1.3 查找 nginx 镜像](#1.3 查找 nginx 镜像)
- [1.4 拉取 Nginx 镜像,启动 Nginx 站点](#1.4 拉取 Nginx 镜像,启动 Nginx 站点)
-
- [1.4.1 拉取 nginx 镜像](#1.4.1 拉取 nginx 镜像)
- [1.5 其他方式拉取 Nginx 镜像](#1.5 其他方式拉取 Nginx 镜像)
-
- [1.5.1 拉取某个组织或者用户定制的镜像](#1.5.1 拉取某个组织或者用户定制的镜像)
- [1.5.2 通过 DIGEST 拉取镜像](#1.5.2 通过 DIGEST 拉取镜像)
- [2. 综合实战二:Docker hub 上创建自己私有仓库](#2. 综合实战二:Docker hub 上创建自己私有仓库)
-
- [2.1 基础知识](#2.1 基础知识)
-
- [2.1.1 Busybox](#2.1.1 Busybox)
- [2.2 创建账号](#2.2 创建账号)
- [2.3 创建仓库](#2.3 创建仓库)
- [2.4 推送镜像到仓库](#2.4 推送镜像到仓库)
- [3. 综合实战三、阿里云创建自己的私有仓库](#3. 综合实战三、阿里云创建自己的私有仓库)
-
- [3.1 创建账号](#3.1 创建账号)
- [3.2 创建仓库](#3.2 创建仓库)
- [3.3 推送镜像到仓库](#3.3 推送镜像到仓库)
1. 综合实战一:搭建一个 nginx 服务
1.1 基础知识
1.1.1 Web 服务器
Web服务器,一般是指"网站服务器",是指驻留于互联网上某种类型计算机的程序。
Web服务器可以向Web浏览器等客户端提供文档,也可以放置网站文件,让全世界浏览,更可以放置数据文件,让全世界下载。
Web服务器,也称为"WWW服务器"( 英文全写:World Wide Web,翻译成中文:万维网或环球信息网 ),主要功能是"提供网上信息浏览服务"。WWW是Internet(互联网)的多媒体信息查询工具,是Internet(互联网)上发展起来的服务,也是发展最快和目前使用最广泛的服务。正是因为有了WWW工具,才使得近十几年来互联网迅速繁荣发展,用户数量飞速飙升。据最新数据显示,目前全球人口数量达到76.76亿人,其中全球"网民"(互联网用户)达到惊人的43.88亿。 例如百度就是一个web服务器,提供搜索服务。
1.1.2 Nginx
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;
Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。可以理解
Nginx是web服务器的一种实现。
Nginx作为Web服务器可以向各种浏览器等客户端提供浏览服务,比如我们通过手机、电脑、平板可以访问百度来实现对web服务器的访问。
1.1.3 正向代理
由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助
VPN来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理"代理"的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过VPN访问的。

1.1.4 反向代理

当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理"代理"的是服务器端,而且这一个过程对于客户端而言是透明的。
1.2 nginx
1.2.1 安装
shell
# ubuntu 安装 nginx
apt install nginx -y
shell
# centos
# centos 配置 nginx 源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginxrelease-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
1.2.2 启动 nginx 作为一个网站
1.2.2.1 查看 nginx 是否启动
shell
ps -ef |grep nginx
shell
root@yudukai:~# ps -ef |grep nginx
root 3411637 1 0 16:33 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 3411639 3411637 0 16:33 ? 00:00:00 nginx: worker process
www-data 3411640 3411637 0 16:33 ? 00:00:00 nginx: worker process
www-data 3411641 3411637 0 16:33 ? 00:00:00 nginx: worker process
www-data 3411642 3411637 0 16:33 ? 00:00:00 nginx: worker process
root 3411809 3407621 0 16:34 pts/1 00:00:00 grep --color=auto nginx
root@yudukai:~#
1.2.2.2 如果没有启动,手动启动 nginx
shell
#查看版本
nginx -v
#手动启动
nginx
1.2.2.3 访问 nginx 首页,云服务器记得把80端口的限制打开。
shell
root@yudukai:~# curl ifconfig.me
111.228.59.53root@yudukai:~#

1.2.2.4 nginx 调整配置
shell
#ubuntu 安装后首页的信息可能被调整了,需要确认下修改,注意 centos 7.9 默认的位置就是/usr/share/nginx/html 无需修改,大家针对自己的系统可以检查后看是否需要调整配置
vi /etc/nginx/sites-available/default
shell
#调整 nginx 的默认页面
root /usr/share/nginx/html;
1.2.2.5 首页内容
html
root@yudukai:/data# cat /usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully
installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
1.2.2.6 停止 nginx,kill master 进程来杀死进程
shell
root@yudukai:~# ps -ef |grep nginx
root 3411637 1 0 16:33 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 3411639 3411637 0 16:33 ? 00:00:00 nginx: worker process
www-data 3411640 3411637 0 16:33 ? 00:00:00 nginx: worker process
www-data 3411641 3411637 0 16:33 ? 00:00:00 nginx: worker process
www-data 3411642 3411637 0 16:33 ? 00:00:00 nginx: worker process
root 3414783 3407621 0 16:58 pts/1 00:00:00 grep --color=auto nginx
root@yudukai:~# kill 3411637
root@yudukai:~#
1.3 查找 nginx 镜像
Docker search 可以查找,但是 nginx 的详细的 tag 我们看不见
shell
docker search nginx
1.4 拉取 Nginx 镜像,启动 Nginx 站点
1.4.1 拉取 nginx 镜像
- 我们到 https://hub.docker.com/ 上找到 nginx 镜像
shell
root@yudukai:~# docker pull nginx:1.31.4
- 查看本地是否有该镜像
shell
root@yudukai:~# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
hello-world:latest 5dd0d3e6e255 25.9kB 9.49kB U
nginx:1.31.4 25ee11a13a12 241MB 66.2MB
nginx:trixie-perl a07ae7717013 311MB 79.6MB
nginx@sha256:f1aec5de9d214ab7dad6b67c6665ee9eaa55ac890c710700216804d8b4829802 f1aec5de9d21 151MB 38.4MB
ubuntu:15.10 20122b67efbb 4.54kB 4.54kB
yudukai/mybitnginx:V1.31.4 25ee11a13a12 241MB 66.2MB
yudukai/mybitnginx:V1.31.5 25ee11a13a12 241MB 66.2MB
root@yudukai:~#
- 运行镜像
shell
docker run --name nginx1 --rm -it -p 80:80 nginx:1.31.4 bash
- 查看我们现在是在容器的
shell里面,执行cat /etc/*release*查看操作系统不是Ubuntu
shell
cat /etc/*release*

- 启动 nginx
shell
root@631cec9c6138:/# nginx
2026/08/24 09:04:18 [notice] 8#8: using the "epoll" event method
2026/08/24 09:04:18 [notice] 8#8: nginx/1.31.4
2026/08/24 09:04:18 [notice] 8#8: built by gcc 14.2.0 (Debian 14.2.0-19)
2026/08/24 09:04:18 [notice] 8#8: OS: Linux 5.15.0-60-generic
2026/08/24 09:04:18 [notice] 8#8: getrlimit(RLIMIT_NOFILE): 1024:524288
2026/08/24 09:04:18 [notice] 9#9: start worker processes
2026/08/24 09:04:18 [notice] 9#9: start worker process 10
2026/08/24 09:04:18 [notice] 9#9: start worker process 11
2026/08/24 09:04:18 [notice] 9#9: start worker process 12
2026/08/24 09:04:18 [notice] 9#9: start worker process 13
- shell 不退出打开另外一个 shell 窗口执行 curl 命令,可以看到 nginx 的欢迎信息返回

左侧的shell 退出观察再 curl 发现我们已经 ping 不同了,说明 nginx 是容器里面的而不是服务器里面的
shell
root@yudukai:~# curl 127.0.0.1
curl: (7) Failed to connect to 127.0.0.1 port 80 after 0 ms: Connection refused
root@yudukai:~#
1.5 其他方式拉取 Nginx 镜像
1.5.1 拉取某个组织或者用户定制的镜像

shell
docker pull bitnami/nginx:1.23.4
1.5.2 通过 DIGEST 拉取镜像
我们找到 1.22.1 版本的 nginx

shell
docker pull nginx@sha256:7d8c7df34592a9a09d21aace0a7cc386792aa69eb4b169994a9fb1d7761d40f9
2. 综合实战二:Docker hub 上创建自己私有仓库
2.1 基础知识
2.1.1 Busybox
BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。BusyBox 包含了一些简单的工具,例如 ls、cat 和 echo 等等,还包含了一些更大、更复杂的工具,例grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。
简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Linux 系统的自带的 shell。busybox 是一个集成了一百多个最常用 linux 命令和工具的软件,他甚至还集成了一个 http 服务器和一个 telnet 服务器,而所有这一切功能却只有区区 1M 左右的大小。因海外带宽较小,我们拉取该镜像推送到自己的仓库。
安装
shell
#Ubuntu 安装
apt install -y busybox
#CentOS 安装
wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64 --no-check-certificate
mv busybox-x86_64 busybox
chmod +x busybox
./busybox
执行命令
shell
busybox ls
busybox ifconfig
busybox ifconfig |busybox grep lo
如果不使用后面可以卸载
shell
#ubuntu 卸载
apt --purge autoremove busybox
#centos 卸载
#清理对应目录就好
2.2 创建账号
2.3 创建仓库
登录后点击仓库,我们创建一个个人仓库
如果提示需要进入,进入自己的邮箱完成激活
我们输入仓库信息,可见信息,点击创建完成

2.4 推送镜像到仓库
拉取 busybox 镜像
shell
root@yudukai:~# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
b05093807bb0: Pull complete
7270b3e1860c: Download complete
Digest: sha256:dc2d74b28e4cf8984fa52af1f39bc7c3d9c73760b41a74d629f5d11b1ab28616
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
root@yudukai:~#
给镜像打标签
shell
docker tag busybox:latest yudukai/mybusybox:v0.1
此时查看我们多了个镜像
shell
root@yudukai:~# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
busybox:latest dc2d74b28e4c 6.81MB 2.23MB
hello-world:latest 5dd0d3e6e255 25.9kB 9.49kB U
nginx:1.31.4 25ee11a13a12 241MB 66.2MB
nginx:trixie-perl a07ae7717013 311MB 79.6MB
nginx@sha256:f1aec5de9d214ab7dad6b67c6665ee9eaa55ac890c710700216804d8b4829802
f1aec5de9d21 151MB 38.4MB
ubuntu:15.10 20122b67efbb 4.54kB 4.54kB
yudukai/mybitnginx:V1.31.4 25ee11a13a12 241MB 66.2MB
yudukai/mybitnginx:V1.31.5 25ee11a13a12 241MB 66.2MB
yudukai/mybusybox:v0.1 dc2d74b28e4c 6.81MB 2.23MB
root@yudukai:~#
推送镜像到仓库,报错,因为没有登录
shell
docker push yudukai/mybusybox:v0.1
登录 docker hub
shell
docker login
推送镜像成功
shell
docker push maxhou/mybusybox:v0.1
在我们的 docker hub 仓库里面查看,可以看到对应的镜像存在。
退出
shell
docker logout
3. 综合实战三、阿里云创建自己的私有仓库
3.1 创建账号
3.2 创建仓库
在产品上搜索容器镜像服务,选择容器镜像服务ACR。

点击管理控制台

点击创建个人实例(注意,如果首次创建后再次进入需要选择和创建时一样的区域,不然就找不到了)

创建后,提示设置登录密码

完成登录密码的设置,这个密码就是我们的 docker login 的密码
点击创建镜像仓库,提示创建命名空间,先创建命名空间。
配置仓库参数

设置仓库为本地仓库,完成创建

3.3 推送镜像到仓库
可以看到阿里云也提供了快捷指令

登录(下面这个是我的,你们没有密码也进不去,需要替换成自己的)
走国内的记得关梯子,不然可能进不去。
shell
docker login --username=aliyun3478465604 crpi-0pg71pb4ir0ow61m.cn-shanghai.personal.cr.aliyuncs.com
shell
root@yudukai:~# docker login --username=aliyun3478465604 crpi-0pg71pb4ir0ow61m.cn-shanghai.personal.cr.aliyuncs.com
Password:
WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/
Login Succeeded
root@yudukai:~#
给镜像打标签,推送到仓库
shell
docker tag [ImageId] crpi-0pg71pb4ir0ow61m.cn-shanghai.personal.cr.aliyuncs.com/yudukai/busybox:[镜像版本号]
docker push crpi-0pg71pb4ir0ow61m.cn-shanghai.personal.cr.aliyuncs.com/yudukai/busybox:[镜像版本号]
shell
root@yudukai:~# docker tag busybox:latest crpi-0pg71pb4ir0ow61m.cn-shanghai.personal.cr.aliyuncs.com/yudukai/busybox:V1.0.0
root@yudukai:~# docker push crpi-0pg71pb4ir0ow61m.cn-shanghai.personal.cr.aliyuncs.com/yudukai/busybox:V1.0.0
The push refers to repository [crpi-0pg71pb4ir0ow61m.cn-shanghai.personal.cr.aliyuncs.com/yudukai/busybox]
b05093807bb0: Pushed
V1.0.0: digest: sha256:1cfa4e2b09e127b9c4ed43578d3f3c18e7d44ea47b9ea98475c0cbe9086525f8 size: 610
i Info → Not all multiplatform-content is present and only the available single-platform image was pushed
sha256:dc2d74b28e4cf8984fa52af1f39bc7c3d9c73760b41a74d629f5d11b1ab28616 -> sha256:1cfa4e2b09e127b9c4ed43578d3f3c18e7d44ea47b9ea98475c0cbe9086525f8
root@yudukai:~#
查看服务器镜像

退出
shell
docker logout registry.cn-hangzhou.aliyuncs.com
一般大型公司有自己专门的镜像制作组织,他们会选取对应的系统版本作为基础镜像,例如华为某部门选取欧拉来制作基础镜像,腾讯选择自己的
TLinux制作基础镜像,不会因为出现CentOS不维护了无法使用的情况,而且这些镜像一般都会经过严格的安全扫描,然后作为基础组件提供给各个部门。一般的公司往往也会同意镜像的基础版本,所以初始的镜像创建平台选择个人一般不用太多纠结。
本来想把腾讯云的镜像实例部署教程也教一下,但可惜写这篇文章的时候,腾讯云个人镜像实例无法创建了,遂作罢。