2.第一本 docker 书 --- docker 镜像

1.构建 docker 镜像
	先用 docker login 登录到 docker hub 上:

	1.用 docker commit 命令来构建
	  docker ps -l  // 列出最后一个创建的容器
	  docker commit 容器id 作者名/库名:标签名 
	  docker images // 查看,已经有新的

	  docker inspect REPOSITORY // 查看镜像信息

	2.通过 Dockerfile 构建
		1.先创建一个 static_web 的目录来保存 Dockerfile, 这个目录就是我们的构建环境,
		  docker 则称此环境为上下文或者构建的上下文。Docker 会在构建镜像时将构建上下文和该
		  上下文的文件和目录上传到 Docker 守护进程。这样 Docker 守护进程就能直接访问用户想
		  在镜像中存储的任何代码,文件或者其他数据。

		# Version : 0.0.1
		FROM ubuntu:14.04  
		MAINTAINER Wei daodao "[email protected]"
		RUN apt-get update && apt-get install -y nginx
		RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html
		EXPOSE 80

		Dockerfile 由一系列指令和参数构成。每条指令后面跟着一个参数。Dockerfile 中的指令按顺序
	  从上到下执行。
	    每条指令都会创建一个新的镜像层并对镜像进行提交。Docker 大体上按照如下流程执行 Dockerfile 中的指令:
	    	1.Docker 从基础镜像运行一个容器
	    	2.执行一条指令,对容器进行修改
	    	3.执行类似 docker commit 的操作,提交一个新的镜像层
	    	4.Docker 在基于公共提交的镜像运行一个新的容器
	    	5.执行 Dockerfile 中的下一条指令,直到所有的指令执行完毕

	    如果用户的 Dockerfile 由于某些原因失败了,那么用户将得到一个可以使用的镜像。这对调试很有帮助:可以基于
	  该镜像运行一个具备交互式功能的容器,使用最后创建的镜像对为什么用户的指令会失败进行调试。

	    每个 Dockerfile 的第一条指令必须是 FROM. FROM 指令指定一个已经存在的镜像,后续的指令都是基于这个镜像进行,
	  这个镜像被称为基础镜像。
	    指定 MAINTAINER 指令,这条指令会告诉 Docker 该镜像的作者是谁,以及作者的email.
	    RUN 指令会在当前的镜像中运行指定的命令。每条 RUN 指令都会创建一个新的镜像层,如果指令成功,就会将此镜像层提交。
	  之后继续执行 Dockerfile 中的下一条指令。
	    默认情况下, RUN 指令会在 shell 里使用命令包装器 /bin/sh -c 来执行。如果是在一个不支持 shell 的平台上运行或者
	  不希望在 shell 中运行,也可以使用 exec 格式发 RUN 命令。如:
	  RUN ["apt-get", "install", "-y", "nginx"]
	    EXPOSE 命令告诉 docker 该容器内的应用程序将会使用容器的指定端口。这并不意味着可以自动访问任何容器运行中的服务的端口。

	   2.基于 Dockerfile 构建新镜像
	   docker build -t weidaodao/static_web .
	   	-t 设置仓库和名称

	   	如果在构建上下文的根目录存在 .dockerignore 命名的文件的话,那么该文件内容会被按行进行切割,每一行都是一条文件过滤匹配模式。
	  这非常像 .gitignore 文件,该文件用来设置哪些文件不会被当作构建上下文的一部分。

	   3.构建失败了怎么办
	   	基于最后成功步骤创建新容器进行调试:
	   		1.docker run -t -i 容器_id /bin/bash 
	   	    2.运行失败的命令,进行调试
	   	    3.成功后,修改 Dockerfile 文件,再次构建

	   4.Dockerfile 和构建缓存
	   	由于每一步的构建过程都会将结果提交为镜像,所以 Docker 的构建过程就显得非常聪明。它会将之前的镜像层当作缓存。
	   	有时候不需要缓存:
	   		docker build --no-cache

	   	5.基于构建缓存的 Dockerfile 模板
	   		FROM ubuntu:14.04
	   		MAINTAINER Wei daodao "[email protected]"
	   		ENV REFRESHED_AT 2014-07-01  # 设置环境变量, 用来表明该镜像模板最后的更新时间
	   		RUN apt-get -qq update

	   		有了这个模板,如果想刷新一个构建,只需要修改 ENV 指令中的日期。这使 docker 在命中 ENV 指令时开始重置这个缓存,
	   	  并运行后续指令而无需依赖该缓存。

	   	  docker history 镜像名 // 查看镜像如何构建的

构建镜像:

猜你喜欢

转载自blog.csdn.net/enlyhua/article/details/82962846