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

Docker之路(7.DockerFile文件编写、DockerFile 指令解释、CMD与ENTRYPOINT的区别)

1.DockerFile介绍

dockerfile 是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

  1. 编写一个dockerfile文件
  2. docker build构建成为一个镜像
  3. docker run 运行镜像
  4. docker push发布镜像(DockerHub、阿里云镜像仓库)

2.DockerFile构建过程

2.1 DockerFile基础

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

  2. 执行从上到下顺序执行

  3. #表示注释

  4. 每一个指令都会创建一个新的镜像层,并提交!
    在这里插入图片描述

  5. dockerfile 是面向开发的,我们以后要发布姓项目,做镜像,就需要编写dockerfile文件!

2.2 步骤

  1. DockerFile: 构建文件,定义了一切的步骤,源代码
  2. DockerImages: 通过DockerFile 构建生成的镜像,最终发布和运行的产品!
  3. Docker容器:容器就是镜像运行起来提供服务器

3.DockerFile的指令

FROM 基础镜像, 一切从这里开始构建

MAINTAINER 镜像是谁写的,姓名+邮箱

RUN 镜像构建的时侯需要运行的命令

ADD 步骤:比如mysql的镜像,这个mysql压缩包!添加内容

WORKDIR 镜像的工作目录

VOLUME 挂载的目录

EXPOSE 保留端口配罝

CMD 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代

ENTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令

ONBUILD 当构建一个被跳承 DockerFile 这个时候就会运行 ONBUILD 的指令。触发指令。

COPY 类似ADD,将我们文件拷贝到镜像中

ENV 构建的时候设買环境变量!

  • 例如构建一个自己的centos
FROM centos:7
MAINTAINER tongweiwei<2290581805@qq.com>ENV MYPATH /user/local
WORKDIR $MYPATHRUN yum -y install vim
RUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash

4. 构建命令

docker build -f dockerfile文件路径 -t 镜像名称:[tag] .docker build -f mydockerfile-centos -t mycentos:0.1 .

在这里插入图片描述
在这里插入图片描述

5.查看镜像的构建历史

docker history 容器id

在这里插入图片描述

6. CMD 和 ENTRYPOINT 区别

4.1 CMD的一个测试,

  1. 首先构建一个简单的 CMD 的Dockerfile的镜像
FROM centos:7
CMD ["ls", "-a"]
  1. 构建镜像
# 容器名称就叫做cmdtest
docker build -f dockerfile-cmd-test -t cmdtest .
  1. 运行镜像,就会发现,会执行我们的 CMD指令中的内容,即把当前的目录展示出来
docker run 容器id

在这里插入图片描述

  1. 但是我们想要在 run 的时候,后面加命令就会报错,例如我run的时候加一个
    -l,就会报错, 结合CMD中的命令,则会执行该命令,-l
docker run 容器id -l

报错

docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.

CMD的指令下,-l 替换了 CMD [“ls”, “-a”]命令,-l不是命令所以会报错!

4.2 ENTRYPOINT 的一个测试

  1. 首先构建一个简单的 ENTRYPOINT 的Dockerfile的镜像
FROM centos:7
ENTRYPOINT ["ls", "-a"]
  1. 构建镜像
# 容器名称就叫做 entrypoint-test
docker build -f dockerfile-cmd-entrypoint -t entrypoint-test .

在这里插入图片描述
在这里插入图片描述

  1. 运行镜像,就会发现,会执行我们的 ENTRYPOINT 指令中的内容,即把当前的目录展示出来,到这块是和CMD是没有区别的
docker run 容器id

在这里插入图片描述

  1. 但是我们想要在 run 的时候,后面加命令,例如和上面一样 也加一个 -l
docker run 容器id -l

在这里插入图片描述

如上图所示,ENTRYPOINT 时候不是把 run后面加的命令替换掉dockerfile里面的,而是,
将run 后面加的命令,拼接到后面,相当于 ls -al

http://www.lryc.cn/news/24595.html

相关文章:

  • [软件测试]如何使用Eclipse导入项目并打开
  • emplace_back与push_back异同
  • 【C语言航路】第十五站:程序环境和预处理
  • Vue3 - 获取 Proxy 对象代理中包裹的 “真实数据“,解决对象或数组打印后是 Proxy 对象无法拿到原始数据的问题(提供 2 种详细解决方案)
  • ESP32设备驱动-ML8511紫外线传感器驱动
  • SC12B触摸感应芯片评测方案(1)
  • 企业如何实现精细化人员管理?五大业务场景值得关注
  • C/C++每日一练(20230301)
  • Vue项目中components组件的使用笔记
  • 2023软件测试行情不行了?
  • 【java web篇】数据库连接池Driud的使用
  • 无损音乐格式:FLAC和ALAC
  • 第十届蓝桥杯省赛——4质数(质数判断,数学函数:开方函数)
  • MASKGROUP: HIERARCHICAL POINT GROUPING AND MASKING FOR 3D INSTANCE SEGMENTATION
  • 为什么地图可视化炙手可热?
  • JAVA代码审计篇-SQL注入
  • SpringBoot接口传参方式
  • 高通平台开发系列讲解(Sensor篇)AlsPs的工作原理及介绍
  • 集群方式下的java Redis锁 lua脚本
  • 【钓鱼实测】写bug给new bing和chatGPT查。问他们林黛玉倒拔垂杨柳
  • 基于OMAPL138+FPGA核心板多核软件开发组件MCSDK开发入门(上)
  • C#/.net程序调用python
  • 一文讲清楚如何进行主数据编码
  • SAP 详解ST02
  • Go程序当父进程被kill,子进程也自动退出的问题记录
  • window10 下使用docmer-compose使用mysql镜像部署mysql
  • 软件测试补充
  • 【算法】Tire字符串
  • 【C++】STL——list的模拟实现
  • SpringBoot小区物业管理系统