文档章节

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

dkpenl
 dkpenl
发布于 2017/08/31 14:04
字数 1667
阅读 33
收藏 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学习五   镜像2----镜像的上传、载入、载出和移除

在前面几节里,我们从docker的官方仓库获取了镜像,也可以从国内的仓库,比如网易、阿里的仓库里下载镜像,当然一个公司或个人也可以创建私有的仓库。当我们创建或修改了镜像后,也可以把这些...

dkpenl
2017/10/26
0
0
Docker学习笔记四 镜像

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

一万
2016/07/09
144
0
Docker 从入门到放弃(三)镜像使用

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

tinywan1227
2017/12/05
0
0
docker 学习笔记(一)Docker的介绍与安装使用

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

flyfish225
05/13
0
0
docker 镜像制作及dockerfile

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

攀岩人生
2017/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nginx防盗链、访问控制、Nginx解析PHP相关配置、Nginx代理

Nginx防盗链 在配置文件里写入以下内容: 用curl测试 访问控制 Nginx限制某些IP不能访问或者只允许某些IP访问。 配置文件写入如下内容: allow 表示允许访问的IP,deny限制访问的IP。 匹配正...

黄昏残影
10分钟前
0
0
自己动手实现RPC服务调用框架

转载 TCP的RPC 引言 本文利用java自带的socket编程实现了一个简单的rpc调用框架,由两个工程组成分别名为battercake-provider(服务提供者)、battercake-consumer(服务调用者)。 设计思路...

雨中漫步的鱼
13分钟前
0
0
Centos6.x安装之后的9件事

Centos6.x安装之后的9件事 这些不是必须都做的,只不过是我个人的习惯,在此记录一下。 1.修改yum源到国内 CentOS系统更换软件安装源 备份你的原镜像文件,以免出错后可以恢复。 mv /etc/yu...

叶云轩
18分钟前
5
0
springboot2 使用jsp NoHandlerFoundException

开发图片上传功能,为验证测试功能是否正常,使用JSP编写表单提交进行测试 开发完成后,请求API提示如下异常: No mapping found for HTTP request with URI [/WEB-INF/jsp/avatar_upload.j...

showlike
24分钟前
0
0
springboot踩坑记--springboot正常启动但访问404

一 spring boot的启动类不能直接放在main(src.java.main)这个包下面,把它放在有包的里面就可以了。 二 正常启动了,但是我写了一个controller ,用的@RestController 注解去配置的controlle...

onedotdot
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部