当前位置: 首页 > news >正文

DockerFile的基本知识及利用DockerFile构建镜像

1、概念

DockerFile是用来构建Docker镜像的构建文件,是一段命令脚本

2、基础知识

(1)每个保留关键字都必须是大写字母

(2)执行顺序从上往下

(3)#表示注释

(4)每一个指令都会创建提交一个新的镜像层并提交

3、DockerFile指令

FROM       #基础镜像
MAINTAINER #维护者信息(姓名+邮箱)
RUN        #镜像构建的时候需要运行的命令
ADD        #拷贝文件,会自动解压
WORKDIR    #设置镜像的工作目录
VOLUME     #设置卷,挂载主机目录
EXPOSE     #对外暴露的端口
CMD        #指定这个容器启动的时候要运行的命令(CMD一行只执行一个命令,可以写多个CMD)
ENTRYPOINT #指定这个容器启动的时候要运行的命令(可以追加命令)
ONBUILD    #ONBUILD是一个特殊的指令它后面跟的是其它指令,比如 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行
COPY       #类似ADD,将我们的文件拷贝到镜像里
ENv        #构建的时候设置环境变量

4、使用DockerFile构建一个CentOS镜像

(1)新建一个名为mydockerfile的DockerFile

vim mydockerfile

(2)配置mydockerfile文件的脚本命令

#基础镜像
FROM centos:7

#维护者信息(姓名+邮箱)
MAINTAINER ken<邮箱地址>

#设置环境变量,环境变量名为MYPATH的路径为/usr/local,在关键字ENV后通过一个名字对应一个路径来创建环境变量
ENV MYPATH /usr/local

#设置镜像的工作目录
WORKDIR $MYPATH

#镜像构建的时候需要运行的命令(因为基础的centos镜像没用vim命令,但希望自己构建的centos镜像能使用vim命令,所以在RUN后写需要运行的命令)
RUN yum -y install vim

#对外暴露的端口
EXPOSE 80

#指定这个容器启动的时候要运行的命令(CMD一行只执行一个命令,可以写多个CMD)
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash

(3)通过mydockerfile文件构建Docker镜像

#选项及解释
-f表示DockerFile文件的所在路径
-t的t是tag,表示生成的镜像的名称和版本号
.表示当前构建时上下文的路径为当前目录

docker build -f mydockerfile -t mycentos:0.1 .

(4)最后查看构建结果

(5)查看镜像

(6)启动镜像

(7)查看当前目录,发现启动镜像后直接进入了我们在mydockerfile文件里用WORKDIR指令设置的工作目录而不再是根目录

基础的centos镜像:

配置了工作目录的mycentos镜像:

(8)测试我们在用RUN指令下载的vim命令是否能用

基础的centos镜像:

以centos镜像为基础,下载了vim命令的mycentos镜像:

(9)通过以下命令查看镜像的历史构建记录

docker history 镜像id或镜像名称

例: 

 

其他:

1、CMDENTRYPOINT的区别

CMD

(1)新建一个名为mydockerfile-test-cmd的DockerFile,内容如下

FROM centos:7
CMD ["ls","-a"]

(2)通过mydockerfile-test-cmd文件构建Docker镜像

(3) 启动mycentos-test-cmd镜像

(4)往mycentos-test-cmd镜像追加其他命令(在docker run命令行中输入命令会覆盖掉原来的CMD命令)

 

错误的追加命令方式:

ENTRYPOINT

 (1)新建一个名为mydockerfile-test-entrypoint的DockerFile,内容如下

FROM centos:7
ENTRYPOINT ["ls","-a"]

 

(2)通过mydockerfile-test-entrypoint文件构建Docker镜

(3) 启动mycentos-test-entrypoint镜像

(4)往mycentos-test-entrypoint镜像追加其他命令(在docker run命令行中输入命令不容易被覆盖掉原来的ENTRYPOINT命令,且能在原有的ls -a命令后为ENTRYPOINT命令追加参数)

 

相关文章:

  • Spring(二)
  • 计算机毕业设计ssm+vue基本微信小程序的执法助手平台
  • Java项目--网页版音乐播放器(JQuery前端逻辑)
  • windows service 服务器安装 MySQL
  • springboot+mybatis+mysql+Quartz实现任务调度(定时任务,实现可配置)
  • python简介常考面试题目:python是什么,有什么好处,python2和python3的主要区别
  • SpringCloud Stream消息驱动
  • JVisualVM 中线程状态(运行/休眠/等待/驻留/监视)解析
  • 常识——绳结打折法
  • AVL树的特性和模拟实现
  • java剧院售票系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  • SpringBoot-36-分布式理论概述
  • 第一章 Linux及Linux Shell简介
  • http客户端Feign
  • SpringBoot-37-RPC概述
  • ECMAScript入门(七)--Module语法
  • learning koa2.x
  • Making An Indicator With Pure CSS
  • Netty源码解析1-Buffer
  • python 学习笔记 - Queue Pipes,进程间通讯
  • spring-boot List转Page
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 1.Ext JS 建立web开发工程
  • 国内开源镜像站点
  • ​香农与信息论三大定律
  • #define
  • #每天一道面试题# 什么是MySQL的回表查询
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (LeetCode 49)Anagrams
  • (Python第六天)文件处理
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (五)c52学习之旅-静态数码管
  • (一)Dubbo快速入门、介绍、使用
  • (转)linux下的时间函数使用
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)可以带来幸福的一本书
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • *1 计算机基础和操作系统基础及几大协议
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • :O)修改linux硬件时间
  • :如何用SQL脚本保存存储过程返回的结果集
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [AIGC 大数据基础]hive浅谈
  • [Angular] 笔记 20:NgContent
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [CTSC2014]企鹅QQ
  • [HUBUCTF 2022 新生赛]