Docker practice
Docker 实践
目标
创建一个基于最新版Ubuntu的镜像,在该镜像中更新apt包源并安装NTP package,最后将该新镜像提交到本地私有的registry中。
本地创建私有Registry
有N种方法创建私有Registry,这里选择最方(tou)便(lan)的,利用官方Registry镜像来构建。在你需要创建Registry的主机上运行:
docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/tmp/registry -p 5000:5000 registry
制作目标镜像
当然,创建镜像的方法也有N种。用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个。
那么是否可以利用一个container创建镜像呢?答案是可以滴。
具体可以参考创建镜像
创建Dockerfile
最好是创建一个新的空目录,然后在该空目录下创建Dockerfile
# This dockerfile uses the ubuntu image# Version 0.0.1# Author: Andy WUFROM ubuntu:latestMAINTAINER AndyWu zewei@nfs-qd.com# 更新apt包源RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe">>/etc/apt/sources.list# 添加一行文字到文件/andy/testRUN echo "hello world">>/andy/test# 安装NTPRUN apt-get install ntp -y# 将 src 目录拷贝到目标镜像目录/opt/data下ADD src /opt/data
在Dockerfile同一目录下执行镜像创建命令:
docker build -t 10.50.200.248:5000/andy/new_image .
注意,如果是要将镜像上传到私有的Registry中,必须将
repository写全,格式是:registry/user/tag,这样当你push的时候,docker才能正确提交。
但是很不幸,提交时出现 error:
...Step3: RUN echo "hello world">>/andy/test--->Runningin8ae55dfb7dd7/bin/sh:1: cannot create /andy/test:Directory nonexistent
什么问题?为什么能正确更新/etc/apt/souce.list而不能更新/andy/test呢?我明明在刚刚利用Ubuntu镜像创建的容器里新建了这个文件啊?
提示没有/andy/test这个文件,那应该是Ubuntu这个base的镜像不存在这个文件,那么怎么来理解这个 base image 呢?
Base 镜像就是那个最原始,没有经过任何修改,这里的修改通常指的是添加其他package等。
镜像 VS 容器
造成这个错误的另一个根本原因是没有弄清image和container之间的关系。
image是死的,container是活的,我们利用image启动一个container,在container中所做的工作一旦退出,就不存在了
container不可重复,即利用image创建container,不可能创建出与之前一直的container。这可以从container ID看出:
| CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
|---|---|---|---|---|---|---|
| 16616512db82 | 10.50.200.248:5000/andy/new_mage:latest | /bin/bash | About a minute ago | Exited (0) 5 seconds ago | cocky_heisenberg | |
| b759a51351ba | 10.50.200.248:5000/andy/new_mage:latest | /bin/bash | 9 minutes ago | Exited (0) 2 minutes ago | sleepy_mclean |
用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。
当然,你也可以通过docker start 来重新启动一个退出的container。
docker start -i b759a51351ba
没有修改Dockerfile,无论你怎么修改tag,创建的总是同一个image.
上传镜像
docker push 10.50.200.248:5000/andy/new_image
上传之后你可以去Registry查看是否成功:
root@nfs:/opt/data/registry/repositories# tree --charset ASCII.`-- andy|-- new_image| |-- _index_images| |-- json| |-- tag_latest| `-- taglatest_json`-- test|-- _index_images|-- json|-- tag_latest`-- taglatest_json
验证
docker pull 10.50.200.248:5000/andy/new_imagedocker run -it 10.50.200.248:5000/andy/new_image /bin/bashroot@b759a51351ba:/# ntpqntpq>
Bingo!
最后,上图。
Docker practice的更多相关文章
- Docker 使用及常用命令
https://yeasy.gitbooks.io/docker_practice/content/image/dockerfile/expose.html docker practice 资料 -- ...
- Docker 系列之 基础入门
安装 Docker Windows 10 专业版以上版本 Docker for Windows Installer 在安装前,需要确保目标机器已经开启了硬件虚拟化和 HyperV :在安装的过程中建议 ...
- HyperLedger Fabric 资料网址大全
BLOCKCHAIN FOR DEVELOPERS 官方网址 i. 这个网址是ibm给的测试网址,注册进去就可以设置4个节点的区块链,而且有智能合约可以测试 区块链和HyperLedger开源技术讲堂 ...
- Docker Compose practice
Docker Compose 什么是 Docker-Compose? Compose 可以让用户在集群中部署分布式应用.简单的说,Docker Compose 属于一个"应用层"的 ...
- Install Docker on Mac OS X(转)
Install Docker on Mac OS X You can install Docker using Boot2Docker to run docker commands at your c ...
- Docker Resources
Menu Main Resources Books Websites Documents Archives Community Blogs Personal Blogs Videos Related ...
- 【译文】用Spring Cloud和Docker搭建微服务平台
by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...
- Kafka connect in practice(3): distributed mode mysql binlog ->kafka->hive
In the previous post Kafka connect in practice(1): standalone, I have introduced about the basics of ...
- docker 系列 - Java程序制作Docker Image推荐方案(转载)
本文转自 https://segmentfault.com/a/1190000016449865 , 感谢作者! 本文的源代码在:https://github.com/chanjarste... 这 ...
随机推荐
- 【Java】自动获取某表某列的最大ID数
使用场景: 当需要往数据库插入数据时,表的主键需要接着已经有的数据后面进行自增.比如已经wq_customer表里,主键为TBL_ID,如果是空表,那么插入的数据TBL_ID设置为1,如果已经有n条数 ...
- Django基于正则表达式的URL(1)
1. 此时,用户只能看到列表,如果用户想查看详细信息,应该再增加程序. 2. 把信息用a标签包起来以后,详细信息就有了可以跳转的功能. . 3. 点击不同的用户名时,获取到不同的信息. 3.1 在ur ...
- 【题解】CF#713 E-Sonya Partymaker
这题真的想了挺久的,然而到最后也还是没想到怎样处理环的情况……网上竟然也完全没有题解,无奈之下到 CF 的 AC 代码里面去找了一份膜拜了一下.感谢~ 由于觉得这题有一定的难度,自己看代码也看了比较久 ...
- 电子商务(电销)平台中系统设置模块(SysSetting)数据库设计明细
以下是自己在电子商务系统设计中的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 邮件服务器 (sys_smtp_server)|-- 自动编号|-- SMTP服务器地址 (host ...
- 【poj2068】Nim
Portal -->poj2068 Description 给你\(S\)个石子,有\(2n\)个人分成两队,编号为奇数的一队,编号为偶数的一队,\(2n\)个人按照编号从小到大的顺序拿石 ...
- phonegap(cordova)从手机app跳转到web页面在跳转回APP本地页面思路
项目中需要用到 WAP支付宝支付. 但是 使用PHONEGAP开发 跳转到支付宝支付,然后跳转回来 就回不到APP的本地页面, 就是使用WAP的第三方登录也是一样的.很难从WAP页面在跳转到 app本 ...
- Codeforces 480.E Parking Lot
E. Parking Lot time limit per test 3 seconds memory limit per test 256 megabytes input standard inpu ...
- jsp 的 3 个编译指令
JSP 的编译指令是通知 JSP 引擎的消息,它不直接生成输出. 常见的编译指令有如下三个: 1.page:该指令是针对当前页面的指令 2.include:用于指定包含另一个页面 3.taglib:用 ...
- python学习笔记(七) 类和pygame实现打飞机游戏
python中类声明如下: class Student(object): def __init__(self, name, score): self.name = name self.score = ...
- 给上传文件的input控件“美容”
在工作中经常会遇到form表单这种东西.然而表单的其他input控件样式还是很好改变的.但是,唯独input类型是file的文件上传控件可能就没那么好打扮的漂亮. demo: html代码 <b ...