【Docker】9.Docker 镜像仓库实战

文章目录

  • [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,翻译成中文:万维网或环球信息网 ),主要功能是"提供网上信息浏览服务"。 WWWInternet(互联网)的多媒体信息查询工具,是 Internet(互联网)上发展起来的服务,也是发展最快和目前使用最广泛的服务。正是因为有了 WWW 工具,才使得近十几年来互联网迅速繁荣发展,用户数量飞速飙升。据最新数据显示,目前全球人口数量达到 76.76 亿人,其中全球"网民"(互联网用户)达到惊人的 43.88 亿。 例如百度就是一个 web 服务器,提供搜索服务。


1.1.2 Nginx

Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAPPOP3SMTP 代理服务器;

Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。

可以理解 Nginxweb 服务器的一种实现。
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 镜像

  1. 我们到 https://hub.docker.com/ 上找到 nginx 镜像
shell 复制代码
root@yudukai:~# docker pull nginx:1.31.4
  1. 查看本地是否有该镜像
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:~# 
  1. 运行镜像
shell 复制代码
docker run --name nginx1 --rm -it -p 80:80 nginx:1.31.4 bash
  1. 查看我们现在是在容器的 shell 里面,执行 cat /etc/*release*查看操作系统不是Ubuntu
shell 复制代码
cat /etc/*release*
  1. 启动 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
  1. 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 创建账号

进入 https://hub.docker.com/,点击注册按钮,输入注册信息。


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 创建账号

进入阿里云 https://www.aliyun.com/,点击右上角完成注册,可以使用支付宝快速注册


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 不维护了无法使用的情况,而且这些镜像一般都会经过严格的安全扫描,然后作为基础组件提供给各个部门。一般的公司往往也会同意镜像的基础版本,所以初始的镜像创建平台选择个人一般不用太多纠结。
本来想把腾讯云的镜像实例部署教程也教一下,但可惜写这篇文章的时候,腾讯云个人镜像实例无法创建了,遂作罢。

相关推荐
想要成为老金高手1 小时前
Kubernetes 实战笔记(一):Pod 管理与 kubectl 核心命令全解
笔记·容器·kubernetes
张洛闻Eren1 小时前
云原生k8s【第六课】:K8s 访问控制
运维·docker·云原生·容器·kubernetes·k8s
Kina_C1 小时前
Kubernetes Pod 全生命周期管理:从命令实操到控制器版本更替
云原生·容器·kubernetes
奇特認1 小时前
kubernetes pod管理
云原生·容器·kubernetes
苹果嘉尔121381 小时前
Linux系统编程——网络(TCP)
linux·运维·服务器
网安蟹佬霸1 小时前
区块链与智能合约安全实战:从Solidity审计到DeFi漏洞深度剖析
运维·前端·网络·安全·自动化·区块链·智能合约
用户938515635071 小时前
从同源策略到Nginx代理:React+NestJS全栈项目跨域实战
后端·docker
mohesashou2 小时前
k8s控制器管理
云原生·容器·kubernetes
椿.湫2 小时前
kubenetes pod管理
linux·运维·服务器