Dockerfile构建镜像

几乎所有的image都是通过Dockerfile生成出来的,使用Dockerfile可以让我们很轻松的构建出一个镜像,我们如果需要部署自己的程序常常也可会Dockerfile把代码和环境构建成一个image进行使用

附上:

喵了个咪的博客:w-blog.cn

官方Git地址:https://github.com/moby/moby

1.DockerFile介绍

以hub.docker中的项目来说,一般作者都会存放这个image对应的Dockerfile,我们也可以直接使用Dockerfile来生成自己的nginx镜像

2.编译自己的nginx

Dockerfile可以基于任何镜像的技术上搭建环境,可以基于别人做好的镜像比如Nginx,也可以基于基础镜像比如centos等,这里基于nginx镜像构建出本地的nginx:local并且运行镜像不在启动nginx只是输出一条nginx

> vim Dockerfile
FROM nginx:1.13.12
CMD ["echo", "nginx"]

> docker build -t nginx:local .
> docker images
REPOSITORY                                                          TAG                 IMAGE ID            CREATED             SIZE
nginx                                                               local               6ea964efbbc8        10 seconds ago      109 MB

> docker run -it nginx:local
> docker run -it nginx:local
nginx

3.Dockerfile 语法

使用以下的语法可以实现各种各样的镜像

  • FROM:指定父镜像,可以通过添加多个FROM,在同一个Dockerfile中创建多个镜像
  • MAINTAINER:维护者信息,可选
  • RUN:用来修改镜像的命令,可以用来安装程序,当一条RUN完成后,会在当前的镜像上创建一个新的镜像层,接下来的指令会在新的镜像层上执行。有2种形式。
    • RUN [“apt-get”, “update”],调用exec
    • RUN apt-get update,调用的/bin/sh
  • EXPOSE:用来指明容器内进程对外开放的端口。在docker run的时候可以加-p(可以将EXPOSE中没列出的端口设置为对外开放)和-P(EXPOSE里所指定的端口映射到主机上另外的随机端口???)来设置端口。
  • ADD:向新容器中添加文件,文件可以是
    • 主机文件:必须是相对Dockerfile所在目录的相对路径(如果是压缩文件,docker会解压缩)
    • 网络文件:URL文件,在创建容器时会下载下来添加到镜像中。(如果是压缩文件,docker不会解压缩)
    • 目录:必须是相对Dockerfile所在目录的相对路径(如果是压缩文件,docker会解压缩)
  • COPY: 与ADD的区别是COPY的<src>只能是本地文件,其他用法一致
  • VOLUME:会在镜像里创建一个指定路径的挂载点。这个路径可以来自主机,也可以来自其他容器,多个容器通过同一个挂载点来共享数据,即便有个容器已经停止,其余容器还是可以访问挂载点,只有当挂载点所有的容器引用消失,挂载点才会自动删除。
  • WORKDIR:为接下来的指令指定一个新的工作目录。当启动一个容器后,最后一条WORKDIR指令所指向的目录为容器当前运行的工作目录。
  • ENV:设置环境变量,在docker run 时可以用-e来设置环境变量docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com
  • CMD:设置容器运行时默认运行的命令,CMD参数格式与RUN类似。CMD ls -l -a 或CMD ["ls", "-l", "-a"]
  • ENTRYPOIN:与CMD类似,指定容器运行时默认命令。ENTRYPOINT和CMD的区别,在于运行容器时,镜像后的命令参数,ENTRYPOINT是拼接,CMD是覆盖
  • USER:为容器的运行和RUN CMD ENTRYPOINT等指令的运行 指定用户或者UID
  • ONBUILD:触发器指令,父镜像中不会执行,只有在子镜像中才会执行。 给一个例子

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker使用命令和技巧

    喵了个咪233
  • EMQ百万级MQTT消息服务(介绍和搭建)

    先上节了解完MQTT之后我们需要选择一个MQTT服务端,在MQTT官方推荐下找了找最后选择了使用EMQ来进行服务端实现,EMQ有什么优势可以在官方推荐的那么多的...

    喵了个咪233
  • [喵咪大数据]Hive2搭建和基本操作

    [喵咪大数据]Hive2搭建 ? 说到Hadoop生态有一个不得不提的组件那就是<Hive>,Hive是基于Hadoop结构化存储引擎,能够存储海量的数据,Hi...

    喵了个咪233
  • TKE操作指南 - 制作Nginx和Php Docker基础镜像(三)

    1.Docker基础镜像:提供基础应用型的Docker软件服务(例如:nginx,php,jdk等),所以dockerhub镜像,公有镜像,自定义私有镜像都可以...

    亮哥说TKE
  • Docker PHP 最佳实践

    参考示例配置文件在 config/nginx 新建 *.conf NGINX 配置文件

    康怀帅
  • 零基础学Docker【2】 | 一文带你快速学习Docker常用命令

    本篇是零基础学Docker系列的第二篇文章,在上一篇文章中?一文带你快速了解并上手Docker已经为大家讲解了一些什么是Docker,如何安装使...

    大数据梦想家
  • 万字长文:编写 Dockerfiles 最佳实践

    Docker通过读取Dockerfile中的指令自动构建镜像,一个文本文件包含构建镜像的所有指令。Dockerfile遵循特定的格式和指令集,您可以在Docke...

    崔庆才
  • .NET Core容器化@Docker

    温馨提示:本文适合动手演练,效果更佳。 ?  1. 引言 我们知道. NET Core最大的特性之一就是跨平台,而对于跨平台,似乎大家印象中就是可以在非Wi...

    圣杰
  • Maven 的聚合(多模块)和 Parent 继承

    即使是长期从事 Maven 工作的开发人员也不能完全掌握聚合(多模块)和 Parent 继承的关系,在使用多模块时,子模块总要指定聚合的 pom 为 <pare...

    凯哥Java
  • docker完整配置nginx+php+mysql

      docker在1.3.X版本之后还提供了一个新的命令exec用于进入容器,这种方式相对更简单一些,下面我们来看一下该命令的使用:

    smy

扫码关注云+社区

领取腾讯云代金券