文档章节

如何创建属于你自己的 docker 镜像库

Aimer1027
 Aimer1027
发布于 2015/11/28 22:04
字数 2171
阅读 154
收藏 1

出于工作和学习的目的常用虚拟机来搭建部署 linux 的环境,也经常在于别人合作的时候收到同事发来的虚拟机镜像;

在感受虚拟机带来便利的同时, 也不得不忍受着传输镜像缓慢以及跑多个虚拟机造成主机卡死的尴尬,

更有甚者,还会因为硬件方面的种种原因而造成无法导入导出镜像的窘境。我相信这些问题并不是我一个人遇到过。

而 docker 这个虚拟平台在某种程度上可以很好的弥补虚拟机的一些缺陷,

docker 的工作原理和概念在网上有很多很好的博客都有介绍,在这里就不多介绍了;


说一下个人理解 docker 为虚拟机提供了一个运行的平台,在它的上面你可以使用镜像文件来保存虚拟机,

通过镜像文件来生成容器(可以运行的虚拟机实例) 。

你可以在 docker 上面同时运行多个由一个镜像创建的容器,而这多个容器可以进一步配置创建一个集群 

docker 的工作方式类似于 github , 如果你将虚拟机镜像文件等价于项目,

你可以通过 pull 方式来将项目(虚拟机镜像)下载到本地(本地必须要有 docker 平台才可以),

然后运行 docker 命令将虚拟机镜像文件生成容器对象,通过访问容器对象来修改容器的状态,

并将容器的状态改变这一变化同步(commit)到虚拟机镜像中,

最后,如果这一改变是你希望保留的,那么为了保存该虚拟机镜像,你可以通过 push 的方式将该镜像

上传到你自己的镜像库中进行保存; ---> 这样就无需虚拟机镜像随身携带咯,

如果是创建虚拟机的话,或是保存到移动硬盘中或是上传到云盘中下载传输起来也麻烦

有了 docker , 即便是换了开发环境,只需要安装docker 然后直接将虚拟机镜像从你的 docker 库中 pull

下来生成容器对象,直接就可以运行咯 ~


在这篇博客中,就简单介绍一下,如何从官方 docker 库中pull 下来 centos docker 镜像文件,

运行镜像文件生成容器,修改容器(安装我们需要的软件),将容器变动同步到镜像文件中,

再将本地的 docker 镜像文件同步到网上的镜像库中。

这样一番折腾,docker 的基本使用方法就差不多入门咯~

0. 启动 Boot2DockerStart 来启动 docker ,

   通过 ssh 来远程连接到 docker

   ip : 192.168.59.103

   port: 22

   user-name:docker

   psword:tcuser

1. 从官方 docker 镜像库中 pull 下来 centos 镜像文件,

这个是 ubuntu 官方 docker 镜像的网址


在该链接下可以看到,docker pull ubuntu 命令便是获取官方 centos docker 镜像的命令;

如果对版本有要求的话,可以在后面添加 centos 的版本信息

在这里,我们希望下载ubuntu , 执行命令如下:

docker pull ubuntu:14.04

在这里不得不说一下 docker 的 tag, tag 也就是打标签的意思,可以为一个 docker 镜像文件设置多个 tag


也可以为不同的版本的docker 镜像设置不同的 tag  , 就像连接中展示的一样,

centos7 有多个标签 , lastest , centos7 , 7 都是他的标签

这也就是说

docker pull ubuntu:14.04.3 | ubuntu:14.04 | trusty-20151028 ...

将 ubuntu 的镜像文件拉倒本地来,显示信息如下:

docker@boot2docker:~$ docker pull ubuntu:14.04
Pulling repository ubuntu
docker@boot2docker:~$ docker pull ubuntu:14.04
Pulling repository ubuntu
ca4d7b1b9a51: Download complete 
2332d8973c93: Download complete 
ea358092da77: Download complete 
a467a7c6794f: Download complete

这个过程比较花时间,毕竟下载的是一个镜像,就算它是最小配置的,但是照比普通文件还是要大得多

输入命令 docker images ---> 该命令会将当前 docker 平台上面的所有镜像文件显示出来

镜像名称   标签名称        镜像 ID                       何时创建/下载            镜像文件的大小

ubuntu   latest   ca4d7b1b9a51        2 weeks ago         187.9 M


2. 运行镜像,然后远程访问容器内部,运行之前建议打开一个新的 docker ssh 连接,这样可以获取到运行容器的 id 号码

docker run -it ubuntu:14.04

进入到 ubuntu 镜像生成的容器之后,用户名称会从 docker 编程 root

3. 换另一个 ssh ,输入如下命令来查询docker 容器的 ID 号码

docker ps  


我的是

docker@boot2docker:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f0a9c134bfaa        ubuntu:14.04        "/bin/bash"         8 seconds ago       Up 8 seconds                            compassionate_wright


4. 在容器内部下载需要的软件


    安装 wget (挑个简单的)

apt-get install wget    


5. 将当前容器的状态同步到 ubuntu 镜像文件中(在这里既可以重新起一个镜像文件名称: 如果你不想覆盖原有的镜像的话)

docker commit [容器 ID] [要被覆盖的/新建的镜像名称]
docker commit f0a9c134bfaa aimer_ubuntu_1128 ----> 这个数字串就是上面通过 docker ps 命令查看到的



可以看到这里因为我没有选择覆盖,所以会重新生成一个新的 docker 镜像,

该 docker 镜像的名称可以通过 docker images 命令来查看,输入命令,显示信息如下:

docker@boot2docker:~$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
aimer_ubuntu_1128      latest              c142866b2238        58 seconds ago      194.3 MB


6. 将刚刚创建好的 ubuntu 镜像文件上传到自己的 docker 镜像库中[就像面向对象编程的前提是你必须要有个对象,在这里你要有一个 docker hub 账号]


   6.1 远程登录 docker.hub 网站

        命令如下:

docker@boot2docker:~$ docker login
docker@boot2docker:~$ docker login
Username: aimer
Password: 
Email: aimer1027@hotmail.com
Login Succeeded



        我的登录名称是 aimer , 这个登录名称对应的就是众多镜像库的主路径,我们若想把刚刚创建的镜像文件上传上去,

        那么这个镜像的名称的定义一定要符合

[登录名称]/[自定义的库名称]       


       可以通过为docker 镜像文件重新打标签的方式(类似 linux 下面的软连接)来替代重新创建一个镜像文件并将其按照规范命名

   6.2 停止 docker 的运行

        /如果上传 docker 镜像没有将生成镜像的容器停止,上传会出错,而且出错不会显示

       通过 docker ps 命令来找到该容器 ID

docker@boot2docker:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f0a9c134bfaa        ubuntu:14.04        "/bin/bash"         16 minutes ago      Up 16 minutes                           compassionate_wright



  输入如下命令来停止容器----> Ps: 备份或是创建镜像文件的时候,一定是要是容器运行的时候, 因为容器就是镜像文件动态加载到内存的对象实例; 上传镜像的时候,一定要是容器停止的时候

docker@boot2docker:~$ docker stop f0a9c134bfaa 
f0a9c134bfaa



   6.3 为你本地的 docker 镜像增加合适你远程docker 库的标签

docker tag [镜像原名] [镜像原名:tag 名称]
  
  docker tag aimer_ubuntu_1128 aimer/ub_aimer:1128



  结束之后,可以输入 docker images 来查看一下,虽然 aimer_ubuntu_1128 和 aimer/ub_aimer:1128 的名称不同(tag 也不同,可以选择名称相同,但是 tag 不同的打标签方式),

  但是,这两个名称的镜像文件实质上是同一个; 看 IMAGE ID 就知道咯~

docker@boot2docker:~$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
aimer_ubuntu_1128      latest              c142866b2238        12 minutes ago      194.3 MB
aimer/ub_aimer         1128                c142866b2238        12 minutes ago      194.3 MB


  6.4 将镜像文件上传到你远程的镜像库中

       执行如下的命令, 不像是 github 中先要 commit 在push , 镜像文件在本地的话,直接上传就行了

docker@boot2docker:~$ docker push aimer/ub_aimer:1128
The push refers to a repository [aimer/ub_aimer] (len: 1)
Sending image list
Pushing repository aimer/ub_aimer (1 tags)
2332d8973c93: Pushing



7. 从自己的远程镜像库中将刚刚上传的 docker pull 下来,生成容器在运行 (可选操作)

   现将本地同名标签的镜像文件给删除

docker@boot2docker:~$ docker rmi  aimer/ub_aimer:1128
Untagged: aimer/ub_aimer:1128


  是的,没有错,这个名称其实就是一个标签, 所以删除标签所指向的 docker 镜像的话,本身仅仅是将这个标签从docker 镜像文件上面移除,


  而这个镜像文件本身还是存在于本地的

© 著作权归作者所有

共有 人打赏支持
Aimer1027
粉丝 0
博文 8
码字总数 7353
作品 0
杭州
私信 提问
Rancher及Docker快速上手指南(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问我的博客 https://blog.csdn.net/smooth00/article/details/80649168 ......续接上一篇文章。 六、镜像库及应用 Rancher还有很...

smooth00
06/11
0
0
搜索&运行whalesay镜像

目录 开始使用Docker 在OS X安装Docker 理解镜像(images)和容器(containers) 搜索&运行whalesay镜像 构建你自己的镜像 创建Docker Hub账号(account)&库(repository) 标记(Tag),推送(Push),拉...

暗之幻影
2016/12/10
4
0
Docker初体验

最近的项目中用到了Docker,感觉超级好用。写下这篇文章作为自己学习的一个小结,也作为一篇Docker的入门介绍。 本文由以下内容组成: 什么是Docker Docker基本概念 容器和传统VM的区别 安装...

强哥
2017/11/27
0
0
开始使用Docker

在学习Docker的过程中仔细的阅读了官方的入门教程, 为加深学习的印象, 翻译此教程, 也同时方便他人学习使用. 目录 开始使用Docker 在OS X安装Docker 理解镜像(images)和容器(containers) 搜索...

暗之幻影
2016/12/10
6
0
Docker安装以及镜像、容器的管理操作

Docker简介 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的虚拟化方式。Docker的设计宗旨是通过对应用软件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别“一次封装...

小樱桃Cherry
08/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

https://stackoverflow.com/questions/15423500/nginx-showing-blank-php-pages For reference, I am attaching my location block for catching files with the .php extension: location ~......

Yao--靠自己
13分钟前
1
0
mac 没声音

somehow不时就会出现这种情况。之前都得重启。 其实可以直接在terminal里打以下命令: sudo kextunload /System/Library/Extensions/AppleHDA.kext sudo kextload /System/Library/Extension...

dubox
29分钟前
1
0
看完让你彻底搞懂Websocket原理

作者:Ovear 链接:https://www.zhihu.com/question/20215561/answer/40316953 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 额。。最高票答案没答到点...

时刻在奔跑
44分钟前
1
0
Spring Cloud Stream消费失败后的处理策略(一):自动重试

之前写了几篇关于Spring Cloud Stream使用中的常见问题,比如: 如何处理消息重复消费 如何消费自己生产的消息 下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式。不过不论...

程序猿DD
46分钟前
0
0
《Maven官方文档》-Maven依赖机制简介

《Maven官方文档》-Maven依赖机制简介 原文地址 译者:Tyrian 依赖机制是Maven最为用户熟知的特性之一,同时也是Maven所擅长的领域之一。单个项目的依赖管理并不难, 但是当你面对包含数百个...

tantexian
54分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部