如何创建自己的docker image并上传到DockerHub上
这里,记录一下比较常用的docker操作细节,对于初次使用者,可能有很大的帮助。
docker作为云计算Paas层面的东西,风靡全世界了,主要是因为它小巧,好用,功能强大。今天主要介绍一下如何依据自己的dockerfile创建image,并将自己的image共享到DockerHub上。方便团队在需要的时候取用。
这里主要是demo,所以,Dockerfile也很简单:
- #this is my demo dockerfile
- FROM ubuntu:14.10
- MAINTAINER xxxxx@yyyy.com
- ADD script.sh /usr/script/
- ENTRYPOINT ["/usr/script/script.sh"]
- CMD ["This is a test dockfile out"]
这里的script.sh的内容如下:
- #!/bin/bash
- echo "There are $# parameters provided!"
- for i in $@
- do
- echo $i
- done
这里,需要注意一点的是,第一行的命令,必须是FROM,比如,将FROM命令放在第二行了,在执行docker build的时候,会报下面的错误:
- [root@CloudGame myimage]# docker build -t shihuc/hello:v1 .
- Sending build context to Docker daemon 3.072 kB
- Sending build context to Docker daemon
- Step : MAINTAINER xxxx@yyyy.com
- Please provide a source image with `from` prior to commit
接着看正常的Dockerfile的build的过程:
- [root@CloudGame myimage]# docker build -t shihuc/demo:v1 .
- Sending build context to Docker daemon 3.072 kB
- Sending build context to Docker daemon
- Step : FROM ubuntu:14.10
- 14.10: Pulling from ubuntu
- 6d370c930acc: Already exists
- 9a63f1e91c4c: Already exists
- 74364530838d: Already exists
- dce38fb57986: Already exists
- ubuntu:14.10: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
- Digest: sha256:6341c688b4b0b82ec735389b3c97df8cf2831b8cb8bd1856779130a86574ac5c
- Status: Downloaded newer image for ubuntu:14.10
- ---> dce38fb57986
- Step : MAINTAINER xxxx@yyyy.com
- ---> Using cache
- ---> d77b1889ec2b
- Step : ADD script.sh /usr/script/
- ---> Using cache
- ---> 2d927db27a62
- Step : ENTRYPOINT /usr/script/script.sh
- ---> Using cache
- ---> 2d0fea5aca3c
- Step : CMD This is a test dockfile out
- ---> Using cache
- ---> 54b2b27ac4ef
- Successfully built 54b2b27ac4ef
现在docker image demo:v1已经创建好了。这个时候就可以共享出去了,共享到DockerHub上去。首先需要有一个DockerHub的帐号,当然,这里,我申请了一个Public的repo,免费的,和GitHub类似,public的免费,private的要钱哟。网址为https://hub.docker.com/
申请好了帐号后,就可以登录了:
- [root@CloudGame myimage]# docker login
- Username: shihuc
- Password:
- Email: xxxx@yyyy.com
- WARNING: login credentials saved in /root/.docker/config.json
- Login Succeeded
- [root@CloudGame myimage]#
现在,我就将这个docker image demo:v1上传到DockerHub上去:
- [root@CloudGame myimage]# docker push shihuc/demo:v1
- The push refers to a repository [shihuc/demo] (len: )
- 54b2b27ac4ef: Image already exists
- 2d0fea5aca3c: Image already exists
- 2d927db27a62: Image successfully pushed
- d77b1889ec2b: Image already exists
- dce38fb57986: Image already exists
- 74364530838d: Image successfully pushed
- 9a63f1e91c4c: Image successfully pushed
- Digest: sha256:593286981f39efb3e7caa52020645f3f5b2a38f45a8d3ffaa1b4079b5f508a2e
这里有两点要注意哟
1. 必须是在命令行下登录了DockerHub后才能作push操作。这个很容易理解,否则push不知道往那push,这个和git push有点不同,git push到GitHub时,通常是走SSH,这个时候要在github设置Public key,本地会默认用当前用户.ssh下的私钥。而DockerHub是通过用户名密码和邮箱地址来确认用户身份的。
2. 上面push操作的指令中,红色部分,shihuc表示DockerHub上的用户名,demo是repo的名字,v1表示tag号。若在创建docker image的时候,-t选项不是shihuc/demo:v1,而是demo:v1,那么即使用shihuc用户名登录了DockerHub,最后也无法push的,会遇到下面的错误:
- [root@CloudGame myimage]# docker push demo:v1
- You cannot push a "root" repository. Please rename your repository to <user>/<repo> (ex: shihuc/demo)
而此时,你若根据提示,采用docker push shihuc/demo:v1提交,则会遇到下面的错误:
- [root@CloudGame myimage]# docker push shihuc/demo:v1
- The push refers to a repository [shihuc/demo] (len: )
- Repository does not exist: shihuc/demo
好了,最后看看我们创建的image运行的如何吧,首先默认运行,不加任何参数(结合上面的脚本,分析一下,就可以知道答案是正确的,注意CMD指令后的参数是在一个引号内哟):
- [root@CloudGame myimage]# docker run shihuc/demo:v1
- There are parameters provided!
- This
- is
- a
- test
- dockfile
- out
再来看看,添加参数的运行结果:
- [root@CloudGame myimage]# docker run shihuc/demo:v1 hello docker
- There are parameters provided!
- hello
- docker
这个例子,说明自己创建的image运行一切正常。也可以看出CMD的参数可以被命令行替换,而ENTRYPOINT的参数是不能被替换的。
如何创建自己的docker image并上传到DockerHub上的更多相关文章
- django之创建第10-1个项目-图片上传并记录上传时间
1.百度云盘:django之创建第10-1个项目-图片上传并记录上传时间 2.主要修改的配置文件有3个,forms.views和models3个文件以及html 3.forms.py文件修改 #cod ...
- java web图片上传和文件上传
图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定要写属性enctype=" ...
- 文件上传利器JQuery上传插件Uploadify
在做日常项目中,经常在后台需要上传图片等资源文件,之前使用过几次这个组件,感觉非常好用 ,但是每次使用的时候都是需要经过一番查阅,所以还不如记住在这里,以后使用的时候就翻翻. 他的官方网站如下:htt ...
- Struts2 单个文件上传/多文件上传
1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...
- 如何通过TortoiseGit(小乌龟)把本地项目上传到github上
1.第一步: 安装git for windows(链接:https://gitforwindows.org/)一路next就好了, 如果遇到什么问题可以参考我另外一篇文章~^ - ^ 2.第二步:安装 ...
- 将项目Demo上传到Github上的操作步骤
之前我有很多代码直接上传到了CSDN上,主要是因为操作方便,今天我就说说将源码Demo上传到Github上的操作步骤. 首先,你要先确定自己在Github上有自己的账户名,账户邮箱和密码.如果没有可以 ...
- Windows下如何将一个文件夹通过Git上传到GitHub上(转)
在通过windows系统的电脑上写代码,需要将项目上传到GitHub上去.比如在Pycharm上写Django后端,整个项目是一个文件夹的形式,那么怎么才能这个文件夹通过Git命令上传到GitHub上 ...
- idea git 把本地项目上传到github上
创建一个项目,在项目文件夹下执行以下命令 第二种方法: 先在idea上创建一个项目 注意以上只是在本地建立了本地仓库,代码都放在本地仓库. 现在上传到github上 到此才上传成功
- 百度Web Uploader组件实现文件上传之分片上传(一)
当网络问题导致传输错误时,只需要重传出错分片,而不是整个文件.另外分片传输能够更加实时的跟踪上传进度.多的不说了直接怼代码 前端是三个监听:一个是获取md5,一个是分片,最后一个是合并代码 <! ...
随机推荐
- PowerShell让系统可以执行.ps1文件
.ps1文件是PowerShell写好的脚本文件.在Windows系统中,默认情况下是不允许执行.ps1文件的,那么怎么才能让系统允许执行.ps1文件呢? 什么是“.ps1”文件? 这个是PowerS ...
- LeetCode First Bad Version (二分查找)
题意: 有一个bool序列表示对应下标的版本是否出问题(下标从1开始),如果一个版本出了问题,那么其后面全部版本必定出问题.现在给出判断任意版本是否出问题的API,请找到第一个出问题的版本. 思路: ...
- 简明python教程 --C++程序员的视角(八):标准库
os模块 这个模块包含普遍的操作系统功能. 如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.一个例子就是使用os.sep可以取代操作系统特定的路径分割符. os.system() 执行li ...
- 纯JavaScrip图表插件——Highcharts
简介 Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.目前H ...
- Sobel边缘检测算法(转载)
转载请注明出处: http://blog.csdn.net/tianhai110 索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰 ...
- iPhone4@iOS7Beta4,第一时间刷上,失望,看来苹果是铁了心往扁平化UI走了。看好我的614,保存好SHSH准备
1 今天早上看到新闻,iOS7Beta4放出了,于是赶紧,在家下载,网速很快.(要是在公司,那50K的速度,估计会疯的) 2 等了一会儿一直在提示准备安装,不等了,再等该迟到了. 3 路上实在忍不住, ...
- ZOJ 1048 Financial Management
原题链接 题目大意:给出12个月的收入,求一个平均值. 解法:没什么好说的,就是一个除法. 参考代码: #include<stdio.h> int main(){ int i; float ...
- Angular 通过 $http.post 写入本地 JSON 文件
最近在练习使用 Angular,在实现 $http 对本地 JSON 文档读写的时候遇到了问题. 问题 使用 GET 方法成功将 JSON 文档的内容读出来:但是在使用 POST 插入本地 JSON ...
- 单页web应用(SPA)的简单介绍
单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用.它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML.J ...
- C#部分---类、异常保护;
一:需要初始化的:随机数类.时间值类 随机数类:初始化 实例化//不允许将初始化的语句放置在循环中//Random ran = new Random(); 时间值类:/初始化 实例化//DateTim ...