Docker系列06—基于容器制作镜像并上传到Docker Registry
本文收录在容器技术学习系列文章总目录
1、制作镜像
1.1 镜像的生成途径
- 基于容器制作
- dockerfile,docker build
本篇主要详细讲解基于容器制作镜像;基于dockerfile 制作镜像在后一张文章Docker系列07—Dockerfile 详解中详细介绍;
1.2 基于容器制作
docker commit
(1)格式
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
(2)Options 参数
- -a,作者(例如,“along <along@along.com>”)
- -c,修改Dockerfile指令应用于创建的镜像
- -m,提交消息
- -p,在提交期间暂停容器(默认为true)
(3)示例1:简单的基于容器创建一个新的镜像
① 先运行一个容器
[root@along ~]# docker run --name b1 -it busybox
/ # ls /
bin dev etc home proc root sys tmp usr var
/ # mkdir -p /date/html
/ # echo "<h1>busybox httpd server</h1>" > /date/html/index.html
/ # cat /date/html/index.html
<h1>busybox httpd server</h1>
② 不用退出这个容器,另起终端在b1容器基础上,制作新镜像
[root@along ~]# docker commit -p b1
sha256:3a6523b08bea7eb339ae04cc8a98caabfd46fbd27ccf31409cc3e8a764effdc1
[root@along ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> bf29b97ba38d 7 seconds ago 1.15 MB
③ 给新制作的镜像打标签
[root@along ~]# docker tag bf29b97ba38d along/httpd:v0.1
[root@along ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
along/httpd v0.1 bf29b97ba38d 39 seconds ago 1.15 MB
④ 可以对同一个镜像,再打标签
[root@along ~]# docker tag along/httpd:v0.1 along/httpd:latest
[root@along ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
along/httpd latest bf29b97ba38d About a minute ago 1.15 MB
along/httpd v0.1 bf29b97ba38d About a minute ago 1.15 MB
⑤ 删除同一镜像的标签,只是把这个镜像的标签去掉,只到删除这个镜像的最后一个标签,此镜像才会被删除
[root@along ~]# docker image rmi along/httpd:latest
Untagged: along/httpd:latest
[root@along ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
along/httpd v0.1 bf29b97ba38d About a minute ago 1.15 MB
⑥ 基于新的镜像运行一个容器,验证是否是基于b1创建成功的
[root@along ~]# docker run --name b2 -it along/httpd:v0.1
/ # cat /date/html/index.html
<h1>busybox httpd server</h1>
/ # exit
(4)示例2:基于容器创建新的镜像,并修改执行命令CMD
① 基于容器b1创建新的镜像,并修改命令为执行httpd服务
[root@along ~]# docker commit -a "Along <along@along.com>" -c 'CMD ["/bin/httpd","-f","-h","/date/html"]' -p b1 along/httpd:v0.2
sha256:2291d0e5800e53e120fad58043e97cbf8197f7db2aa1111508603fa3c16982f2
注解:busybox 中httpd 语法
- -f:不运行为守护进程,在前台运行
- -h:指定httpd运行的主目录
② 运行新的镜像v0.2
[root@along ~]# docker run --name b3 -d along/httpd:v0.2
43e8731be7abd34a9b332c84bc622a1ef8707dc94465d3639db194c0b504cc42
③ 验证成功
[root@along ~]# docker inspect b3 |grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3"
[root@along ~]# curl 172.17.0.3
<h1>busybox httpd server</h1>
2、了解Docker Registry
2.1 介绍
- registry 用于保存docker 镜像,包括镜像的层次结构和元数据。
- 启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从registry中下载该镜像并保存到本地;
- 拉取镜像时,如果不知道registry仓库地址,默认从Docker Hub搜索拉取镜像
2.2 分类
- Sponsor Registry:第三方的registry,供客户和docker社区使用;
- mirror Registry:第三方的registry,只让客户使用;如docker cn和阿里云的镜像加速器;
- vendor Registry:服务商的registry,由发布docker镜像的供应商提供的registry;如红帽提供的专有的,收费提供;
- private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry;自建的registry,在本地搭建registry,节省带宽
2.3 registry组成(repository和index)
(1)Repository
- 由特定的docker镜像的所有迭代版本组成的镜像仓库;
- 一个registry中可以存在多个repository:
- repository可分为“顶层仓库”和“用户仓库”
- 用户仓库名称格式为“用户名/仓库名”
- 每个仓库可以包含多个Tag(标签),每个标签对应一个镜像
(2)Index
- 维护用户账户、镜像的校验以及公共命名空间的信息
- 相当于为registry提供了一个完成用户认证等功能的检索接口
2.4 拉取仓库镜像的格式
docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
- registry:仓库服务器地址:不指定默认是docker hub
- port:端口;默认是443,因为是https协议
- namespace:名称空间,指是哪个用户的仓库,如果是顶层仓库,可省
- name:仓库名
- tag:标签名;默认是latest版本
2.5 知名docker仓库
例:docker pull quay.io/coreos/flannel:v0.10.0-amd64
3、将制作的镜像上传到自己的私有registry仓库中
3.1 创建自己的docker registry
(1)可以在docker hub上创建;但注册docker hub需要科学上网;

(2)也可以在阿里云上https://cr.console.aliyun.com/cn-hangzhou/repositories创建自己的docker仓库
① 创建镜像仓库

② 选择创建本地仓库

③ 点击管理,会有操作指南,大家跟着操作即可,这里我就不再演示了

本文用的是docker hub
3.2 登录docker仓库
[root@along ~]# docker login -u alongedu
Password:
Login Succeeded
3.3 将镜像打标签,对应自己的registry
[root@along ~]# docker tag busybox:latest alongedu/httpd:v0.1
3.4 push上传自己的镜像
[root@along ~]# docker push alongedu/httpd:v0.1
The push refers to a repository [docker.io/alongedu/httpd]
23bc2b70b201: Pushed
v0.1: digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe size: 527
3.5 在自己的私有仓库验证

Docker系列06—基于容器制作镜像并上传到Docker Registry的更多相关文章
- Docker之Alpine制作镜像且上传至阿里云
目的: Alpine制作jdk镜像 Alpine制作jre镜像(瘦身) Docker镜像上传至阿里云 Alpine制作jdk镜像 alpine Linux简介 Alpine Linux是一个轻型Lin ...
- docker 学习之路 将docker容器变为镜像并上传
环境 ubunt 16.4 去hub.docker.com上注册一个账号,并在账号中注册一个公有public或者私有仓库private 步骤如下 如上图 点击该处进入创建docker库页面 除了名字之 ...
- Docker:Docker打包Web API成镜像并上传到Docker Hub(2)
Docker官方镜像:https://hub.docker.com/: 本文将把一个webapi制作成docker镜像 一.Docker命令 打开Docker Quickstart,有以下常用的命令 ...
- 构建自定义docker镜像,上传至docker hub
docker 优势 (外部参考) Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后 发布到任何流行的Linux机器上,便可以实现虚拟化.Docker改变了虚拟化的方 式,使 ...
- 如何将docker镜像文件上传至Docker Hub
一.Docker Hub中新建存储库 注册,登录Docker Hub之后,点击右上角Create Repository,创建存储库,如下图所示: 取个名字,我这里取名为lihui_demo.并且可以选 ...
- docker虚拟化之将容器做成镜像
1,docker ps -a 选择要启动的容器. 2,docker start 容器+ID 启动容器 3,docker exec -i -t 容器ID /bin/bash 进入容器 这里的/ ...
- docker教程——docker镜像打包上传
在开始使用URLOS进行docker应用开发之前,我们先来了解一下docker镜像的打包方法.首先,安装URLOS,安装完成之后,docker也随之安装到了主机里.执行以下命令安装URLOS: cur ...
- 【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)
写在前面 最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本 ...
- 如何将docker 镜像上传到docker hub仓库
如何将docker 镜像上传到docker hub仓库 目录 如何将docker 镜像上传到docker hub仓库 背景 1.注册docker hub账号 2.docker hub上创建仓库 3.d ...
随机推荐
- Linux指令集
最近在学习Linux虚拟机,下面是我在学习虚拟机的过程中使用过的一些指令,及其作用. pwd-> 列出当前目录路径 ls-> 列出当前目录列表 cd-> 改变目录 mkdir-> ...
- 打包java程序生成exe
打包java程序生成exe 目标 我们知道c++的控制台程序编译运行以后就会生成一个exe可执行文件,在电脑上可以直接双击运行,但是java是跨平台的语言,编译运行以后的字节码文件.class是和平台 ...
- React(九)create-react-app创建项目 + 按需加载Ant Design
(1)create-react-app如何创建项目我前面第一章介绍过了,这里就不过多写了, (2)我们主要来说说按需加载的问题 1. 引入antd npm install antd --save 2. ...
- 使用Spring Aop自定义注解实现自动记录日志
百度加自己琢磨,以下亲测有效,所以写下来记录,也方便自己回顾浏览加深印象之类,有什么问题可以评论一起解决,不完整之处也请大佬指正,一起进步哈哈(1)首先配置文件: <!-- 声明自动为sprin ...
- Android进阶推荐书籍
中级进阶推荐看一下以下这几本书 1.<Android从入门到精通(附光盘)> 明日科技 编 2.<第一行代码2 Android(第二版)> 郭霖 著 3.<Android ...
- Cheat Engine 6.8 设置中文
下载翻译文件包 https://cheatengine.org/downloads.php 下载后解压到 "Cheat Engine 6.8.3\languages" 下面 修改 ...
- 浅谈微信小程序一二
1.生命周期 1.onLoad():页面加载时触发,一个页面只加载一次. 2.onShow():页面显示切换的时候触发 3.onReady():页面初次渲染完成时触发.一个页面只会调用一次,代表页面已 ...
- [AI开发]Python+Tensorflow打造自己的计算机视觉API服务
"与其停留在概念理论层面,不如动手去实现一个简单demo ." ——鲁迅 没有源码都是耍流氓github 前言 目前提供AI开发相关API接口的公司有很多,国外如微软. ...
- js 格式化数字,格式化金额:
js 格式化数字,格式化金额: function number_format(number, decimals, dec_point, thousands_sep) { /* * 参数说明: * nu ...
- 堆排序应用之topK问题
题目:求海量数据(正整数)按逆序排列的前k个数(topK),因为数据量太大,不能全部存储在内存中,只能一个一个地从磁盘或者网络上读取数据,请设计一个高效的算法来解决这个问题. 第一行用户输入K,代表要 ...