Docker学习之创建镜像

更新镜像

基于已有的基础镜像运行的容器实例,对其进行修改,然后commit成新的镜像
docker commit -a "hardy9sap@163.com # Author" -m "Comment message" 容器名称orID itany/nginx:v1.0
说明:
	-a -m 都是可选的
	itany/nginx:v1.0 中的itany/ 可选,表示命名空间;:v1.0 可选,表示版本tag
	整体itany/nginx:v1.0 都是可选的,那么默认镜像名字以及标签都为<none>

构建镜像

基于Dockerfile,对已有镜像进行修改,然后build成新的镜像
Dockerfile是一个包含创建镜像所需的所有指令的文本文件
docker build -f Dockerfile -t itany/nginx:v2.0 .
说明:
	-f 指定Dockerfile路径,默认就是当前路径下的Dockerfile
	-t 指定新镜像名称和版本
	.  表示上下文,一般就是.表示当前路径

Docker镜像为什么那么大?

因为镜像是包含了所有了运行该软件的所有环境,
所以那么大。
每一层镜像只会在本地保留一份。
再拉取一个镜像的时候,如果所需的镜像层已经在本地有了,
就不需要再拉取一遍。

Dockfile指令

	规则:
		1. 全部指令以大写字母书写
		2. 以FROM指令开头
		3. 从上往下执行
		4. # 表示注释
		5. 每执行一条命令,就增加一层镜像层
		
	常用指令:
		FROM               			指定基础镜像
			FROM itany/nginx:v2.0
		ENV							定义环境变量
			ENV	MYPATH /usr/local   
		RUN 						运行一条指令
			RUN yum install -y vim 
			使用 && 来执行多条
			RUN mkdir -p /usr/src/things \
			&& curl -SL http://example.com/big.tar.xz \
			| tar -xJC /usr/src/things \
			&& make -C /usr/src/things all
		CMD							在镜像生成容器时指定的命令(也就是run命令)
			CMD ["/bin/bash"]       # CMD指令虽然可以有多个,但是以最后一个CMD指令为准
			CMD ["/bin/ls", "/"]    # 可以为主命令指定参数
			                        # CMD指令会被run时指定的命令覆盖掉
		VOLUME						指定挂载目录,(实现资源共享,数据持久化)
									只能指定镜像中的目录,
									无法指定宿主机的目录,宿主机的目录是自动生成的,可通过容器元信息获得
			VOLUMN ["/data1", "/data2"]
		WORKDIR						指定当登录容器后,进入的工作目录,
		                            不指定,默认为/目录
			WORKDIR $MYPATH
		MAINTAINER					维护者(作者)
			MAINTAINER hardy9sap@163.com
		ENTRYPOINT					与CMD类似,
                                    # ENTRYPOINT指令也可以有多个,也是以最后一个指令为准
                                    # 可以为主命令指定参数
                                    # ENTRYPOINT指令不会覆盖run时指定的命令,而是会当作ENTRYPOINT指令的参数,组成新的指令
                                    # 就理解为拼接在了一起
				关于执行指令:
				如果最后一条指令不是/bin/bash的话
				指定你指定的命令后,容器退出,
				之后再怎么重启容器都不会生效。
				只能删除,再次启动并且指定/bin/bash(当然ENTRYPOINT会把它当做参数,所以要留意一点)
		EXPOSE						# 暴露端口
		    # EXPOSE命令只是声明了容器应该打开的端口并没有实际上将它打开!
			# 如果你不用-p或者-P(随机选主机的一个端口进行映射)中指定要映射的端口,你的容器是不会映射端口出去的,
			EXPOSE 8080 8090
		COPY						# 拷贝主机文件到镜像中,(不能拷贝目录,如果指定目录则是把目录中的所有内容拷贝过去)
			COPY <src> <dst>
			COPY file.txt /usr/local
			COPY和ADD所拷贝的文件必须跟Dockerfile保持在同一目录下
			(因为build时,默认指定的上下文就是当前目录,也就是我们写的那个.)
			(当然你可以改变上下文,例如:/etc/local)
			可以使用通配符* 和 ?
			
		ADD							# 拷贝主机文件到镜像中,(不能拷贝目录,如果指定目录则是把目录中的所有内容拷贝过去)
		                            # 如果是压缩文件直接解压
			ADD <src> <dst>
			ADD nginx.tar.gz /usr/local/nginx

发布镜像到阿里云开发者平台

五、发布镜像到阿里云开发者平台
	Step1: https://homenew.console.aliyun.com/
	
	Step2: 创建命名空间
	
	Step3: 创建镜像仓库
			摘要:仓库的摘要
			描述:镜像的描述
			
	Step4: 管理 --> 操作指南
		将镜像推送到Registry
		# 登录阿里云Docker Registry
			docker login --username=空灵飘渺之旅sap registry.cn-shenzhen.aliyuncs.com
			             --password=密码(太复杂的密码不适用)
						 -u
						 -p
		# 创建指定镜像的tag,归入某个仓库
			docker tag [ImageID] registry.cn-shenzhen.aliyuncs.com/hardy9sap/studyrepos:[镜像版本号]
		# 推送
			docker push registry.cn-shenzhen.aliyuncs.com/hardy9sap/studyrepos:[镜像版本号]
			
		    选择合适的镜像仓库地址
			从ECS推送镜像时,可以选择使用镜像仓库内网地址。
			推送速度将得到提升并且将不会损耗您的公网流量。

			如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-shenzhen.aliyuncs.com 作为Registry的域名登录,并作为镜像命名空间前缀。
			公网地址 
			registry.cn-shenzhen.aliyuncs.com/hardy9sap/studyrepos

			专有网络 
			registry-vpc.cn-shenzhen.aliyuncs.com/hardy9sap/studyrepos

			经典网络 
			registry-internal.cn-shenzhen.aliyuncs.com/hardy9sap/studyrepos
		
		#从Registry拉取镜像
			docker pull registry.cn-shenzhen.aliyuncs.com/hardy9sap/studyrepos:[镜像版本号]
			
		# 退出登录
			docker logout [registry.cn-shenzhen.aliyuncs.com/]  # 不指定默认登出DockerHub
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值