[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 命令和工具的软件。

它包含了一些简单的工具,例如 lscatecho 等,还包含了一些更大、更复杂的工具,例如 grepfindmount 以及 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 镜像推送到该仓库。

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

相关推荐
java小吕布20 分钟前
Java中Properties的使用详解
java·开发语言·后端
南猿北者1 小时前
docker Network(网络)
网络·docker·容器
秦jh_1 小时前
【Linux】多线程(概念,控制)
linux·运维·前端
2401_857610031 小时前
Spring Boot框架:电商系统的技术优势
java·spring boot·后端
sam-1232 小时前
k8s上部署redis高可用集群
redis·docker·k8s
keep__go3 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell
矛取矛求3 小时前
Linux中给普通账户一次性提权
linux·运维·服务器
Fanstay9853 小时前
在Linux中使用Nginx和Docker进行项目部署
linux·nginx·docker
大熊程序猿3 小时前
ubuntu 安装kafka-eagle
linux·ubuntu·kafka
杨哥带你写代码3 小时前
网上商城系统:Spring Boot框架的实现
java·spring boot·后端