文档章节

docker学习四 镜像1----镜像的创建

dkpenl
 dkpenl
发布于 2017/08/31 14:04
字数 1667
阅读 29
收藏 0
点赞 0
评论 0

       在上一节,我们从docker的官方仓库(这样的仓库有很多,比如国内的网易、阿里)获取了一个镜像,这一节我们主要聊聊镜的创建、导入导出、移除镜像。因为这个系列的文章主要偏重于docker入门及基本使用,所以,docker镜像的原理及工作机制就不在这里序述了(关键是我也不懂),有兴趣的朋友可以在度娘里找一找docker镜像原理这类的文章,这里看到过一篇文章给大家推荐一下:http://www.csdn.net/article/2015-08-21/2825511

<a href='http://www.csdn.net/article/2015-08-21/2825511'>深入分析Docker镜像原理</a>

一、创建docker镜像

          docker镜像的制作可以通过三种方法:修改已有镜像、使用Dockerfile文件、本地文件系统导入。

          1、通过修改已有镜像创建新镜像

          修改已有镜像这是最简单的方式,在别人已制作好的镜像的基础上,定制自己的需求然后形成新的镜像。比如:我们可以从仓库下载一个只含有最基础centos系统的镜像,然后安装jdk、mysql、tomcat这样就让自己拥有了一个具有java web运行环境的新镜像。为了简单点,我们这里只安装vim工具(linux下的一个文本编辑工具)为例。

          首先,我们先使用docker images命令查看一下我们已拥有的镜像:

           

        这里我们有两个镜像,一个是hub.c.163.com/library/tomcat镜像,别一个是docker.io/ubuntu镜像,我们基于ubuntu镜像启动一个容器:

          

         我们通过docker run -it docker.io/ubuntu:12.04 /bin/bash 命令以终端交互式的方式启动了一个容器(请记住这个容器的ID:823333f46325一会儿会用到),下面我们可以直接输入命令,在这个容器中安装vim工具:

         

         我们在输入apt-get install vim命令时有可能无法安装,我们需要先更新一下使用:apt-get update命令升一下级。然后,我们再安装vim工具:

        

       点击“y”,完成vim的安装。

        现在,我们使用exit来退出,此时我们的容器已经被我们改变了(安装了vim),接着我们使用docker commit 命令来提交更新后的副本。(可以想象是往版本控制系统里提交变更:首先创建一个容器,并在容器里做修改,就行修改代码一样,最后在将修改提交为一个新镜像。)输入以下命令:

        docker commit -m='a new image'-a='user1' 823333f46325 docker.io/ubuntu:12.05

        其中,  -m 来指定提交的说明信息,跟我们使用的版本控制工具一样;    -a   可以指定更新的用户信息;之后是用来创建镜像的容器的ID,最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID信息,之后,我们再通过docker images命令可以看到,我们本机会多处一个12.05版本的镜像:

      总结一下,通过docer run启动一个容器,然后在这个容器中完全成自己的修改后(如安装了一个软件 ),我们再通过docker commit命令提交一个新的镜像,这样就创建了一个新镜,非常简单。

      2、利用Dockerfile来创建镜像

       使用 docker  commit来扩展一个镜像比较简单,但是如果想定制化程序更高,更方便灵活的定制自己的镜像,那么使用dockerfile来创建镜像是一个不错的办法。

       dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。docker程序将这些Dockerfile指令翻译真正的linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取Dockerfile,根据指令生成定制的image。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是怎么产生的。有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。

       首先,新建一个目录和dockerfile:

       $    mkdir    dockertest
       $    cd    dockertest
       $    touch    Dockerfile

        $    vi    Dockerfile

         编辑Dockerfile文件,内容如下:

         #    This    is    a    comment
          FROM docker.io/ubuntu:12.04        
          MAINTAINER    test user   
          RUN    apt-get    -qq    update
          RUN    apt-get    -qqy    install    vim

          上面的命令解释如下:

           FROM  指令告诉    Docker    使用哪个镜像作为基础 

           MAINTAINER    用来指定镜像创建者信息

           RUN     可以运行任何被基础image支持的命令。如基础image选择了ubuntu,那么软件管理部分只能使用ubuntu的命令。 

           编写完成Dockerfile后可以使用docker    build来生成镜像。

           

            其中  -t 标记来添加    tag,指定新的镜像的用户信息。    “.”    是    Dockerfile    所在的路径(当前目录)替换为一个具体的Dockerfile 的路径。

           可以看到    build    进程在执行操作。它要做的第一件事情就是上传这个    Dockerfile    内容,因为所有的操作都要依据    Dockerfile    来进行。    然后,Dockfile    中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交修改(就跟之前介绍过的        docker    commit        一样)。当所有的指令都执行完毕之后,返回了最终的镜像    id。所有的中间步骤所产生的容器都被删除和清理了。

         此外,还可以利用   ADD  命令复制本地文件到镜像;用   EXPOSE 命令来向外部开放端口;用   CMD  命令来描述容器启动后运行的程序等,更多的内容请大家自行查找这里不在一一介绍了。

      3、从本地文件系统导入

          可以使用 docker import 从容器快照文件中再导入为镜像,例如:       

          udo    cat    ubuntu-14.04-x86_64-minimal.tar.gz        |docker    import    -    ubuntu:14.04

          此外,也可以通过指定 URL 或者某个目录来导入,例如:

           $sudo docker import http://example.com/exampleimage.tgz example/imagerepo

           

         总结一下,docker镜像的创建都比较简单,可以直接修改原有镜像形成新镜像(docker commit),也可以使用dockerfile文件(docker build)构建,最后还能从本地或远程导入(docker import)。

         下一节,我们讲一下镜像的上传、载入载出以及移除镜像。

 

   

© 著作权归作者所有

共有 人打赏支持
dkpenl
粉丝 1
博文 11
码字总数 9873
作品 0
成都
程序员
Docker学习笔记四 镜像

4.1 Docker镜像介绍 Docker镜像是由文件系统叠加而成。最底端是一个引导文件系统(bootfs),Docker用户几乎不会和引导文件系统有交互,当容器启动后它会被卸载而移动到内存中。 第二层是roo...

一万 ⋅ 2016/07/09 ⋅ 0

Docker 从入门到放弃(三)镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。 下面我们来学习: 1、管理和使用本地 Docker 主机镜像 2、创...

tinywan1227 ⋅ 2017/12/05 ⋅ 0

docker 学习笔记(一)Docker的介绍与安装使用

Docker的介绍与安装使用 标签(空格分隔): docker的部分 一: docker 的介绍 1.1 docker是什么 供接口。Shim:只负责管理一个容器。runC:是一个轻量级的工具,只用来运行容器。 命名空间,...

flyfish225 ⋅ 05/13 ⋅ 0

docker 镜像制作及dockerfile

一.docker images 的内容,包括: 使用和管理本地主机上的 images 创建一个基础的 images 上传 images 到docker hub (公共 images 仓库) 列出本地主机上已经存在的 images 二.docker im...

攀岩人生 ⋅ 2017/05/23 ⋅ 0

Docker学习笔记(二):容器

概述:通过Docker构建、运行和发布镜像 (一)新的开发环境: 在过去的应用开发方式中,我们要同时配置开发环境和生产环境。而使用Docker,我们只需要获得一个运行环境的镜像,应用的代码、依...

u013637262 ⋅ 05/10 ⋅ 0

Docker 入门实践

欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张戈 导语:应用场景从创建、上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法。通过Docker快速拉起一...

⋅ 2017/12/18 ⋅ 0

开始使用Docker

在学习Docker的过程中仔细的阅读了官方的入门教程, 为加深学习的印象, 翻译此教程, 也同时方便他人学习使用. 目录 开始使用Docker 在OS X安装Docker 理解镜像(images)和容器(containers) 搜索...

暗之幻影 ⋅ 2016/12/10 ⋅ 0

docker 四.使用docker镜像.

四.Docker镜像的使用 一.Docker 安装 1.1 查看系统版本 [root@node1 ~]# cat /etc/redhat-release CentOS release 6.6 (Final) 1.2 使用epel yum源 [root@node1~]#rpm -ivh http://mirror......

786376668 ⋅ 2015/04/27 ⋅ 0

Docker 学习笔记合集第一季 —— image container 基本操作

Docker 学习笔记合集第一季 —— image container 基本操作 Docker · chenhengjie123 · 于 1 年前发布 · 最后由 sanlengjingvv 于 1 年前回复 · 2262 次阅读 本帖已被设为精华帖! 学习 ...

小祁1124 ⋅ 2016/11/17 ⋅ 0

Docker大行其道—镜像

Docker运行一个容器实例之前,可以以一个镜像为基础环境,如以一个包含centos操作系统的Docker镜像为模板。建立容器之前,Docker会检查本地是否存在对应的镜像,如果镜像不存在本地,Docker会...

linuxprobe ⋅ 2016/07/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 37分钟前 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部