ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Dockerfile编写学习

2021-11-04 11:32:05  阅读:146  来源: 互联网

标签:容器 CMD 学习 镜像 编写 Docker Dockerfile docker


一、Dockerfile简介

随着容器技术的普及,编写正确的dockerfile文件成为了一项基本技能,今天简要说一下dockerfile中的一些学习笔记

在现阶段,我们将DockerfileDocker镜像和Docker容器看待为软件的三个不同阶段。

Dockerfile面向开发--->Docker镜像成为交付标准--->Docker容器则涉及部署与运维

  • Dockerfile中定义了进程所需要的一切东西,以前需要依赖的环境变量、依赖包、运行时环境等都被写入到Dockerfile文件中啦。比起之前你在Liunx服务器中,下载那么那么多软件,配置那么那么多,真的是简单蛮多,起码对于我这个菜鸡来说用Docker部署真的简单了蛮多的。

  • Docker镜像是在用Dockerfile定义了一个文件后,docker build 时产生的一个Docker镜像,当运行时Docker镜像时,才会真正开始提供服务。

  • Docker容器就是运行起来即可提供服务的。

二、Dockerfile保留字指令

1、FROM

基础镜像,即当前新镜像是基于哪个镜像创建的。

#基于openjdk:8 创建镜像
FROM openjdk:8

2、MAINTAINER

镜像维护者的姓名和邮箱地址

MAINTAINER 宁在春<crush@163.com>

3、RUN

容器构建时需要运行的指令

RUN mkdir -p /conf/my.cn

4、EXPOSE

当前容器对外暴露的端口

#暴露出MyCat的所需端口
EXPOSE 8066 9066

5、WORKDIR

指定在创建容器后,终端默认登录的进来工作目录

#容器数据卷,用于数据保存和持久化工作
WORKDIR /usr/local/mycat

6、ENV

用来在构建镜像过程中设置环境变量

#用来在构建镜像过程中设置环境变量ENV MYCAT_HOME=/usr/local/mycat

这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量。

如:

RUN $MYCAT_HOME/mycat

7、ADD 和 COPY

ADD

将宿主机目录下的文件拷贝进镜像,并且ADD命令会自动处理URL和解压tar压缩包

ADD centos-6-docker.tar.xz / 

COPY

类似ADD,拷贝文件和目录到镜像中。

将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

COPY src destCOPY ["src" "dest"]

8、VOLUME

容器数据卷,用于数据持久化和数据保存。

#将mycat的配置文件的地址暴露出映射地址,启动时直接映射宿主机的文件夹VOLUME /usr/local/mycat

9、CMD 和 ENTRYPOINT

CMD

CMD的指令和RUN相似,也是两种格式:

  • shell格式:CMD<命令>
  • exec 格式:CMD ["可执行文件“,”参数1“,”参数2“.....]

Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换。

ENTRYPOINT

指定一个容器启动时要运行的命令。

ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。

区别

在这里先简单说明一下区别,你可以将CMD理解为覆盖

CMD cat /conf/my.cnfCMD /bin/bash

这两条指令都写在Dockerfile文件中,只会执行CMD /bin/bash ,而不会执行CMD cat /conf/my.cnf,因为CMD /bin/bash把上一条直接覆盖掉了。

ENTRYPOINT则不同,你可以将ENTRYPOINT简单理解为追加。

主要体现在docker run 上,如果使用dockerfile文件中最后是CMD结尾,则在运行时不能够额外追加命令,否则会覆盖掉Dockerfile中的CMD命令。

Dockerfile文件中最后一行为ENTRYPOINT结尾时,你可以在docker run 命令后追加一些命令.

10、ONBUILD

当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后,父镜像的onbuild被触发。

三、Dockerfile执行流程分析:

  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行类似docker commit的操作提交一个新的镜像层。
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成

标签:容器,CMD,学习,镜像,编写,Docker,Dockerfile,docker
来源: https://blog.csdn.net/Yuantao1998/article/details/121138824

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有