Docker基础教程 - 8 镜像仓库

更好的阅读体验:点这里 ( www.doubibiji.com

8 镜像仓库

在安装 Docker 的时候,默认使用的是 DockerHub,后来为了提升速度,配置的镜像仓库是使用阿里云的镜像仓库,拉取的是别人制作的镜像,下面讲解一下制作我们自己的镜像,并将制作的镜像提交到远程镜像仓库。

8.1 制作镜像

制作镜像的方法主要有两种方式:

  • 使用 docker commit 命令;
  • 使用 Dockerfile 文件。

Dockerfile 后面再讲解,下面先讲解使用 docker commit 命令制作镜像。

首先我们拉取别人的镜像,比如拉取一个 Ubuntu 镜像,但是 Ubuntu 镜像是一个精简版的 Linux 系统,很多东西都是没有的,例如 vim文本编辑器都没有,我们可以使用这个 Ubuntu 镜像来创建容器,然后在容器中安装 vim 文本编辑器(当然自己想要什么就自己安装),这样容器就变成我们自己定制化的了,我们可以将这个容器使用 docker commit 命令保存成我们自己的镜像。后面我们可以使用这个镜像来重新创建 Ubuntu 容器,创建的容器就自带 vim文本编辑器了。

话不多说,开整。

1 拉取镜像并创建Ubuntu容器

拉取镜像、创建容器和之前一样不多说:

# 拉取镜像
docker pull ubuntu

# 创建容器
docker run -it --name my-ubuntu ubuntu

可以看到原始 Ubuntu 镜像容器中没有 vim :

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2 安装需要的程序

在容器中,安装 vim:

# 先更新一下apt
apt update

# 安装vim
apt install vim

3 保存为新镜像

容器修改好了,安装了需要的程序,可以将容器保存为镜像了。

命令:

docker commit -m="提交的描述信息" -a="作者" 容器ID 镜像名:[版本标签]

将 Ubuntu 容器保存为镜像:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 docker images 命令可以看到保存的新镜像。

4 使用新镜像创建容器

下面使用刚才保存的新镜像来创建容器,这样创建的容器就自带 vim 了。

# 使用新的镜像创建容器
docker run -it 新的镜像ID /bin/bash

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到新创建的容器自带vim文本编辑器,我们是就现有的镜像进行拓展,创建了新的镜像,相当于在镜像中又添加了一层。

8.2 上传镜像到阿里云远程仓库

在上面我们制作了我们自己的镜像,如何将这个镜像给其他的同事使用,或者在其他的服务器使用?

可以将镜像上传到镜像仓库,这样别的服务器就可以拉取镜像来使用了。其实和 Git 的原理是一样的。

使用 Git 的时候,我们的代码仓库是 Github 或 Gitee。

同样使用 Docker,我们可以使用 Dockerhub,但是 Dockerhub 是国外的,网络太慢了,上传和拉取都容易失败。所以我们使用阿里云的远程镜像仓库。

1 创建命名空间

在阿里云上创建 Docker 仓库命名空间。

搜索镜像服务

找到镜像服务:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建个人实例

个人版不要钱,企业版要钱。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

设置密码

需要设置密码,按照要求设置即可:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建命名空间

创建一个自己的命名空间,和 gitee 基本是一样的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2 创建镜像仓库

在镜像仓库页面,创建镜像仓库:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

填写仓库信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择本地仓库,并创建:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建完成,显示仓库的使用命令:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在仓库列表页面,点击仓库也可以进到这个页面。

3 上传镜像到仓库

在前面我们使用了 docker commit 制作了我们自己的镜像,现在将这个镜像上传到阿里云的远程仓库。

使用上面将镜像推送到 Registry 中提供的命令:

# 登录
docker login --username=你的用户名 registry.cn-hangzhou.aliyuncs.com

# 给镜像打上标签
docker tag [本地镜像ID] registry.cn-hangzhou.aliyuncs.com/doubibiji/my-ubuntu:[镜像版本号]

# 将镜像推送到远程仓库
docker push registry.cn-hangzhou.aliyuncs.com/doubibiji/my-ubuntu:[镜像版本号]

执行:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

给镜像打完标签会发现本地多了一个镜像,这是为什么呢?

这是因为标签是用来标识镜像的,当给一个已有的镜像打上新的标签时,Docker 会复制该镜像并创建一个新的镜像,带有新的标签。因此,打完标签后,会生成一个新的镜像,推送镜像到远程仓库的时候,就是推送的这个镜像。其实这两个镜像是一样的,ID都一样。


上传后,可以在镜像版本中看到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4 将镜像拉取到本地使用

刚才是将本地的镜像上传到远程仓库,下面我们将远程仓库的镜像拉取到本地进行使用。

因为我们本地已经存在了这个镜像,所以先将本地的镜像删除,然后再从远程仓库拉取镜像。

也是使用上面提供的命令拉取:

docker pull registry.cn-hangzhou.aliyuncs.com/doubibiji/my-ubuntu:[镜像版本号]

拉取镜像

从阿里云仓库拉取镜像:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用镜像创建容器

使用拉取的镜像创建容器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

整个流程演示完成。

8.3 私有仓库Docker Registry

前面我们使用的是阿里云镜像仓库,个人版只能自己用,企业版本是收费的。我们可以使用工具搭建我们自己的镜像仓库。类似于使用 GitLab 搭建私有的 Git 仓库,供公司内部使用。

Docker 官方提供了 Docker Registry 私有镜像仓库工具, Docker Registry 也是一个 Docker 镜像,所以使用起来比较简单。

1 准备要提交的镜像

和前面制作镜像的步骤一样,使用一个 Ubuntu 的镜像创建容器,在容器中安装想要的程序,例如vim,然后使用 docker commit 命令创建容器。

查看一下前面的笔记。

2 下载Docker Registry镜像

没什么好说的,执行命令:

# 下载registry镜像
docker pull registry

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3 运行私有仓库Registry

使用 Docker Registry 镜像运行容器:

docker run -d --privileged=true -p 5000:5000 \
-v /home/doubi/docker/registry:/tmp/registry registry

解释一下:

  • docker run: Docker 的命令来运行一个容器。
  • -d: 以后台模式运行容器。
  • --privileged=true: 以特权模式运行容器,赋予容器几乎所有与宿主机相同的权限。
  • -p 5000:5000: 端口映射设置,将宿主机的 5000 端口映射到容器的 5000 端口。
  • -v /home/doubi/docker/registry/:/tmp/registry: 卷映射设置,将宿主机上的 /home/doubi/docker/registry/ 目录映射到容器内的 /tmp/registry 目录。
  • registry: 要运行的 Docker 镜像的名称,这里是 Docker 官方的 Registry 镜像。

将宿主机上的 /home/doubi/docker/registry/ 目录映射到容器的 /tmp/registry 目录。这样配置后,就可以在宿主机的 /home/doubi/docker/registry/ 目录中存储和推送 Docker 镜像,并通过宿主机的 5000 端口访问这些镜像。

4 查看私有仓库镜像

Docker Registry 容器已经运行了,可以查看仓库中有哪些镜像。

命令:

curl -XGET http://localhost:5000/v2/_catalog

因为 Registry 就是在当前机器上,所以使用 localhost。

不出意外,镜像仓库是空的,因为我们也没有推送镜像到仓库。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5 推送镜像到私有仓库

下面将安装了我们想要的程序的 Ubuntu 镜像,推送到我们的私有镜像仓库。

首先给镜像打上标签

命令:

# 命令
docker tag 本地镜像ID Host:Port/远程仓库名称:[版本tag]

# 例如
docker tag ad0b74b466f7 localhost:5000/myubuntu:1.0

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里注意区分,为了突出不同,这里打标签的时候指定的名称和本地镜像的名称是不同的(一个带 - 一个不带)。

当给一个已有的镜像打上新的标签时,Docker 会复制该镜像并创建一个新的镜像,带有新的标签。待会推送到远程仓库的是新生成的镜像。这两个镜像是一样的,ID都一样。


修改Docker Registry配置

Docker Registry 默认是不支持 http 的推送的,所以需要修改一下 Docker Registry 的配置,取消该限制。

修改 /etc/docker/daemon.json 文件,添加 insecure-registries 配置:

{
  "registry-mirrors": ["https://01e3hiyl.mirror.aliyuncs.com"],
  "insecure-registries":["localhost:5000"]
}

上面的 insecure-registries 配置表示信任这个地址的镜像仓库。

注意:上面的格式是 JSON 格式的,别漏掉第一行后面的逗号 ,

修改完成,如果不生效,重启一下 Docker。

sudo systemctl restart docker

将镜像推送到私有仓库

命令:

# 命令
docker push 镜像名称:[版本tag]

# 例如
docker push localhost:5000/myubuntu:1.0

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6 查看私有仓库镜像

重新查看仓库中有哪些镜像:

命令:

curl -XGET http://localhost:5000/v2/_catalog

可以看到上传的镜像:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7 拉取镜像

镜像已经上传到我们的私有仓库中了,那么如何从私有仓库中拉取镜像呢?

首先将本地的仓库删除,因为我们上传的时候在本地已经存在这个镜像了。

然后从私有仓库中拉取刚才的镜像。

# 从私有仓库拉取镜像
docker pull localhost:5000/myubuntu:1.0

指定私有仓库的地址、端口、镜像,就可以拉取了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


镜像下载完成了,就可以使用这个镜像来运行容器了,上面我们配置的都是 localhost,如果在局域网内共享给大家使用,要配置为自己的 IP 地址,别人拉取的时候,指定 IP 地址即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/442058.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第五十三回 入云龙斗法破高廉 黑旋风下井救柴进-AI训练数据处理和读取

罗真人教了公孙胜五雷天罡正法,并让他记住“逢幽而止,遇汴而环”八个字。三人辞别了罗真人,戴宗先回去报信,李逵和公孙胜结伴而行。 走了三天,来到了武冈镇,李逵碰到一个铁匠,叫金钱豹子汤隆&a…

[Flutter get_cli] 配置 sub_folder:false报错

flutter get_cli 配置 get_cli:sub_folder:false报错如下 Because getx_cli_learn01 depends on get_cli from unknown source "sub_folder", version solving failed. 原因是在 pubspec.yaml文件中, get_cli:sub_folder:false要和 dependencies: xxx dev_depe…

【node版本问题】运行项目报错 PostCSS received undefined instead of CSS string

最近该项目没有做任何修改,今天运行突然跑不起来报错了 PostCSS received undefined instead of CSS string 【原因】突然想起来期间有换过 node 版本为 16.17.1 【解决】将 node 版本换回之前的 14.18.0 就可以了

突然发现一个很炸裂的平台!

平时小孟会开发很多的项目,很多项目不仅开发的功能比较齐全,而且效果比较炸裂。 今天给大家介绍一个我常用的平台,因含低代码平台,开发相当的快。 1,什么是低代码 低代码包括两种,一种低代码,…

正则表达式 || 遇到字符串里面有() 就在括号后面换行

<template><div class"vertical-layout"><header><h1>testPage</h1><p>(1)第一行内容xxxxxxxxx&#xff08;2&#xff09;第二行内容xxxxxxx(3)第三行内容</p></header><main><el-button click"goToO…

IPsec

在FW5和FW3之间建立一条IPSEC通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 最后测试&#xff1a;

xpath和lxml类库

数据提取之xpath 学习目标 了解 html和xml的区别掌握 xpath获取节点属性的方法掌握 xpath获取文本的方法掌握 xpath查找特定节点的方法 1. 为什么要学习xpath和lxml lxml是一款高性能的 Python HTML/XML 解析器&#xff0c;我们可以利用XPath&#xff0c;来快速的定位特定元…

linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; 前言———— Samba 是一个开源软件套件&#xff0c;可为 SMB/CIFS 客户端&#xff08;包括 Windows&#xff09;提供文件…

为什么选择Copilot for Microsoft365而不是Copilot Pro

最近很多小伙伴都用上了copilot&#xff0c;开始感受copilot在生产力工具中发挥的作用与带来的提升。 询问比较多的就是商业企业版的Copilot for Microsoft 365和个人家庭版的Copilot Pro有什么区别&#xff1f; 这篇文章一定会让你在两者之间选择最合适你的那个。 一、价格…

网络安全学习路线,入门到入坟,史上最全网络安全学习路线整理

很多小伙伴在网上搜索网络安全时&#xff0c;会出来网络安全工程师这样一个职位&#xff0c;它的范围很广&#xff0c;只要是与网络安全挂钩的技术人员都算网络安全工程师&#xff0c;一些小伙伴就有疑问了&#xff0c;网络安全现在真的很火吗&#xff1f; 那么寒哥就带大家看…

LCR 164. 破解闯关密码

解题思路&#xff1a; 贪心 class Solution {public String crackPassword(int[] password) {String[] strs new String[password.length];for(int i 0; i < password.length; i)strs[i] String.valueOf(password[i]);Arrays.sort(strs, (x, y) -> (x y).compareTo(…

c++ 哨兵线性搜索

顾名思义&#xff0c;哨兵线性搜索是线性搜索的一种&#xff0c;与传统线性搜索相比&#xff0c;比较次数减少了。在传统的线性搜索中&#xff0c;仅进行N次比较&#xff0c;而在哨兵线性搜索中&#xff0c;哨兵值用于避免任何越界比较&#xff0c;但没有专门针对正在搜索的元素…

第十篇 - 如何利用人工智能技术做好营销流量整形管理?(Traffic Shaping)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市​​​​​​​。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先…

【ElasticSearch】docker下载安装ElasticSearch(详细)

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的ElasticSearch专栏&#xff0c;本篇博客由B战尚硅谷的ElasticSearch视频总结而来&#xff0c;鉴于 看到就是学到、学到就是赚到 精神&#xff0c;这波依然是血赚 ┗|&#xff40;O′|┛ &#x1f306; 内容速览 &#x1f3…

mxxWechatBot微信机器人说明

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 免责声明&#xff1a;该工具仅供学习使用&#xff0c;禁止使用该工具从事违法活动&#xff0c;否则永久拉黑封禁账号&#xff01;&#xff01;&#xff01;本人不对任何工具的使用负责&am…

Unity性能优化篇(七) UI优化注意事项以及使用Sprite Atlas打包精灵图集

UI优化注意事项 1.尽量避免使用IMGUI(OnGUI)来做游戏时的UI&#xff0c;因为IMGUI的开销比较大。 2.如果一个UGUI的控件不需要进行射线检测&#xff0c;则可以取消勾选Raycast Target 3.尽量避免使用完全透明的图片和UI控件。因为即使完全透明&#xff0c;我们看不见它&#xf…

144.乐理基础-根三五音、大三和弦、小三和弦

内容参考于&#xff1a; 三分钟音乐社 上一个内容&#xff1a;143.乐理基础-和弦是什么&#xff1f;和声是什么&#xff1f;三和弦-CSDN博客 必须先看上一个内容&#xff0c;了解什么是和弦、什么是和声&#xff0c;以及三和弦的定义 上一个内容最后写了三和弦的定义&#x…

JimuReport积木报表 v1.7.2 版本发布,低代码报表工具

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

实战|环信 Vue2 uniapp Demo重构焕新!经典再升级!

项目背景 当前环信 uni-app vue2 Demo 地址升级版本 Github 地址&#xff08;临时&#xff09; 原版本功能实现方式较混乱&#xff0c;代码逻辑晦涩难懂&#xff0c;不利于开发者参考或复用。此实战项目在确保原项目功能保留的情况下进行完全重写并新增大量功能&#xff0c;以…

[Electron]中的BrowserView

Electron中BrowserView BrowserView 被用来让 BrowserWindow 嵌入更多的 web 内容。 它就像一个子窗口&#xff0c;除了它的位置是相对于父窗口。 这意味着可以替代webview标签. 示例 const { app, BrowserView, BrowserWindow } require(electron) ​ app.whenReady().the…