如何创建自己的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,一个是分片,最后一个是合并代码 <! ...
随机推荐
- mySQL CRUD操作(数据库的增删改查)
一.数据库操作 1.创建数据库 create database 数据库名称 2.删除数据库 drop database 数据库名称 二.表操作 1.创建表 create table 表名 ( ...
- (进阶篇)浅谈COOKIE和SESSION关系和区别
COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 coo ...
- c# ICSharpCode.SharpZipLib.Zip实现文件的压缩
首先了解ZipOutPutStream和ZipEntry对象 ZipOutPutStream对象 如果要完成一个文件或文件夹的压缩,则要使用ZipOutputStream类.ZipOutputStre ...
- mysql 关联删除
参考网址:http://www.111cn.net/database/mysql/51146.htm 原网页广告太多,自己抄了下. 1.delete from t1 where 条件2.delete ...
- c#部分---一维数组、冒泡排序、foreach的用法
一维数组:2016-10-14 定义方式:{定义的时候,需要数据类型.长度!} 1.int []aa=new int [5]; 表示数组里面有5个字符: 2.int []aa=new int []{ ...
- Apache的虚拟主机配置
使用虚拟主机要先取消中心主机,注释掉DocumentRoot #DocumentRoot "/www/htdoc" 虚拟主机的单独配置: 用户认证 访问日志 错误日志 别名 脚本别 ...
- Hive 复习
hive分为CLI(command line)(用的比较多) JDBC/ODBC-ThriftServer hiveServer(hive -service hiveserver),JDBC访问,一个 ...
- POJ 1966 Cable TV Network(顶点连通度的求解)
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- 织梦DedeCMS"当前位置"去除最后一个 > 符号的方法
首先找到根目录下面的include 目录,然后找到 typelink.class.php 文件, 再查找到 GetPositionLink 方法 下面的 return $this->valueP ...
- Java——各种日期的获取(来自别人分享)
import java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; i ...