Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile快速创建自定义的镜像。它类似shell脚本,由一行行命令组成,支持以#开头的注释行。一般而言,Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容启动执行指令。
 
1、常用指令
序号 指令 描述
1 FROM 格式:FROM <image>或FROM <image>:<tag>
第一条指令必须是FROM指令。
如果在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令。(每个镜像一次)
2 MAINTAINER 指定维护者信息,格式为MAINTAINER <name>
3 RUN 格式:RUN <command>或RUN <"executable","param1","param2">。
RUN <command>将在shell终端中运行命令,即/bin/sh -c
RUN <"executable","param1","param2">使用exec执行。例如:RUN ["/bin/bash","-c","echo hello"]
每条RUN指定将在当前镜像基础上执行指定命令,并接交为新的镜像。当命令较时可以使用\来换行。
4 CMD 支持三种格式:
CMD ["executable","param1","param2"]使用exec执行,推荐方式。
CMD command param1 param2 在/bin/sh中执行,提供给需要交互的应用。
CMD ["param1","param2"]提供给ENTRYPOINT的默认参数。
指定启动容器时执行的命令,每个Dockerfile只能有一个CMD命令。
如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉CMD指定的命令。
5 EXPOSE 格式:EXPOSE <port> [<port>...],例:EXPOSE 22 80 443
告诉Docker服务器容器暴露的端口号,供互联系统使用。它并非是容器真正的端口,在启动容器时需要使用-P或-p进行指定。
6 ENV 格式:ENV <key> <value>
指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持。
7 ADD 格式:ADD <src> <dest>
复制指定的<src>到容器的<dest>,其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录),也可以是一个URL,还可以是一个tar文件(自动解压)
8 COPY 格式:COPY <src> <dest>
复制本地主机的<src>(Dockerfile所在目录的相对路径,文件或目录)为容器中的<dest>,目标路径不存在时,会自动创建。
9 ENTRYPOINT 有两种格式:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2 (shell中执行)
配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。
每个Dockerfile中只能有一个ENTRYPOINT,当指定多个ENTRYPOINT时,只有最后一个生效。
10 VOLUME 格式:VOLUME ["/data"]
创建一个可以从本地主机或其它容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
11 USER 格式:USER daemon
指定运行容器时用户名或UID,后续的RUN也会使用指定用户。
当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户。
12 WORKDIR 格式:WORKDIR /path/to/workdir
为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
最终路径为/a/b/c
13 ONBUILD 格式:ONBUILD [INSTRUCTION]
配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
 
2、docker build命令常用选项
--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
-q :安静模式,成功后只输出镜像ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag 
 
3、Dockerfile实例
构建ssh服务镜像
# cat Dockerfile-ssh
FROM centos
MAINTAINER eivll0m@163.com ENV ROOT_PASSWD passwd RUN yum -y install openssh-server
RUN echo $ROOT_PASSWD |passwd --stdin root RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key CMD ["/usr/sbin/sshd","-D"]
EXPOSE 22
构建LAMP平台镜像
# cat Dockerfile-wordpress
FROM centos:6.9
MAINTAINER eivll0m@163.com RUN yum -y install httpd php php-gd php-mysql mysql mysql-server
ENV MYSQL_ROOT_PASSWD 123456 RUN echo "<?php phpinfo()?>" > /var/www/html/index.php
ADD start.sh /start.sh
RUN chmod +x /start.sh #ADD wordpress-4.7.4-zh_CN.tar.gz /var/www/html VOLUME ["/var/lib/mysql"] CMD /start.sh EXPOSE 80 3306
构建tomcat服务镜像
# cat Dockerfile-tomcat
FROM centos:6.9
MAINTAINER eivll0m@163.com ADD jdk-8u73-linux-x64.tar.gz /app ENV JAVA_HOME /app/jdk1.8.0_73 ADD apache-tomcat-7.0.56.tar.gz /app WORKDIR /app/apache-tomcat-7.0.56 ENTRYPOINT ["bin/catalina.sh","run"] EXPOSE 8080 #build
#docker build -t tomcat:v1 -f ./Dockerfile-tomcat ./
#run
#docker run -d --name tomcat-8080 -p 8080:8080 tomcat:v1

使用Dockerfile构建镜像的更多相关文章

  1. 使用Dockerfile构建镜像-Docker for Web Developers(5)

    1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...

  2. Docker容器学习梳理 - Dockerfile构建镜像

    在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...

  3. 013、Dockerfile构建镜像(2019-01-02 周三)

    参考https://www.cnblogs.com/CloudMan6/p/6830067.html   Dockerfile构建镜像过程分析   root@docker-lab:~/111# ls  ...

  4. Dockerfile构建镜像

    Dockerfile构建镜像的步骤: 从基础镜像运行一个容器 执行一条指令,对容器做出修改 执行类似docker commit的操作,提交一个新的镜像层 再基于刚提交的镜像运行一个新的容器 执行Doc ...

  5. Dockerfile 构建镜像

    一.使用dockerfile构建镜像 基本结构: a.设置基础镜像 当前镜像继承于的基础镜像 FROM centos:latest  b.设置维护者信息 没有固定格式  c.设置需要添加到容器中的文件 ...

  6. Dockerfile构建镜像实战

    目录 一.常见Dockerfile指令 二.编写Centos Dockerfile 2.1.编写Dockerfile 2.2.构建 2.3.查看Docker镜像 2.4.运行镜像 三.CMD和ENTR ...

  7. Dockerfile 构建镜像 - 每天5分钟玩转容器技术(13)

    Dockerfile 是一个文本文件,记录了镜像构建的所有步骤. 第一个 Dockerfile 用 Dockerfile 创建上节的 ubuntu-with-vi,其内容则为: 下面我们运行 dock ...

  8. docker(四) 使用Dockerfile构建镜像

    下面以一个例子来演示构建镜像的过程. #在/tmp目录下演示 cd tmp mkdir build-redis-image 1.创建Dockerfile文件 vim Dockerfile 并写入如下内 ...

  9. Docker build Dockerfile 构建镜像 - 二

    Dockerfile 制作镜像 https://hub.docker.com/ 搜索需要镜像: https://hub.docker.com/_/centos/ 官方示例: centos:6 1.这里 ...

  10. docker:(2)通过Dockerfile构建镜像并发布web项目

    上一篇讲解了docker的基本使用 http://www.cnblogs.com/xiaochangwei/p/8204511.html 虽然通过修改获取到的镜像可以达到使用目的,但是多操作几次就会发 ...

随机推荐

  1. Linux 离线安装Rubygems详解

    很多时候我们会发现,真实的生成环境很多都没有外网,只有内网环境,这个时候我们又需要安装RubyGems,则不能提供yum命令进行在线安装了,这个时候我们就需要下载安装包进行离线安装.本文主要简单介绍如 ...

  2. Dedecms列表页标签list/pagelist使用方法及pagelist的样式

    Dede的默认页面中有个list_article.htm页面,这是dede的列表页面.在列表页显示文章的列表,是通过dede的list和pagelist这两个个标签实现的.本文就这两个标签的使用及pa ...

  3. PHP怎么获取系统信息和服务器详细信息

    https://zhidao.baidu.com/question/1435990326608475859.html 获取系统类型及版本号: php_uname() (例:Windows NT COM ...

  4. 【翻译】A Next-Generation Smart Contract and Decentralized Application Platform

    原文链接:https://github.com/ethereum/wiki/wiki/White-Paper 当中本聪在2009年1月启动比特币区块链时,他同时向世界引入了两种未经测试的革命性的新概念 ...

  5. asp.net -mvc框架复习(5)-ASP.NET MVC中的视图简单使用

    1.视图分类 ASPX视图(现在讲解) Razor视图(后面讲解) ASPX 视图: 2.@page指令 作用:页面的声明 要求:必须放在第一行,常用指令属性如下: 3.服务器端内嵌语法 小脚本:在A ...

  6. [JS]Math.random()

    参考网址:http://www.soulteary.com/2014/07/05/js-math-random-trick.html [JS]Math.random()的二三事 看到题目,如果大家平时 ...

  7. 详解javascript中的闭包

    全局变量与局部变量 在说闭包之前先说明全局变量与局部变量 全局变量:变量声明时如果不使用 var 关键字,那么它就是一个全局变量,即便它在函数内定义. 局部变量:使用var关键字定义 全局变量/局部变 ...

  8. React版本更新及升级须知(持续更新)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 18.0px "PingFang SC Semibold& ...

  9. Linux指令--grep

    原文地址:http://www.cnblogs.com/peida/archive/2012/12/17/2821195.html.感谢作者的无私分享. Linux系统中grep命令是一种强大的文本搜 ...

  10. js/j'query相互转换操作指南

    // jquery对象转js对象 $('#search')[0].checked=true; // js对象转jquery对象 var obj = document.getElementById('s ...