热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

docker学习-构建镜像

对于docker用户来说,最好的情况是不需要自己创建镜像,几乎所有的常用的数据库、中间件、应用软件等都有现成的docker官方镜像或其他人和组织创建

对于docker用户来说,最好的情况是不需要自己创建镜像,几乎所有的常用的数据库、中间件、应用软件等都有现成的docker官方镜像或其他人和组织创建的镜像,我们只需要稍微配置就可以直接使用。
但是在某些情况下,也需要自己构建镜像。
比如:
1、找不到现成的镜像,比如自己开发应用程序
2、需要在镜像中加入特定的功能。
docker提供了两种构建镜像的方法:docker commit命令和Dockerfile构建文件。

docker commit

docker commit命令式创建镜像最直观的方法,其过程包含3个步骤
1、运行容器
2、修改容器
3、将容器保存为新的镜像
比如: 在Ubuntu base镜像中安装vi并保存为新镜像
(1)运行容器
docker学习-构建镜像
-it 参数的作用式以交互的模式进入容器,并打开终端。
2b1763cc8299就是容器内部的ID
(2)安装vim
确认vim没有安装
docker学习-构建镜像
安装vim,如下所示:
docker学习-构建镜像
(3)保存为新镜像
在新窗口中查看当前运行的容器
docker学习-构建镜像
distracter_chaum是Docker为我们的容器随机分配的名字
执行docker commit命令将容器保存为镜像
docker学习-构建镜像
新镜像命名为ubuntu-with-vim
查看新镜像的属性,如下所示:
docker学习-构建镜像
可以看到新镜像因为安装了vim软件而变大了
从新镜像启动容器,验证vim已经可以使用
docker学习-构建镜像

虽然我们可以使用docker commit创建新镜像,但是docker不建议用户使用这种方式构建镜像。原因如下:
1、该方式是手工创建镜像的方式了,容易出错,效率低可重复性弱
2、无法对镜像进行审计,存在安全隐患

Dockerfile

Dockerfile是一个文本文件,记录了镜像构建的所有步骤

第一个Dockerfile

新建一个文本文件Dockerfile,内容如下:
docker学习-构建镜像
以下为运行docker build命令构建镜像并详细分析细节

[root@docker-1 ~]# docker build -t ubuntu-with-vim-dockerfile .    (1)
Sending build context to Docker daemon  13.31kB                        (2)
Step 1/2 : FROM ubuntu                                                                  (3)
 ---> a2a15febcdf3
Step 2/2 : RUN apt-get update && apt-get install -y vim                   (4)
 ---> Running in ad7fa94cfb94                                                           (5)
Successfully built ad7fa94cfb94                                                         (6)
Successfully tagged ubuntu-with-vim-dockerfile:latest                              (7)

说明:
1、运行docker build命令,-t将新镜像命名为ubuntu-with-vim-dockerfile 命令末尾的.指明build context为当前目录。Docker默认会从build context中查找Dockerfile文件,
也可以通过-f参数指定Dockerfile文件的位置
2、镜像构造过程。首先Docker将build context中的文件发送给Docker daemon,bulid context为镜像构建提供所需要的文件或目标。Dockerfile中的ADD,COPY命令可以将build context中的文件添加到镜像,此例中,bulid context为当前目录.root,该目录下的所有文件和子目录都会被发送给Docker daemon。注意不要将多余文件放到bulid context,特别不要把/,/usr作为bulid context,否则构建过程中会相当的缓慢甚至失败
3、Step1,执行FROM,将Ubuntu作为base镜像,镜像ID为a2a15febcdf3
4、Step2,执行RUN,安装vim
5、启动临时容器,在容器中通过apt-get安装vim
6、安装完成后,将容器保存为镜像,其ID为ad7fa94cfb94
该步骤底层使用类似docker commit的命令
7、镜像构建成功

通过docker images查看镜像信息

docker学习-构建镜像


推荐阅读
  • HelloDocker官方安装教程:https:docs.docker.cominstalllinuxdocker-ceubuntu进去选好对应系统发行版,照着命令复制-粘贴-运行 ... [详细]
  • 注:该文作者jpetazzo,该文章的原文为MultipleDockercontainersloggingtoasinglesyslog这里有一个简单方法展示了怎样在一个容器中运行 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 如何解决《将用户添加到Docker容器》经验,为你挑选了4个好方法。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • qt学习(六)数据库注册用户的实现方法
    本文介绍了在qt学习中实现数据库注册用户的方法,包括登录按钮按下后出现注册页面、账号可用性判断、密码格式判断、邮箱格式判断等步骤。具体实现过程包括UI设计、数据库的创建和各个模块调用数据内容。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • DockerfileDocker是软件工业上的集装箱技术。通过以下文件制作Docker镜像[root@Optimusdocker-training]#cdcentos7[root@ ... [详细]
author-avatar
手机用户2602933165
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有