[Docker#5] 镜像仓库 | 命令 | 实验:搭建Nginx | 创建私有仓库
目录
镜像仓库命令
1. 命令清单
2. docker login
3. docker pull
4. docker push
5. docker search
6. docker logout
镜像命令[部分]
1. docker images
2. docker image inspect
3. docker tag
容器命令[部分]
1. docker run
2. docker ps
实战操作
一. 搭建一个 Nginx 服务
基础知识
Web 服务器
Nginx
安装 Nginx
Ubuntu 安装 Nginx
拉取 Nginx 镜像,启动 Nginx 站点
其他方式拉取 Nginx 镜像
查看本地镜像
二:Docker Hub 上创建自己私有仓库
基础知识
BusyBox
安装 BusyBox
Ubuntu 安装
执行命令
卸载 BusyBox
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
5. docker search
- 功能:
-
- 从 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 作为一个网站
- 查看 Nginx 是否启动
ps -ef | grep nginx
- 如果没有启动,手动启动 Nginx
-
- 查看版本
nginx -v
-
- 手动启动
sudo nginx
- 访问 Nginx 首页
-
- 打开浏览器,访问
http://<你的服务器IP>
,你应该能看到 Nginx 的欢迎页面。
- 打开浏览器,访问
- 调整 Nginx 的配置
-
- 编辑 Nginx 配置文件
sudo vi /etc/nginx/sites-available/default
-
- 配置示例
-
- 保存并退出编辑器,然后重新加载 Nginx 配置
sudo nginx -s reload
- 首页内容
-
- 查看 Nginx 默认首页内容
cat /usr/share/nginx/html/index.html
-
- 内容示例
- 停止 Nginx
-
- 查找 Nginx 主进程并杀死
ps -ef | grep nginx
kill <主进程ID>
拉取 Nginx 镜像,启动 Nginx 站点
- 拉取 Nginx 镜像
docker pull nginx:1.23.3
-
- 到 https://hub.docker.com/ 上找到 Nginx 镜像
- 查看本地是否有该镜像
docker images
- 运行镜像
docker run --name nginx1 --rm -it -p 80:80 nginx:1.23.3 bash
- 查看我们现在是在容器的 shell 里面,执行
cat /etc/*release*
查看操作系统
cat /etc/*release*
- 启动 Nginx
nginx
- 在另一个 shell 窗口中执行
curl
命令,可以看到 Nginx 的欢迎信息返回
curl 127.0.0.1
-
- 如果你的服务器的 80 端口外部能访问,那么可以用浏览器看到 Nginx 的欢迎页面。注意云厂商一般都屏蔽了 80 端口,需要联系客服开通。
- 退出 shell 观察再
curl
发现我们已经 ping 不通了,说明 Nginx 是容器里面的而不是服务器里面的
curl 127.0.0.1
其他方式拉取 Nginx 镜像
- 拉取某个组织或者用户定制的镜像
docker pull bitnami/nginx:1.23.4
- 通过 DIGEST 拉取镜像
docker pull nginx@sha256:d7573e9b475c64dbf09dac0808517e8d5a919918aa772ceca381091365a970aa
- 找到 1.22.1 版本的 Nginx
查看本地镜像
- 查看本地镜像
docker images
- 查看镜像实际 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
创建账号
- 进入 Docker Hub
-
- 访问 https://hub.docker.com/,点击注册按钮,输入注册信息。
- 创建仓库
-
- 登录后点击仓库,创建一个个人仓库。
- 如果提示需要进入,进入自己的邮箱完成激活。
- 输入仓库信息,选择可见性(公开或私有),点击创建完成。
推送镜像到仓库
- 拉取 BusyBox 镜像
docker pull busybox
- 给镜像打标签
docker tag busybox:latest maxhou/mybusybox:v0.1
- 查看本地镜像
docker images
输出示例
- 推送镜像到仓库
- 推送镜像
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
- 在 Docker Hub 仓库查看
-
- 登录 Docker Hub,进入你的仓库页面,确认镜像已成功推送。
- 退出 Docker Hub
docker logout
通过以上步骤,你可以成功创建自己的 Docker Hub 私有仓库,并将 BusyBox 镜像推送到该仓库。
有时候会不太稳定,不科学上网的话,可以使用阿里云~