docker笔记(五)

构建自己的Docker镜像

  • Create a new image from a container’s changes

  • 根据一个容器的修改创建一个新的image

    	docker container commit
    	简写方式 : docker commit
    	Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    
    • Demo
      	docker pull centos								// 拉取一个centos latest版本的image
      	docker run -it centos							// 创建一个centos的container并交互运行
      	yum install -y vim								// 给该container安装vim
      	exit											// 退出该container
      	docker ps -a									// 查看该container的NAME
      	docker commit romantic_saha brannua/centos-vim	// 根据该container的NAME romantic_saha 创建一个名为brannua/centos-vim的image
      	docker images									// 查看新创建的image
      
    • 对比centos latest版本镜像和brannua/centos-vim镜像的分层情况如下
      • Usage : docker history [OPTIONS] IMAGE
      	docker images						// 查看当前所有镜像的镜像ID
      	docker history 470671670cac			// 查看centos latest版本的分层情况
      	docker history 68ad6fa2113a			// 查看brannua/centos-vim的分层情况
      
      • 可以发现brannua/centos-vim比centos latest多了一层,这一层就是用来安装vim
      • 但是这种根据一个自己修改过的container,commit出来的image,对于他人来说并不安全,所以并不提倡这种创建image的方式

推荐如下创建image的方式

  • Build an image from a Dockerfile

  • 根据 Dockerfile 去 build 出一个image

  • 首先我创建了一个空目录

	mkdir docker-centos-vim
  • 然后进入该目录创建一个Dockerfile
	cd docker-centos-vim
	vim Dockerfile
  • 写入Dockerfile代码如下,并保存退出
	FROM centos
	RUN yum install -y vim
  • 但是这里有个问题,base image只读,但需要运行命令在centos上安装vim,如何办到?
  • 基于当前目录的Dockerfile,build出一个新的image
	docker build -t brannua/centos-vim-new .
  • 输出如下
	Sending build context to Docker daemon  2.048kB
	Step 1/2 : FROM centos
	 ---> 470671670cac									// 输出IMAGE ID,表明直接引用centos这一层( layer )作为base image
	Step 2/2 : RUN yum install -y vim
	 ---> Running in 7f25d1acd9c8						// 输出CONTAINER ID,表明基于base image生成新一层image,并创建运行一个临时的container,用来安装vim
	 
	 // 此处省略 N 行输出.............................................................................

	Complete!
	Removing intermediate container 7f25d1acd9c8		// 正在remove临时的container
	 ---> 1fc685c0d5de									// 输出IMAGE ID,表明基于修改过的临时的container,commit出了一个新的image
	Successfully built 1fc685c0d5de
	Successfully tagged brannua/centos-vim-new:latest
  • 上面那个疑问迎刃而解,centos image作为base image被直接引用,基于base image创建运行了一个临时的container,用来安装vim,参考docker笔记(四),vim安装成功后,用这个临时container,commit出了一个新的image,这个新的image就比原来多出了安装vim的一层,然后remove掉了临时container,最后给这个创建出的全新image打上了tag。整个过程和docker笔记(二)中的image模式图十分吻合。

  • Dockerfile相比于image,体积小很多,方便分享

  • 他人只需要获取到这个Dockerfile,就可以build出一个完全一样的image

  • 他人也可以根据Dockerfile的代码,十分清楚地看出这能build出一个什么样的image,方便且安全。

发布了75 篇原创文章 · 获赞 32 · 访问量 4426

猜你喜欢

转载自blog.csdn.net/Brannua/article/details/105290806