[Docker#5] 镜像仓库 | 命令 | 实验:搭建Nginx | 创建私有仓库

目录

镜像仓库命令

[1. 命令清单](#1. 命令清单)

[2. docker login](#2. docker login)

[3. docker pull](#3. docker pull)

[4. docker push](#4. docker push)

[5. docker search](#5. docker search)

[6. docker logout](#6. docker logout)

镜像命令部分

[1. docker images](#1. docker images)

[2. docker image inspect](#2. docker image inspect)

[3. docker tag](#3. docker tag)

容器命令部分

[1. docker run](#1. docker run)

[2. docker ps](#2. docker ps)

实战操作

[一. 搭建一个 Nginx 服务](#一. 搭建一个 Nginx 服务)

基础知识

[Web 服务器](#Web 服务器)

Nginx

[安装 Nginx](#安装 Nginx)

[Ubuntu 安装 Nginx](#Ubuntu 安装 Nginx)

[拉取 Nginx 镜像,启动 Nginx 站点](#拉取 Nginx 镜像,启动 Nginx 站点)

[其他方式拉取 Nginx 镜像](#其他方式拉取 Nginx 镜像)

查看本地镜像

[二:Docker Hub 上创建自己私有仓库](#二:Docker Hub 上创建自己私有仓库)

基础知识

BusyBox

[安装 BusyBox](#安装 BusyBox)

[Ubuntu 安装](#Ubuntu 安装)

执行命令

[卸载 BusyBox](#卸载 BusyBox)

[Ubuntu 卸载](#Ubuntu 卸载)

创建账号

推送镜像到仓库


镜像仓库命令

1. 命令清单

|---------------|-------------------|------|------|
| 命令 | 别名 | 功能 | 备注 |
| docker login | | 登录仓库 | 必须掌握 |
| docker pull | docker image pull | 拉取镜像 | 必须掌握 |
| docker push | docker image push | 推送镜像 | 必须掌握 |
| docker search | | 查找镜像 | |
| docker logout | | 登出仓库 | 必须掌握 |

2. docker login
  • 功能:
    • 登陆到一个 Docker 镜像仓库,默认为官方仓库 Docker Hub。
  • 语法:

    docker login [OPTIONS] [SERVER]

  • 关键参数:

    • -u: 登陆的用户名
    • -p: 登陆的密码
  • 样例:

    docker login -u 用户名 -p 密码

3. docker pull
  • 功能:
    • 从镜像仓库中拉取或更新指定镜像。
  • 语法:

    docker pull [OPTIONS] NAME[:TAG|@DIGEST]

  • 别名:

    docker image pull

  • 关键参数:

    • -a: 拉取所有 tagged 镜像
    • --disable-content-trust: 忽略镜像的校验,默认开启
  • 样例:

    docker pull nginx:1.23.3

4. docker push
  • 功能:
    • 将本地的镜像上传到镜像仓库,需先登录。
  • 语法:

    docker push [OPTIONS] NAME[:TAG]

  • 别名:

    docker image push

  • 关键参数:

    • -a: 推送所有 tagged 镜像
    • --disable-content-trust: 忽略镜像的校验,默认开启
  • 样例:

    docker push myapache:v1

  • 功能:
    • 从 Docker Hub 查找镜像。
  • 语法:

    docker search [OPTIONS] TERM

  • 关键参数:

    • --no-trunc: 显示完整的镜像描述;
    • -f <过滤条件>: 列出收藏数不小于指定值的镜像。
  • 样例:

    从 Docker Hub 查找所有镜像名包含 nginx,并且 star 数大于 10 的镜像

    docker search -f stars=10 nginx

6. docker logout
  • 功能:
    • 登出一个 Docker 镜像仓库,默认为官方仓库 Docker Hub。
  • 语法:

    docker logout [SERVER]

  • 样例:

    docker logout

镜像命令部分

1. docker images
  • 功能:
    • 列出本地镜像。
  • 语法:

    docker images [OPTIONS] [REPOSITORY[:TAG]]

  • 别名:

    docker image ls, docker image list

  • 关键参数:

    • -a: 列出本地所有镜像(含中间映像层,默认情况下,过滤掉中间映像层);
    • --digests: 显示镜像的摘要信息;
    • -f: 显示满足条件的镜像;
    • --format: 指定返回值的模板文件;
    • --no-trunc: 显示完整的镜像信息;
    • -q: 只显示镜像 ID。
  • 样例:

    列出本地全部镜像

    docker images

    列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。

    docker images ubuntu

可以结合 grep 使用

2. docker image inspect
  • 功能:
    • 查看镜像详细信息。
  • 语法:

    docker image inspect [OPTIONS] IMAGE [IMAGE...]

  • 样例:

    查看镜像详细信息

    docker image inspect nginx:1.23.3

3. docker tag
  • 功能:
    • 标记本地镜像,将其归入某一仓库。
  • 语法:

    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

  • 别名:

    docker image tag

  • 样例:

    docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04

可以发现,打标签后,两者的image id是相同的,因为两者的镜像内容相同,只是名字不同。

常会通过这种方式,给镜像名前面加上一串仓库路径,方便提交。

容器命令部分

1. docker run
  • 功能:
    • 创建一个新的容器并运行一个命令。
  • 语法:

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  • 别名:

    docker container run

  • 关键参数:

    • -d: 后台运行容器,并返回容器 ID;
    • -i: 以交互模式运行容器,通常与 -t 同时使用;
    • -P: 随机端口映射,容器内部端口随机映射到主机的端口
    • -p: 指定端口映射,格式为 主机(宿主)端口:容器端口
    • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    • --name="nginx-lb": 为容器指定一个名称;
    • -h "mars": 指定容器的 hostname;
    • -e username="ritchie": 设置环境变量;
    • --cpuset-cpus="0-2" 或 --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

2. docker ps
  • 功能:
    • 列出容器。
  • 语法:

    docker ps [OPTIONS]

  • 别名:

    docker container ls, docker container list, docker container ps

  • 关键参数:

    • -a: 显示所有的容器,包括未运行的。
    • -f: 根据条件过滤显示的内容。
    • --format: 指定返回值的模板文件。如 json 或者 table
    • -l: 显示最新的容器。
    • -n: 列出最近创建的 n 个容器。
    • --no-trunc: 不截断输出。
    • -q: 静默模式,只显示容器编号。
    • -s: 显示总的文件大小。
  • 样例:

    docker ps -a

可以理解到:一个 OS 上可以运行多个 docker


实战操作

一. 搭建一个 Nginx 服务

基础知识
Web 服务器
  • Web 服务器,一般是指"网站服务器",是指驻留于互联网上某种类型计算机的程序。Web 服务器可以向 Web 浏览器等客户端提供文档,也可以放置网站文件,让全世界浏览,更可以放置数据文件,让全世界下载。
  • Web 服务器,也称为"WWW 服务器"(英文全写:World Wide Web,翻译成中文:万维网或环球信息网),主要功能是"提供网上信息浏览服务"。
  • WWW 是 Internet(互联网)的多媒体信息查询工具,是 Internet(互联网)上发展起来的服务,也是发展最快和目前使用最广泛的服务。例如百度就是一个 Web 服务器,提供搜索服务。
Nginx
  • Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器。Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。
  • 可以理解 Nginx 是 Web 服务器的一种实现。
  • Nginx 作为 Web 服务器可以向各种浏览器等客户端提供浏览服务,比如我们通过手机、电脑、平板可以访问百度来实现对 Web 服务器的访问。

正向代理:由于防火墙的原因,我们不能直接访问谷歌,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。

这里能够发现,正向代理"代理"的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过 VPN 访问的。例如我们平时使用的 steam 游戏加速器

反向代理 :当我们在外网访问百度的时候,其实会进行一个转发,代理到内网去,这就是所谓的反向代理,即反向代理"代理"的是服务器端,而且这一个过程对于客户端而言是透明的。

安装 Nginx
Ubuntu 安装 Nginx
复制代码
sudo apt update
sudo apt install nginx -y

启动 Nginx 作为一个网站

  1. 查看 Nginx 是否启动

    ps -ef | grep nginx

  2. 如果没有启动,手动启动 Nginx

    • 查看版本

      nginx -v

    • 手动启动

      sudo nginx

  1. 访问 Nginx 首页
    • 打开浏览器,访问 http://<你的服务器IP>,你应该能看到 Nginx 的欢迎页面。
  1. 调整 Nginx 的配置
    • 编辑 Nginx 配置文件

      sudo vi /etc/nginx/sites-available/default

    • 配置示例
    • 保存并退出编辑器,然后重新加载 Nginx 配置

      sudo nginx -s reload

  1. 首页内容
    • 查看 Nginx 默认首页内容

      cat /usr/share/nginx/html/index.html

    • 内容示例
  1. 停止 Nginx
    • 查找 Nginx 主进程并杀死

      ps -ef | grep nginx
      kill <主进程ID>

拉取 Nginx 镜像,启动 Nginx 站点
  1. 拉取 Nginx 镜像

    docker pull nginx:1.23.3

  1. 查看本地是否有该镜像

    docker images

  2. 运行镜像

    docker run --name nginx1 --rm -it -p 80:80 nginx:1.23.3 bash

  3. 查看我们现在是在容器的 shell 里面,执行 cat /etc/*release*查看操作系统

    cat /etc/release

  4. 启动 Nginx

    nginx

  1. 在另一个 shell 窗口中执行 curl命令,可以看到 Nginx 的欢迎信息返回

    curl 127.0.0.1

    • 如果你的服务器的 80 端口外部能访问,那么可以用浏览器看到 Nginx 的欢迎页面。注意云厂商一般都屏蔽了 80 端口,需要联系客服开通。
  1. 退出 shell 观察再 curl发现我们已经 ping 不通了,说明 Nginx 是容器里面的而不是服务器里面的

    curl 127.0.0.1

其他方式拉取 Nginx 镜像
  1. 拉取某个组织或者用户定制的镜像

    docker pull bitnami/nginx:1.23.4

  2. 通过 DIGEST 拉取镜像

    docker pull nginx@sha256:d7573e9b475c64dbf09dac0808517e8d5a919918aa772ceca381091365a970aa

  • 找到 1.22.1 版本的 Nginx
查看本地镜像
  1. 查看本地镜像

    docker images

  2. 查看镜像实际 ID

    docker image inspect 8c9eabeac475

    • 输出示例

通过以上步骤,你可以成功搭建并运行一个 Nginx 服务,并且学会如何使用 Docker 拉取和管理 Nginx 镜像。

二:Docker Hub 上创建自己私有仓库

基础知识
BusyBox

BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。

它包含了一些简单的工具,例如 ls、cat 和 echo 等,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet。

BusyBox 是一个集成了一百多个最常用 Linux 命令和工具的软件,它甚至还集成了一个 HTTP 服务器和一个 Telnet 服务器,而所有这一切功能却只有区区 1M 左右的大小。因海外带宽较小,我们拉取该镜像推送到自己的仓库。

安装 BusyBox
Ubuntu 安装
复制代码
sudo apt update
sudo apt install -y busybox
执行命令
复制代码
busybox ls
busybox ifconfig
busybox ifconfig | busybox grep lo
卸载 BusyBox
Ubuntu 卸载
复制代码
sudo apt --purge autoremove busybox
创建账号
  1. 进入 Docker Hub
  1. 创建仓库
    • 登录后点击仓库,创建一个个人仓库。
    • 如果提示需要进入,进入自己的邮箱完成激活。
    • 输入仓库信息,选择可见性(公开或私有),点击创建完成。
推送镜像到仓库
  1. 拉取 BusyBox 镜像

    docker pull busybox

  2. 给镜像打标签

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

  3. 查看本地镜像

    docker images

输出示例

  1. 推送镜像到仓库
  • 推送镜像

    docker push maxhou/mybusybox:v0.1
    The push refers to repository [docker.io/maxhou/mybusybox]
    427701cb9c96: Mounted from library/busybox
    v0.1: digest: sha256:2c8ed5408179ff4f53242a4bdd2706110ce000be239fe37a61be9c52f704c437 size: 528

  1. 在 Docker Hub 仓库查看
    • 登录 Docker Hub,进入你的仓库页面,确认镜像已成功推送。
  1. 退出 Docker Hub

    docker logout

通过以上步骤,你可以成功创建自己的 Docker Hub 私有仓库,并将 BusyBox 镜像推送到该仓库。

有时候会不太稳定,不科学上网的话,可以使用阿里云~

相关推荐
程序猿DD43 分钟前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
贵州诚鑫致达科技有限公司3 小时前
Linux的yum源怎么重启?源不是服务
linux·运维·服务器
余槐i3 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8264 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
凤山老林5 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne6 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF6 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
澜山奕秋6 小时前
RHCSA
linux·运维·服务器
pride.li6 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
程序员老赵7 小时前
Docker 部署 Wiki.js:轻松搭建私有化维基知识库
docker·容器·开源