🌈个人主页: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏: Docker_秦jh_的博客-CSDN博客
目录
[Docker Registry(镜像仓库)](#Docker Registry(镜像仓库))
[什么是Docker Registry](#什么是Docker Registry)
[docker login](#docker login)
[docker pull](#docker pull)
[docker push](#docker push)
[docker search](#docker search)
[docker logout](#docker logout)
[docker images](#docker images)
[docker image inspect](#docker image inspect)
[docker tag](#docker tag)
[docker run](#docker run)
[docker ps](#docker ps)
[docker 镜像仓库实战](#docker 镜像仓库实战)
[拉取 Nginx 镜像,启动 Nginx 站点](#拉取 Nginx 镜像,启动 Nginx 站点)
[综合实战二:Docker hub 上创建自己私有仓库](#综合实战二:Docker hub 上创建自己私有仓库)
前言
💬 hello! 各位铁子们大家好哇。
今日更新了Docker相关内容
🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝
Docker Registry(镜像仓库)
什么是Docker Registry
镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力, 建立了仓库的索引。
镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一 个或多个镜像,镜像通过镜像名称和标签 (Tag)来区分。
整体视图如下:

- 镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS或IP地址来确 定一个镜像仓库如 hub.docker.com;一个 Registry中可以存在多个 Repository·Repository 可分为"顶层仓库"和"用户仓库";·用户仓库名称格式为"用户名/仓库名"·每个仓库可以包含多个Tag(标签),每个标签对应一个镜像
- Repository: ·由某特定的docker镜像的所有迭代版本组成的镜像仓库
- 镜像名称(name)+标签(tag):如nginx:latest
- 认证能力:提供用户注册,登录、登出能力
- 索引:提供镜像的索引信息,方便检索
一个容器镜像包含了两个部分,一个是元数据,其实就是由dockerfile构建出来的描 述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的 checksum这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面, 就是在一个一个的blob里面,真正占有空间的就是这些blob。
镜像仓库分类
按是否对外开放划分,也是研发人员常说的
(1)公有仓库:像阿里云、dockerhub 等放到公有网络上,不用登录就可以下载镜像, 供大家访问使用
(2)私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。
按供应商和面向群体划分
(1)sponsor(赞助) registry:第三方的registry,供客户和docker社区版使用
(2)mirror(镜像) registry:第三方的 registry,只让客户使用,例如阿里云必须注册才 能使用
(3)vendor(供应商) registry:由发布 docker镜像的供应商提供的registry,例如像 Google 和Redhat提供了镜像仓库服务
(4)private registry:通过没有防火墙和额外的安全层的私有实体提供的registry,仅供 内部使用
镜像仓库工作机制
- 镜像仓库使用流程
- 通过docker login登录仓库
- Docker pull 拉取需要的镜像
- 通过dockerfile或者commit等方式制作完镜像通过docker push上传到仓库
- 实际研发中镜像仓库如何使用
Docker Registry 中的镜像通常由开发人员制作,而后推送至"公共"或"私有"Registry上 保存,供其他人员使用,例如"部署"到生产环境;

名词解释
开发环境:开发人员使用的一套环境
测试环境:需求开发完成后,发布到供测试人员进行测试的环境
预发布环境:版本测试完成后,发布到和生产类似的环境,提前模拟生产发布
生产环境:真正面向客户的环境
- 镜像仓库的拉取机制
启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将 从Registry 中下载该镜像并保存到本地;
镜像仓库命令
命令清单

docker login
功能
登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub,
语法
docker login OPTIONS SERVER
关键参数
○ -u :登陆的用户名
○ -p :登陆的密码
样例:docker login -u 用户名 -p 密码
docker pull
功能
从镜像仓库中拉取或者更新指定镜像
语法
docker pull OPTIONS NAME:TAG\|@DIGEST
关键参数
○ -a :拉取所有 tagged 镜像
○ --disable-content-trust :忽略镜像的校验,默认开启
样例:
docker pull nginx:1.23.3
docker push
功能
将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
语法
docker push OPTIONS NAME:TAG
关键参数
○ -a :推送所有 tagged 镜像
○ --disable-content-trust :忽略镜像的校验,默认开启
样例:
docker push myapache:v1
docker search
功能
从Docker Hub查找镜像
语法
docker search OPTIONS TERM
关键参数
○ --no-trunc :显示完整的镜像描述;
○ -f :列出收藏数不小于指定值的镜像。
样例:
#从 Docker Hub 查找所有镜像名包含 nginx,并且star数大于 10 的镜像
docker search -f stars=10 nginx
docker logout
功能
登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub,
语法
docker logout SERVER
样例
docker logout
镜像命令部分
docker images
功能
列出本地镜像。
语法
docker images OPTIONS REPOSITORY\[:TAG]
关键参数
○ -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
○ --digests :显示镜像的摘要信息;
○ -f :显示满足条件的镜像;
○ --format :指定返回值的模板文件;
○ --no-trunc :显示完整的镜像信息;
○ -q :只显示镜像ID。
样例
#列出本地全部镜像
docker images
#列出本地镜像中REPOSITORY为ubuntu的镜像列表。
docker images ubuntu
docker image inspect
功能
查看镜像详细信息
语法
docker image inspect OPTIONS IMAGE IMAGE...
样例
#查看镜像详细信息
docker images inspect nginx:1.23.3
docker tag
功能
标记本地镜像,将其归入某一仓库。
语法
docker tag SOURCE_IMAGE:TAG TARGET_IMAGE:TAG
样例
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
容器命令部分
docker run
功能
创建一个新的容器并运行一个命令
语法
docker run OPTIONS IMAGE COMMAND ARG...
关键参数
○ -d: 后台运行容器,并返回容器ID;
○ -i: 以交互模式运行容器,通常与 -t 同时使用;
○ -P: 随机端口映射,容器内部端口随机映射到主机的端口
○ -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
○ -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
○ --name="nginx-lb": 为容器指定一个名称;
○ -h "mars": 指定容器的hostname;
○ -e username="ritchie": 设置环境变量;
○ --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU运行;
○ -m :设置容器使用内存最大值;
○ --network="bridge": 指定容器的网络连接类型;
○ --link=\[\]: 添加链接到另一个容器;
○ --volume , -v: 绑定一个卷
○ --rm :shell退出的时候自动删除容器
样例
#使用docker 镜像nginx:latest 以后台模式启动一个容器,并将容器命名为 mynginx。
docker run --name mynginx -d nginx:latest
#使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
docker ps
功能
列出容器
语法
docker ps OPTIONS
关键参数
○ -a :显示所有的容器,包括未运行的。
○ -f :根据条件过滤显示的内容。
○ --format :指定返回值的模板文件。如json或者table
○ -l :显示latest的容器。
○ -n :列出最近创建的n个容器。
○ --no-trunc :不截断输出。
○ -q :静默模式,只显示容器编号。
○ -s :显示总的文件大小。
样例
docker ps -a
docker 镜像仓库实战
综合实战一:搭建一个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访问的。
- 反向代理

当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的 反向代理,即反向代理"代理"的是服务器端,而且这一个过程对于客户端而言是透明的。
总结:
正向代理:是「客户端」找代理帮忙去访问目标网站(目标网站不知道真实客户端是谁)
反向代理:是「服务器端」用代理来接收外部请求,再转发给内部的真实服务器(客户端不知道背后有多个服务器)
安装
ubuntu 安装
nginx apt install nginx -y
启动 nginx 作为一个网站
1.查看 nginx 是否启动
root@ubuntu1:/data# ps -ef |grep nginx
2.如果没有启动,手动启动 nginx
#手动启动
nginx
3.访问 nginx 首页

4.nginx 调整配置
vim /etc/nginx/sites-available/default
5.首页内容
cat /usr/share/nginx/html/index.html
- 停止 nginx,kill master 进程来杀死进程
拉取 Nginx 镜像,启动 Nginx 站点
- 拉取 nginx 镜像
我们到 https://hub.docker.com/ 上找到 nginx 镜像
docker pull nginx:1.23.3
- 查看本地是否有该镜像
docker images
- 运行镜像
docker run --name nginx1 --rm -it -p 80:80 nginx:1.23.3 bash
4.查看我们现在是在容器的 shell 里面,执行 cat /etc/*release*查看操作系统不是 Ubuntu

综合实战二: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
创建账号
进入 https://hub.docker.com/,点击注册按钮,输入注册信息
创建仓库
登录后点击仓库,我们创建一个个人仓库

推送镜像到仓库
拉取 busybox 镜像
docker pull busybox
给镜像打标签
docker tag busybox:latest maxhou/mybusybox:v0.1
此时查看我们多了个镜像

登录,推送镜像到仓库
docker login -u XXX
docker push maxhou/mybusybox:v0.1
在我们的 docker hub 仓库里面查看

退出
docker logout

