Docker的镜像仓库

1. 什么是镜像仓库(Docker Registry)

(1)镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。

  • 镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签 (Tag)来区分。整体视图如下:

  • 镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确定一个镜像仓库如 hub.docker.com;一个 Registry 中可以存在多个Repository·Repository 可分为“顶层仓库”和“用户仓库”;用户仓库名称格式为“用户名/仓库名”·每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像。
  • Repository: ·由某特定的 docker 镜像的所有迭代版本组成的镜像仓库。
  • 镜像名称(name) +标签(tag):如nginx:latest。
  • 认证能力:提供用户注册,登录、登出能力。
  • 索引:提供镜像的索引信息,方便检索。

(2)一个容器镜像包含了两个部分一个是元数据,其实就是由 dockerfile 构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的checksum 这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面,就是在一个一个的 blob 里面,真正占有空间的就是这些 blob。

(3)举个生活案例来理解镜像仓库:

  • 大家可以类比超市,一个 Repository 就是一个货架,白象就是组织者,货架上放的产品打的不同标签就是对应的 tag。

2. 镜像仓库分类

(1)按是否对外开放划分,也是研发人员常说的:

  • 公有仓库:像阿里云、 dockerhub 等放到公有网络上,不用登录就可以下载镜像,供大家访问使用
  • 私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。

(2)按供应商和面向群体划分:

  • sponsor(赞助) registry:第三方的 registry,供客户和 docker 社区版使用。
  • mirror(镜像) registry:第三方的 registry,只让客户使用,例如阿里云必须注册才能使用。
  • vendor(供应商) registry:由发布 docker 镜像的供应商提供的 registry,例如像Google 和 Redhat 提供了镜像仓库服务。
  • private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用。

3. 镜像仓库工作机制

(1)镜像仓库使用流程:

  • 通过 docker login 登录仓库。
  • Docker pull 拉取需要的镜像。
  • 通过 dockerfile 或者 commit 等方式制作完镜像通过 docker push 上传到仓库。

(2)实际研发中镜像仓库如何使用:

  • Docker Registry 中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry 上保存,供其他人员使用,例如“部署”到生产环境。

  • 名词解释:
    • 开发环境:开发人员使用的一套环境。
    • 测试环境:需求开发完成后,发布到供测试人员进行测试的环境。
    • 预发布环境:版本测试完成后,发布到和生产类似的环境,提前模拟生产发布。
    • 生产环境:真正面向客户的环境。

(3)镜像仓库的拉取机制:

  • 启动容器时, docker daemon 会试图从本地获取相关的镜像;本地镜像不存在时,其将从 Registry 中下载该镜像并保存到本地。

4. 常用的镜像仓库

(1)Docker Hub仓库:Docker Hub 是 Docker 提供的托管存储库服务,用于查找容器映像并与您的团队共享。具有以下功能:

  1. 个人可以注册私有仓库,能够发布自己的镜像。
  2. 提供镜像检索能力。
  3. 提供海量官方和认证组织的镜像。
  4. 从 GitHub 和 Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub。
  5. 支持 webhook(webhook 是一种基于 HTTP 的回调函数,发生指定的事件时,服务器会自动将相关的有效负载发送到客户端的 webhook URL。
  6. Docker Hub官方仓库链接https://hub.docker.com/。

(2)如果上述链接打不开是因为在国外,需要对github进行加速即可。以下是免费加速的使用过程:

  • 首先点开在微软商店:
  • 搜索并下载如下软件(这本质上是steam的加速,但是也可以加上github):
  • 点击加速即可:

(3)Docker Hub 功能浏览:

  • 镜像搜索:

  • 镜像 tag 查找:

  • 对应版本拉取命令:

  • 镜像的大小, id, cpu 架构查看:


(4)国内镜像源:

  • 国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内镜像加速器服务,例如:阿里云加速器(点击管理控制台 -> 登录账号(淘宝账号) -> 右侧镜像工具 -> 镜像加速器-> 复制加速器地址)
  • 网易云加速器地址:https://hub-mirror.c.163.com。
  • 百度云加速器地址:https://mirror.baidubce.com。
  • 可以在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)。
{
# 注意如果最外层以及你给有了配置,不要直接覆盖,而是将下面的内容添加,然后确保 json 的格式正确
	"registry-mirrors": [
		"https://hub-mirror.c.163.com",
		"https://mirror.baidubce.com"
	]
}
  • 添加完成后需要重新加载配置,重启 Docker:
# 加载配置
sudo systemctl daemon-reload
# 重启 docker
sudo systemctl restart docker
#查看 docker 状态
sudo systemctl status docker

(5)私有仓库:

  • 私有镜像仓库则是指部署在公司或组织内部,用于自身应用 Docker 镜像存储、分发的镜像仓库。在构建公司内部使用的自动化发布系统的过程中,从安全的角度出发,应用的打包镜像一般情况下只会被存储在私有镜像仓库中, CI/CD 流程的衔接点也是通过向私有镜像仓库上传镜像和拉取镜像的操作来完成的。

(6)常见的私有仓库工具:

  • Harbor:Harbor 是 VMware 公司最近开源的企业级 Docker Registry 项目, 其目标是帮助用户迅速搭建一个企业级的 Docker registry 服务。它以 Docker 公司开源的registry 为基础,提供了管理 UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP 集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文。 Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 DockerCompose 来对它进行部署。
  • Nexus:Nexus 是 Sonatype 公司发布的一款仓库(Repository)管理软件,目前常被用来作为 Maven 私服、 Docker 私服。
  • Docker registry:由 docker 官方提供的私服,类似于 docker hub。用于保存公司内部上传的 Docker 镜像。

5. 镜像仓库命令

5.1 命令清单

(1)如下表所示:

命令别名功能
docker login登录仓库
docker pulldocker image pull拉取镜像
docker pushdocker image push推送镜像
docker search查找镜像
docker logout登出仓库

5.2 docker login命令

(1)功能:

  • 登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 DockerHub。

(2)语法:

Shell
docker login [OPTIONS] [SERVER]

(3)关键参数:

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

(4)样例:

docker login -u 用户名 -p 密码

5.3 docker pull命令

(1)功能:

  • 从镜像仓库中拉取或者更新指定镜像。

(2)语法:

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

(3)别名(以下方法也是一样的):

docker image pull

(4)关键参数:

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

(5)样例:

docker pull nginx:1.23.3

5.4 docker push命令

(1)功能:

  • 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库。

(2)语法:

docker push [OPTIONS] NAME[:TAG]

(3)别名(以下方法也是一样的):

docker image push

(4)关键参数:

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

(5)样例:

docker push myapache:v1

5.5 docker search命令

(1)功能:

  • 从 Docker Hub 查找镜像。

(2)语法:

docker search [OPTIONS] TERM

(3)关键参数:

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

(4)样例:

# 从 Docker Hub 查找所有镜像名包含 nginx,并且 star 数大于 10 的镜像
docker search -f stars=10 nginx

5.6 docker logout命令

(1)功能:

  • 登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub。

(2)语法:

docker logout [SERVER]

(3)样例:

docker logout

6. 镜像命令[部分]

学习仓库前我们需要提前了解一部分的镜像命令,为后续的实战做准备。

6.1 docker images命令

(1)功能:

  • 列出本地镜像。

(2)语法:

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

(3)别名:

docker image ls, docker image list

(4)关键参数:

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

(5)样例:

#列出本地全部镜像
docker images
#列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。
docker images ubuntu

6.2 docker image inspect命令

(1)功能:

  • 查看镜像详细信息。

(2)语法:

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

(3)样例:

#查看镜像详细信息
docker images inspect nginx:1.23.3

6.3 docker tag命令

(1)功能:

  • 标记本地镜像,将其归入某一仓库。

(2)语法:

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

(3)别名:

docker image tag

(4)样例:

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

7. 容器命令[部分]

学习仓库前我们需要提前了解一部分的容器命令,为后续的实战做准备。

7.1 docker run命令

(1)功能:

  • 创建一个新的容器并运行一个命令

(2)语法:

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

(3)别名:

docker container run

(4)关键参数:

  • -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 退出的时候自动删除容器;

(5)样例:

#使用 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

7.2 docker ps命令

(1)功能:

  • 列出容器。

(2)语法:

docker ps [OPTIONS]

(3)别名:

docker container ls, docker container list, docker container ps

(4)关键参数:

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

(5)样例:

docker ps -a

8. 搭建一个 nginx 服务

8.1 基础知识

(1)Web 服务器:

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


(2)Nginx:

  • Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、 POP3、 SMTP 代理服务器; Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。
  • 可以理解 Nginx 是 web 服务器的一种实现。

  • Nginx 作为 Web 服务器可以向各种浏览器等客户端提供浏览服务,比如我们通过手机、电脑、平板可以访问百度来实现对 web 服务器的访问。

(3)正向代理概念:

  • 由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而且客户端是知道目标的,而目标是不知道客户端是通过 VPN 访问的。

(4)反向代理概念:

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

8.2 安装nginx

(1)安装:

# ubuntu 安装 nginx
apt install nginx -y
# centos
# centos 配置 nginx 源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginxrelease-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
# 之后启动 nginx 作为一个网站

(2)查看 nginx 是否启动:

[xiaomaker@xiaomaker-virtual-machine:docket]$ sudo ps -ef | grep nginx

(3)如果没有启动,手动启动 nginx:

#查看版本
nginx -v
#手动启动
nginx

(4)访问 nginx 首页:


(5)nginx 调整配置:

# ubuntu 安装后首页的信息可能被调整了,需要确认下修改,注意 centos 7.9 默
# 认的位置就是/usr/share/nginx/html 无需修改,大家针对自己的系统可以检查后
# 看是否需要调整配置
vi /etc/nginx/sites-available/default

server {
	listen 80 default_server;
	listen [::]:80 default_server;
	# SSL configuration
	#
	# listen 443 ssl default_server;
	# listen [::]:443 ssl default_server;
	#
	# Note: You should disable gzip for SSL traffic.
	# See: https://bugs.debian.org/773332
	#
	# Read up on ssl_ciphers to ensure a secure configuration.
	# See: https://bugs.debian.org/765782
	#
	# Self signed certs generated by the ssl-cert package
	# Don't use them in a production server!
	#
	# include snippets/snakeoil.conf;
	#调整 nginx 的默认页面
	root /usr/share/nginx/html;
	# Add index.php to the list if you are using PHP
	index index.html index.htm index.nginx-debian.html;
	
	server_name _;
	
	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a404.
		try_files $uri $uri/ =404;
	}

(6)首页内容:

[xiaomaker@xiaomaker-virtual-machine:docket]$ cat /usr/share/nginx/html/index.html

(7)停止 nginx, kill master 进程来杀死进程:

[xiaomaker@xiaomaker-virtual-machine:docket]$ ps -ef |grep nginx
...
[xiaomaker@xiaomaker-virtual-machine:docket]$ kill 进程ID

8.3 nginx镜像

(1)查找 nginx 镜像:Docker search 可以查找,但是 nginx 的详细的 tag 我们看不见:

[xiaomaker@xiaomaker-virtual-machine:docket]$ docker search nginx

(2)拉取 Nginx 镜像,启动 Nginx 站点:

  • 拉取 nginx 镜像:我们到 https://hub.docker.com/ 上找到 nginx 镜像
[xiaomaker@xiaomaker-virtual-machine:docket]$ docker pull nginx:1.23.3
  • 查看本地是否有该镜像:
[xiaomaker@xiaomaker-virtual-machine:docket]$ docker images
  • 运行镜像:
docker run --name nginx1 --rm -it -p 80:80 nginx:1.23.3 bash
  • 查看我们现在是在容器的 shell 里面,执行 cat /etc/release查看操作系统不是Ubuntu:

  • 启动 nginx:
root@5f377aec47ce:/# nginx
2023/03/10 11:22:05 [notice] 7#7: using the "epoll" event method
2023/03/10 11:22:05 [notice] 7#7: nginx/1.23.3
2023/03/10 11:22:05 [notice] 7#7: built by gcc 10.2.1 20210110(Debian 10.2.1-6)
2023/03/10 11:22:05 [notice] 7#7: OS: Linux 5.4.0-100-generic
2023/03/10 11:22:05 [notice] 7#7: getrlimit(RLIMIT_NOFILE):1048576:1048576
root@5f377aec47ce:/# 2023/03/10 11:22:05 [notice] 8#8: start worker processes
2023/03/10 11:22:05 [notice] 8#8: start worker process 9
172.17.0.1 - - [10/Mar/2023:11:22:15 +0000] "GET / HTTP/1.1" 200
615 "-" "curl/7.68.0" "-"
  • shell 不退出打开另外一个 shell 窗口执行 curl 命令,可以看到 nginx 的欢迎信息返回:
[xiaomaker@xiaomaker-virtual-machine:docket]$ curl 127.0.0.1
  • 如果你的服务器的 80 端口外部能访问那么可以用浏览器看到 nginx 的欢迎页面,注意云厂商一般都屏蔽了 80 端口,需要联系客服开通。

  • shell 退出观察再 curl 发现我们已经 ping 不同了,说明 nginx 是容器里面的而不是服务器里面的:
root@139-159-150-152:~# curl 127.0.0.1
curl: (7) Failed to connect to 127.0.0.1 port 80: Connection
refused

9. Docker hub上创建自己私有仓库

9.1 基础知识

(1)Busybox:

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

(2)安装Busybox:

#Ubuntu 安装
apt install -y busybox
#CentOS 安装
wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64 --no-check-certificate mv busybox-x86_64 busybox chmod +x busybox
./busybox

(3)执行命令:

busybox ls
busybox ifconfig
busybox ifconfig |busybox grep lo

(4)如果不使用后面可以卸载:

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

9.2 创建自己私有仓库

(1)创建账号:进入 https://hub.docker.com/,点击注册按钮,输入注册信息

(2)创建仓库:登录后点击仓库,我们创建一个个人仓库

  • 如果提示需要进入,进入自己的邮箱完成激活

  • 我们输入仓库信息,可见信息,点击创建完成

(3)推送镜像到仓库:

  • 拉取 busybox 镜像:
root@139-159-150-152:~# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
1487bff95222: Pull complete
Digest:
sha256:c118f538365369207c12e5794c3cbfb7b042d950af590ae6c287ede74f29b7d4
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:2c8ed5408179ff4f53242a4bdd2706110ce000be239fe37a61be9c52f704c437 size: 528
  • 在我们的 docker hub 仓库里面查看

  • 退出:
docker logout

10. 腾讯云创建自己的私有仓库

(1)创建账号:

  • 进入 https://cloud.tencent.com/,完成注册,可以使用微信快速注册:
  • 登录后进入容器镜像服务:
  • 点击立即选购:

  • 点击左侧的镜像仓库:

(2)创建仓库:

  • 点击新建,我们创建个人的私有仓库,配置对应的参数:

  • 可以看到我们的仓库已经创建成功了:

(3)推送镜像到仓库:

  • 点击快捷指令,可以看到登录和推送的指令,我们首先登录:
root@139-159-150-152:~# docker login ccr.ccs.tencentyun.com --
username=100014125284
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
ccr.ccs.tencentyun.com/maxhou/mybusybox:v0.2
The push refers to repository
[ccr.ccs.tencentyun.com/maxhou/mybusybox]
427701cb9c96: Pushed
v0.2: digest:
sha256:2c8ed5408179ff4f53242a4bdd2706110ce000be239fe37a61be9c52f704c437 size: 528
  • 在腾讯云上查看我们的仓库:

  • 退出:
docker logout ccr.ccs.tencentyun.com

11. 阿里云创建自己的私有仓库

(1)创建账号:

  • 进入阿里云 https://www.aliyun.com/,点击右上角完成注册,可以使用支付宝快速注册:

(2)创建仓库:

  • 在产品上搜索容器镜像服务:

  • 点击管理控制台:

  • 点击创建个人实例:

  • 创建后,提示设置登录密码:

  • 完成登录密码的设置,这个密码就是我们的 docker login 的密码:

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


  • 配置仓库参数:

  • 设置仓库为本地仓库,完成创建:

(3)推送镜像到仓库:

  • 可以看到阿里云也提供了快捷指令:

  • 登录:
root@139-159-150-152:~# docker login --username=houyj1987@163.com
registry.cn-hangzhou.aliyuncs.com
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:~#
  • 给镜像打标签,推送到仓库:
root@139-159-150-152:~# docker tag busybox:latest registry.cnhangzhou.aliyuncs.com/maxhou/busybox:v0.3
root@139-159-150-152:~# docker push registry.cnhangzhou.aliyuncs.com/maxhou/busybox:v0.3
The push refers to repository [registry.cnhangzhou.aliyuncs.com/maxhou/busybox]
427701cb9c96: Pushed
v0.3: digest:
sha256:2c8ed5408179ff4f53242a4bdd2706110ce000be239fe37a61be9c52f70
4c437 size: 528
  • 查看服务器镜像:

  • 退出:
docker logout registry.cn-hangzhou.aliyuncs.com

12. 实战经验总结

(1)我入职了一个公司,开发一个镜像,我怎么选择用哪个作为基础镜像啊?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smile丶凉轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值