热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于Dockerfile的写法

Dockerfile是用来自定义构建镜像的文件。Dockerfile:FROMnginxRUNecho'这是一个本地构建的nginx镜像'usrshareng

Dockerfile是用来自定义构建镜像的文件。

Dockerfile:

FROM nginx

RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html

FEOM : 指定基于哪个镜像进行自定义

RUN : 运行指令, 两种形式

RUN 命令

RUN ["test.php", "dev", "offline"] 等价于 test.php dev offline

docker 在每一行上新建一层,为了避免过多的层,用 && 把一些命令缩成一行

FROM centos

RUN yum install wget

RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"

RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:

FROM centos

RUN yum install wget \

&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \

&& tar -xvf redis.tar.gz

[[email protected] dockerdir]# docker build -t imagetest:test .

Sending build context to Docker daemon 2.048kB

Step 1/2 : FROM nginx

---> 8cf1bfb43ff5

Step 2/2 : RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html

---> Using cache

---> 2611d7938c46

Successfully built 2611d7938c46

Successfully tagged imagetest:test
[[email protected] dockerdir]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

imagetest test 2611d7938c46 2 hours ago 132MB

twilight/nginx ali 378d7ca4a813 3 hours ago 229MB

mysystem tags 1c174e9fbdee 3 hours ago 64.2MB

ubuntu 18.04 2eb2d388e1a2 6 days ago 64.2MB

nginx latest 8cf1bfb43ff5 9 days ago 132MB

training/webapp latest 6fae60ef3446 5 years ago 349MB

[[email protected] dockerdir]#

docker build 会将上下文路径中的所有文件打包发送给引擎,所以上下文路径不能放无用的文件,会造成执行过程的缓慢。


指令

COPY [--chown=:] ["<源路径1>",... "<目标路径>"] : 目的路径不存在会自动创建。路径支持通配符。

ADD 用法与 COPY一致,不同之处在于源文件为 gzip, bzip2, xz格式,会自动解压并复制到目标路径下。

如果目标路径指定的是一个文件,则会覆盖这个文件(即使这个文件已经有内容),不存在就创建新文件

如果目标路径是一个目录,但是这个目录不存在,docker会自动创建目录

CMD ["<可执行文件或命令>","

","

",...] CMD ,用于在容器构建完成后执行的指令

可以写多条CMD,但是只有最后一条会生效

Dockerfile中的CMD命令可以被 docker run -it ubuntu 命令中的命令覆盖。

RUN是运行在build的时期,而CMD运行在 docker run的时期

ENTRYPOINT ["","

","

",...] 或者 ENTRYPOINT 命令 跟CMD的效果差不多,但是它始终会执行,或者被替换

如果有多条 ENTRYPOINT命令,那么只有最后一条会生效

如果定义了 ENTRYPOINT ["nginx", "-c"]那么在 docker run后面的参数会被追加到 nginx -c 的后面

如果 ENTRYPOINT ["nginx", "-c"]CMD [""] 同时使用, CMD中的内容也会被追加到 ENTRYPOINT的后面

通过指定 --entrypoint 命令 参数 来覆盖ENTRYPOINT的内容

ENV 或者 ENV = =: 定义的环境变量可以在build和run的时候以 $var的形式引用

ARG 和 ENV作用一样,但是仅限于在Dockerfile内生效,可以在 docker build --build-arg key=value来覆盖

VOLUME ["<路径1>", "<路径2>"...] 自动挂载数据卷

EXPOSE <端口1> [<端口2>...] 声明端口,方便配置

WORKDIR <工作目录路径> 目录必须已经存在,在构建镜像的每一层中,该目录都会存在。

USER <用户名>[:<用户组>] 切换用户

ONBUILD 本次不会执行,但是如果有新的Dockerfile引用了这个镜像,就会执行ONBUILD指定的命令


参考资料

https://www.runoob.com/docker/docker-dockerfile.html

https://blog.csdn.net/shunfa888/article/details/79373840


关于Dockerfile的写法的相关教程结束。



推荐阅读
  • HelloDocker官方安装教程:https:docs.docker.cominstalllinuxdocker-ceubuntu进去选好对应系统发行版,照着命令复制-粘贴-运行 ... [详细]
  • 1、官方下载jdk8地址:https:www.oracle.comjavatechnologiesjavasejavase-jdk8-downloads.html下载的版本:jdk ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • SpringMVC:是基于spring的一个框架,实际上就是spring的一个模块,专门是做web开发的。理解是servlet的一个升级 ... [详细]
  • Docker系列 七. Docker 安装Jenkins
    Docker系列七.Docker安装JenkinsJenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作 ... [详细]
  • 1找现有的镜像dockerhub上搜索到一个,其在github上公布了镜像构建的dockerfile,并且支持http和svn两种协议,就这个吧。https:github.come ... [详细]
  • springboot2.1版本使用logback日志(自己已经验证)
    https:blog.csdn.netweixin_40593587articledetails86622009版权声明:本文为博主原创文章,遵循CC4 ... [详细]
  • 【CUDA 基础】0.0 腾讯云CUDA环境搭建
    【CUDA 基础】0.0 腾讯云CUDA环境搭建 ... [详细]
  • 我是docker的新手,正在学习 ... [详细]
author-avatar
云淡风轻轻00
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有