DokcerFile的添加及如何生成一个自定义镜像mycentos(四)
最近在学习Docker,用commit去生成一个镜像,但是生成后的镜像非常臃肿,所以去学习了一下DockerFile。
前提条件:
已在虚拟机中成功安装Docker
简单的理解可以如下图所示:
DockerFile文件:类似原材料
Docker镜像:组装原材料后,形成交付品
Docker容器:运行状态

1、什么叫DockerFile
DockerFile:就是一系列脚本,用命令和参数构成的,主要作用就是用来构建Docker镜像的文件。
2、怎么去写DockerFile(DockerFile文件编写的步骤)
怎么去写DockerFile,也就是DockerFile文件形成的步骤,主要有3个步骤:编写DockerFile文件、Docker build执行获取镜像、Docker run运行生成容器,最后可以通过Docker history去查看历史执行镜像。
Dockerfile的大致执行流程:
2.1 docker从基础镜像运行一个容器(在虚拟机中,在hub官网上拉一个centos)
2.2 执行指令并对容器做出修改
2.3 执行类似docker commit的操作提交一个新的镜像层
2.4 Docker在基于刚提交的镜像运行一个新容器
2.5 执行dockerfile中的下一条指令直到所有指令都执行完成
DockerFile文件执行步骤命令:
1 编写Dockerfile文件
2 构建docker image:Docker build -t 新镜像名:TAG . //注意最后一个点与TAG之间有个空格
3 运行docker 生成容器:docker run -it 新镜像ID //通过docker images找到镜像ID
4 列出镜像的变更历史:docker history 新镜像ID
DockerFile文件执行步骤命令
3、DockerFile的文件解析
打开官网 https://hub.docker.com/ ,在官网上搜索centos,随意点开一个,查看DockFile。

如下图,Dockerfile文件解析:
3.1 保留字全部大写+参数 //保留字有FROM、MAINTAINER、COPY、ADD、RUN、ONBUILD、WORKDIR、USER、CMD、ENV、EXPOSE、VOLUME、ENTRYPOINT等待。
3.2 从上到下,顺序执行
3.3 #表注释
3.4 每条指令都会创建一个 新的镜像层,并对镜像进行提交

4、实战-定制需求生成一个自定义镜像
Base镜像(scratch):docker hub中的镜像都是通过在base镜像中安装;自定义镜像中安装和配置需要的软件构建出来的。
4.1 自定义镜像需求为:目前从官网上pull下来的centos都是精简版,不支持vim,不支持ifconfig,所以自定义的镜像mycentos满足如下3个条件
a 登陆后默认路径修改为:/usr/local (未修改前在根目录下/)
b 可以使用vim 编辑器
c 可以查看网络配置ifconfig支持
4.2 打开虚拟机centos7终端,执行docker images出现错误:【Failed to restart dock.service: Unit not found.】,执行如下代码:
1 systemctl unmask docker.service
2 systemctl unmask docker.socket
3 systemctl start docker.service
开始Docker服务
4.3 在虚拟机centos中,打开终端,首先创建目录文件Dockerfile/DockerFile文件并且配置Dockerfile文件,代码如下:
1 cd /
2 mkdir /mydocker/
3 touch Dockerfile.txt
4 vi Dockerfile.txt
根目录下创建Dockerfile.txt,且进入到当前文件
打开对应的Dockerfile.txt文件后,编写定义需求,代码如下:
1 From centos
2 ENV mypath /usr/local //配置环境变量,默认路径变更为:/usr/local,以前是根目录
3 WORKDIR $mypath
4 RUN yum -y install vim //安装vim
5 RUN yum -y install net-tools //安装net-tools
6 EXPOSE 80
7 CMD /bin/bash
自定义Dockerfile配置文件
4.4 构建dockerfile文件生成镜像,代码如下:
docker build -f /mydocker/Dockerfile.txt -t mycentos:1.3 .
构建dockerfile文件生成镜像
4.5 生成镜像后,运行生成容器,代码如下:
docker run -it mycentos:1.3
生成镜像后,运行生成容器
4.6 查看镜像的历史记录,代码如下:
1 docker images //找到对应的image id(镜像ID)
2 docker history a5688da747d7 //查看docker历史记录
查看docker image的历史记录
DokcerFile的添加及如何生成一个自定义镜像mycentos(四)的更多相关文章
- 自定义镜像mycentos
1.编写 1).Hub默认CentOS镜像是什么情况 2).编写Dockerfile文件 2.构建 3.运行
- node-gyp 在此解决方案中一次生成一个项目。若要启用并行生成,请添加“/m”开关。
在此解决方案中一次生成一个项目.若要启用并行生成,请添加“/m”开关. MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”.要解决此问题, ...
- JAVA代码:生成一个集合,自定义大小,100以内的随机整数
JAVA代码:生成一个集合,自定义大小,100以内的随机整数 方法一:(Random类) package com.dawa.test; import java.util.ArrayList; impo ...
- cordova3.X 运用grunt生成plugin自定义插件骨架
Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头.麦克风等.Cordova还提供了一组统一的JavaScript类库,以及为这些 ...
- Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 (主要是NSLayoutConstraint 的使用)
当前位置: > Swift新手入门 > Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 时间:2014-09-10 16:49来源:未知 作者:啊成 举报 点击:5 ...
- 如何发布一个自定义Node.js模块到NPM(详细步骤)
咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...
- 如何发布一个自定义Node.js模块到NPM(详细步骤,附Git使用方法)
咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...
- 如何创建一个自定义的`ErrorHandlerMiddleware`方法
在本文中,我将讲解如何通过自定义ExceptionHandlerMiddleware,以便在中间件管道中发生错误时创建自定义响应,而不是提供一个"重新执行"管道的路径. 作者:依乐 ...
- 怎么在java中创建一个自定义的collector
目录 简介 Collector介绍 自定义Collector 总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream的c ...
随机推荐
- CentOS 8.x 下尝试安装.Net 5 的运行时
1.背景 看着不管是群里还是公众号里这几天最热闹就是.Net 5.0 正式版的发布.C#9. 当然要开发.net 5.0 的项目就需要把VisualStudio升级的v16.8.0版本了.升级后自带着 ...
- null列的值不参与比较
假如数据库有表emp: empno name age 001 lucy 22 002 lily null 003 lilei nu ...
- MySQL全面瓦解10:分组查询和聚合函数
概述 相信我们经常会遇到这样的场景:想要了解双十一天猫购买化妆品的人员中平均消费额度是多少(这可能有利于对商品价格区间的定位):或者不同年龄段的化妆品消费占比是多少(这可能有助于对商品备货量的预估). ...
- 关于“Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.”
Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the c ...
- Socket 连接错误及原因
ECONNABORTED 该错误被描述为"software caused connection abort",即"软件引起的连接中止".原因在于当服务和客户 ...
- 关于backfill参数建议
前言 在做一个比较满的集群的扩容的时候,遇到了一些问题,在这里做下总结,一般来说很难遇到,扩容要趁早,不然出的问题都是稀奇古怪的一些问题 建议 环境一般来说在70%左右就需要考虑扩容了,这个时候的扩容 ...
- ubuntu12.10安装sun java jdk
add-apt-repository ppa:webupd8team/java apt-get update apt-get install oracle-java6-installer root@k ...
- css子选择器 :frist-child :nth-child(n) :nth-of-type(n) ::select选择器
记录一下前一段时间使用.学习的几种选择器. 1. :frist-child 选择器n 比如<ul><li></li> <li></li> & ...
- 7、Spring Boot检索
1.ElasticSearch简介 Elasticsearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resha ...
- 【建议收藏】一份阿里大牛花了三天整理出来的XML学习笔记,写的非常详细
1. 什么是XML? XML 指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很类似 HTMLXML 的设计宗旨是传输数据,而非显示数据XML 标签没有 ...