最近在学习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的历史记录

最新文章

  1. DFD
  2. google gflags使用.
  3. easy ui 表单元素input控件后面加说明(红色)
  4. ASP.NET笔记之 ListView 与 DropDownList的使用(解决杨中科视频中的问题)
  5. css两句话搞定漂亮表格样式
  6. ORA-04092: COMMIT 不能在触发器中
  7. .Net程序员学用Oracle系列(1):导航目录
  8. 原生JS-----论数据类型检测
  9. STM8程序在IAR中报错 unable to allocate space for sections
  10. Erlang/OTP设计原则(文档翻译)
  11. Hadoop namenode节点无法启动的问题解决
  12. day4 字符串的操作
  13. c++11 function_typetraits备忘
  14. ES6的let和const的不同点
  15. BF算法和KMP算法 python实现
  16. 2019.3.12考试&2019.3.13考试&ESTR
  17. error: expected unqualified-id extern "C" {
  18. 【Spring Boot&& Spring Cloud系列】单点登录SSO之OAuth2官方开发文档翻译
  19. Game2048
  20. vc6.0 PK vs2010

热门文章

  1. Core WebApi项目快速入门(二):Filter详解
  2. 使用arm-none-eabi-gdb报错error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
  3. Docker学习—Machine
  4. 斯福赛特:中了.Devos勒索病毒。所有文件被加密了,如何解密解决?
  5. 基于云开发 CloudBase 搭建在线视频会议应用教程
  6. 对pipe downstream的思考&分析
  7. tcp 保活定时器分析 & Fin_WAIT_2 定时器
  8. 消失的两个数字(1-N缺两个数)
  9. Go语言内存分配(详述 转)
  10. python之路《五》字符串的操作