如何创建属于你自己的 docker 镜像库
如何创建属于你自己的 docker 镜像库
Aimer1027 发表于2年前
如何创建属于你自己的 docker 镜像库
  • 发表于 2年前
  • 阅读 43
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: 在这篇文章中介绍的是, windows 下如何 pull 官方docker镜像,运行 docker镜像生成容器, 将修改的容器同步到 docker 镜像中,最终将本地 docker 镜像上传到自己的 docker 镜像库中。

出于工作和学习的目的常用虚拟机来搭建部署 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 镜像文件上面移除,


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

标签: docker
共有 人打赏支持
粉丝 0
博文 8
码字总数 7353
×
Aimer1027
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: