【docker】8. 镜像仓库实战

embedded/2024/11/30 0:54:15/

综合实战一:搭建一个 nginx 服务

Web 服务器

Web 服务器,一般是指“网站服务器”,是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客户端提供文档,也可以放置网站文件,让全世界浏览,更可以放置数据文件,让全世界下载。
Web 服务器,也称为“WWW 服务器”( 英文全写:World Wide Web,翻译成中文:万维网或环球信息网 ),主要功能是“提供网上信息浏览服务”。 WWW 是 Internet(互联网)的多媒体信息查询工具,是 Internet(互联网)上发展起来的服务,也是发展最快和目前使用最广泛的服务。正是因为有了 WWW 工具,才使得近十几年来互联网迅速繁荣发展,用户数量飞速飙升。据最新数据显示,目前全球人口数量达到 76.76 亿人,其中全球“网民”(互联网用户)达到惊人的 43.88 亿。
例如百度就是一个 web 服务器,提供搜索服务

在这里插入图片描述

Nginx

Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器;Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。
可以理解 Nginx 是 web 服务器的一种实现。
• Web 服务器
在这里插入图片描述
Nginx 作为 Web 服务器可以向各种浏览器等客户端提供浏览服务,比如我们通过手机、电脑、平板可以访问百度来实现对 web 服务器的访问。
• 正向代理
在这里插入图片描述
由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过 VPN 访问的。
• 反向代理
在这里插入图片描述
当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理“代理”的是服务器端,而且这一个过程对于客户端而言是透明的。

本机运行nginx

• 安装

# ubuntu 安装 nginx
apt install nginx -y

• 启动 nginx 作为一个网站

  1. 查看 nginx 是否启动
root@ubuntu1:/data# ps -ef |grep nginx
root 12920 1 0 12:29 ? 00:00:00 nginx: master process nginx
www-data 12921 12920 0 12:29 ? 00:00:00 nginx: worker process
www-data 12922 12920 0 12:29 ? 00:00:00 nginx: worker process
root 12951 2672 0 12:30 pts/0 00:00:00 grep --color=auto nginx
root@ubuntu1:/data# 
  1. 如果没有启动,手动启动 nginx
#查看版本
nginx -v
#手动启动
nginx
  1. 访问 nginx 首页
    在这里插入图片描述
  2. nginx 调整配置
    #ubuntu 安装后首页的信息可能被调整了,需要确认下修改,注意 centos 7.9 默认的位置就是/usr/share/nginx/html 无需修改,大家针对自己的系统可以检查后看是否需要调整配置
sudo vi /etc/nginx/sites-available/default

将原先的网址换成自己的
在这里插入图片描述
5. 首页内容
在这里插入图片描述
可以自行调整文本当中的内容
6. 停止 nginx,kill master 进程来杀死进程
在这里插入图片描述
7. 再重新启动nginx,就可以看到自己调整的文本内容了
在这里插入图片描述
在这里插入图片描述

查找 nginx 镜像

Docker search 可以查找,但是 nginx 的详细的 tag 我们看不见
所以通常不用search来查找镜像直接去官网查
在这里插入图片描述

容器运行nginx

方式1:拉取 Nginx 镜像,启动 Nginx 站点

  1. 拉取 nginx 镜像
    我们到 https://hub.docker.com/ 上找到 nginx 镜像
root@ecs-144421:~# docker pull nginx:1.23.3
1.23.3: Pulling from library/nginx
3f9582a2cbe7: Pull complete 
9a8c6f286718: Pull complete 
e81b85700bc2: Pull complete 
73ae4d451120: Pull complete 
6058e3569a68: Pull complete 
3a1b8f201356: Pull complete 
Digest: 
sha256:aa0afebbb3cfa473099a62c4b32e9b3fb73ed23f2a75a65ce1d4b4f55a5
c2ef2
Status: Downloaded newer image for nginx:1.23.3
docker.io/library/nginx:1.23.3
  1. 查看本地是否有该镜像
hacha@LAPTOP-H2EI4I6A:~$ docker images
REPOSITORY                                                               TAG       IMAGE ID       CREATED         SIZE
crpi-xp37q81m2et6ppvz.cn-hangzhou.personal.cr.aliyuncs.com/hacha/hacha   latest    d2c94e258dcb   19 months ago   13.3kB
nginx                                                                    1.23.3    ac232364af84   20 months ago   142MB
  1. 运行镜像
docker run --name nginx1 --rm -it -p 80:80 nginx:1.23.3 bash
  1. 查看我们现在是在容器的 shell 里面,执行 cat /etc/release查看操作系统不是Ubuntu
    在这里插入图片描述

  2. 容器中启动 nginx
    在这里插入图片描述

  3. shell 不退出打开另外一个 shell 窗口执行 curl 命令,可以看到 nginx 的欢迎信息返回
    在这里插入图片描述
    如果你的服务器的 80 端口外部能访问那么可以用浏览器看到 nginx 的欢迎页面,注意云厂商一般都屏蔽了 80 端口,需要联系客服开通。

  4. shell 退出观察再 curl 发现我们已经 ping 不同了,说明 nginx 是容器里面的而不是服务器里面的

root@LAPTOP-H2EI4I6A:~# curl 127.0.0.1
curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused

方式2:拉取某个组织或者用户定制的镜像

在这里插入图片描述
拉取某个组织或者用户镜像

docker pull bitnami/nginx:1.23.4

方式3:通过 DIGEST 拉取镜像

我们找到 1.22.1 版本的 nginx
在这里插入图片描述
在这里插入图片描述
查看本地镜像

root@LAPTOP-H2EI4I6A:~# docker images
REPOSITORY                                                               TAG       IMAGE ID       CREATED         SIZE
crpi-xp37q81m2et6ppvz.cn-hangzhou.personal.cr.aliyuncs.com/hacha/hacha   latest    d2c94e258dcb   19 months ago   13.3kB
nginx                                                                    <none>    0f8498f13f3a   20 months ago   142MB
nginx                                                                    1.23.3    ac232364af84   20 months ago   142MB

查看镜像实际 id
在这里插入图片描述

综合实战二:Docker hub 上创建自己私有仓库

Busybox

BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。BusyBox 包含了一些简单的工具,例如 ls、cat 和 echo 等等,还包含了一些更大、更复杂的工具,例grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。
简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Linux 系统的自带的 shell。busybox 是一个集成了一百多个最常用 linux 命令和工具的软件,他甚至还集成了一个 http 服务器和一个 telnet 服务器,而所有这一切功能却只有区区 1M 左右的大小.因海外带宽较小,我们拉取该镜像推送到自己的仓库。
• 安装

#Ubuntu 安装
apt install -y busybox

• 执行命令

busybox ls
busybox ifconfig
busybox ifconfig |busybox grep lo

• 如果不使用后面可以卸载

#ubuntu 卸载
apt --purge autoremove busybox
#centos 卸载
#清理对应目录就好

创建账号
进入 https://hub.docker.com/,点击注册按钮,输入注册信息
在这里插入图片描述
创建仓库
登录后点击仓库,我们创建一个个人仓库
在这里插入图片描述
如果提示需要进入,进入自己的邮箱完成激活
在这里插入图片描述
我们输入仓库信息,可见信息,点击创建完成
在这里插入图片描述
推送镜像到仓库
• 拉取 busybox 镜像

root@139-159-150-152:~# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
1487bff95222: Pull complete 
Digest: 
sha256:c118f538365369207c12e5794c3cbfb7b042d950af590ae6c287ede74f2
9b7d4
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest

•给镜像打标签

docker tag busybox:latest maxhou/mybusybox:v0.1

此时查看我们多了个镜像

root@139-159-150-152:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest bab98d58e29e 3 days ago 4.86MB
maxhou/mybusybox v0.1 bab98d58e29e 3 days ago 4.86MB
grafana/grafana latest 944e84f25bc7 7 days ago 329MB
nginx <none> 8c9eabeac475 8 days ago 142MB
nginx 1.23.3 904b8cb13b93 8 days ago 142MB
hello-world latest feb5d9fea6a5 17 months ago 13.3kB

• 推送镜像到仓库,报错,因为没有登录

root@139-159-150-152:~# docker push maxhou/mybusybox:v0.1
The push refers to repository [docker.io/maxhou/mybusybox]
427701cb9c96: Preparing 
denied: requested access to the resource is denied

• 登录 docker hub

root@139-159-150-152:~# docker login -u maxhou 
Password: 
WARNING! Your password will be stored unencrypted in 
/root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#creden
tials-store
Login Succeeded

• 推送镜像成功

root@139-159-150-152:~# docker push maxhou/mybusybox:v0.1
The push refers to repository [docker.io/maxhou/mybusybox]
427701cb9c96: Mounted from library/busybox 
v0.1: digest: 
sha256:2c8ed5408179ff4f53242a4bdd2706110ce000be239fe37a61be9c52f70
4c437 size: 528

• 在我们的 docker hub 仓库里面查看
在这里插入图片描述
• 退出

docker logout

综合实战三:阿里云创建自己的私有仓库

创建账号
进入阿里云 https://www.aliyun.com/,点击右上角完成注册,可以使用支付宝快速注册
在这里插入图片描述

创建仓库
在产品上搜索容器镜像服务
在这里插入图片描述
点击管理控制台
在这里插入图片描述
点击创建个人实例
在这里插入图片描述
创建后,提示设置登录密码

在这里插入图片描述
完成登录密码的设置,这个密码就是我们的 docker login 的密码
在这里插入图片描述

点击创建镜像仓库,提示创建命名空间

在这里插入图片描述
在这里插入图片描述
配置仓库参数
在这里插入图片描述

设置仓库为本地仓库,完成创建
在这里插入图片描述
推送镜像到仓库
可以看到阿里云也提供了快捷指令
在这里插入图片描述
登录
在这里插入图片描述
查看服务器镜像
在这里插入图片描述
退出

root@LAPTOP-H2EI4I6A:~# docker logout crpi-xp37q81m2et6ppvz.cn-hangzhou.personal.cr.aliyuncs.com
Removing login credentials for crpi-xp37q81m2et6ppvz.cn-hangzhou.personal.cr.aliyuncs.com

实战经验

• Q:我入职了一个公司,开发一个镜像,我怎么选择用哪个作为基础镜像啊?
A:一般大型公司有自己专门的镜像制作组织,他们会选取对应的系统版本作为基础镜像,例如华为某部门选取欧拉来制作基础镜像,腾讯选择自己的 TLinux 制作基础镜像,不会因为出现 CentOS 不维护了无法使用的情况,而且这些镜像一般都会经过严格的安全扫描,然后作为基础组件提供给各个部门。一般的公司往往也会同意镜像的基础版本,所以这个选择个人一般不用太多纠结。


http://www.ppmy.cn/embedded/141610.html

相关文章

C#里怎么样使用多线程读取多文件?

C#里怎么样使用多线程读取多文件? 多线程在读取文件过程中,可能不存在读取快的优势,不过可以把工作分时进行,不影响界面的工作。 在这里演示两个线程, 每个线程分别读取一个文件, 要注意两个线程的同步,都需要两个线程结束之后,才能进行文件内容的操作。 这里主要比较…

Android中ByteBuffer内存池设计示例

为什么设计ByteBuffer内存池 在没有内存池的情况下&#xff0c;每次需要使用ByteBuffer时&#xff0c;都要通过ByteBuffer.allocate()或ByteBuffer.allocateDirect()方法来分配内存。这些方法涉及到系统调用&#xff0c;会消耗一定的时间和系统资源。例如&#xff0c;在高频率…

结构型模式-适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它的主要目的是将一个类的接口转换成客户期望的另一个接口&#xff0c;从而使原本接口不兼容的类可以协同工作。适配器模式常用于解决现有代码与新需求之间的兼容性问题。 适配器模式的核心…

图片怎么转换成excel文件(客户端)

一、下载安装 访问官网&#xff1a;首先&#xff0c;请确保从金鸣识别的官方网站下载软件&#xff0c;以避免潜在的安全风险。下载安装&#xff1a;根据页面指引&#xff0c;下载并安装金鸣表格文字识别软件。 二、添加图片 打开软件&#xff1a;双击桌面上的金鸣识别图标&am…

语言模型中的挑战 – 独热编码 (One-Hot Encoding)

什么是独热编码 (One-Hot Encoding)? 独热编码是一种将类别数据&#xff08;如单词&#xff09;转换为数值格式的方法。在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;词汇表中的每个单词都被表示为一个唯一的向量&#xff0c;其中只有一个位置是“1”&#xff0c…

python操作Elasticsearch

使用elasticsearch 6.x版本&#xff0c;操作es数据。 #! -*- coding:utf-8 -* import timefrom elasticsearch import Elasticsearch, helpersclass EstUtil:_instance Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance super(EstUtil, cls).__ne…

英语知识在线平台:Spring Boot技术应用

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

部署kafka-exporter

docker容器部署 docker run -d --namegrafana -v /etc/localtime:/etc/localtime:ro --restartalways -p 23000:3000 grafana/grafanadocker run -d --nameprometheus -p 29090:9090 --restartalways -v /etc/localtime:/etc/localtime:ro -v /home/prometheus/prometheus.ym…