一、使用Dockerfile制作镜像

  前面的博客中已经介绍了如何基于容器制作镜像,此方法的原理是使用一个正在运行的容器,根据生产所需进行配置更改等操作后,使其满足生产环境,再将这个容器打包制作为镜像,这样类似于快照制作镜像的方式尽管操作还算比较简单,但是当生产环境规模增大,配置变得越来越复杂后,就会显得很臃肿很笨拙。所以下面使用Docker搭建LNMP介绍另一种最为普遍最为常用的容器镜像制作方式——Dockerfile.

二、什么是Dockerfile

  Dockerfile是指构建镜像的纯文本文件,其中包含制作代码的各种命令,这些命令决定了Docker镜像的组成。

  Dockerfile中的第一个非注释行必须是以 FROM 开头,且Dockerfile的首字母必须大写,在基于Dockerfile制作镜像时,一般会创建一个专用目录。

三、常用制作的Dockerfile命令

FROM :最重要的且必须为Dockerfile文件第一个非注释行。用来为将要构建的镜像指定基础镜像,也就是指定基准镜像。格式:

FROM <repositry>[:<tag>]
FROM <repositry>@<hash>

LABEL :为用户指定元数据。例如镜像作者等。用来代替旧的指令 MAINTAINER 。

COPY :将宿主机中的文件复制到创建的新镜像文件中。格式:

COPY <src>...<dest>
COPY ["<src>",..."<dest>"] #用空白字符时用此格式

  在使用 COPY 命令时要注意:

  1.源文件必须是build上下文中的路径,不能是其父目录中的文件。

  2.如果源文件是一个目录,则会复制目录下的文件与子目录,但目录本身不会被复制。

  3.如果目标目录不存在,则会自动创建。

ADD :作用与 COPY 命令基本相似,但ADD支持URL,并且ADD会自动将本地系统上的压缩格式的tar文件解压展开为一个目录至目标地址(URL路径的压缩文件不会被展开)。

WORKDIR :指定当前工作目录。

VOLUME :用来在创建的镜像中创建一个挂载点目录,以挂载宿主机上的卷或其他容器上的卷。语法格式:

VOLUME <mountpoint>

EXPOSE :用于为容器打开指定要监听的端口以实现与外部通信。可一次指定多个端口。例如: EXPOSE

ENV :用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其它指令所调用。格式:

ENV <key> <value>
ENV <key>=<value>... #可设置多个

CMD :定义在镜像启动为容器时容器默认启动的命令。可以理解为在 docker container run 后运行的命令。如果在Dockerfile中使用多个CMD的话只会执行最后一个。例如:

CMD ls
CMD ["/sbin/nginx","-s","reload"]
CMD ["参数","参数"] #这种只有参数没有命令的写法需要与ENTRYPOINT命令结合使用,作为ENTRYPOINT的默认参数。

RUN :定义在构建镜像时要执行的命令。可理解为在 docker build 时运行的命令。也就是说RUN在镜像制作完成的时候就执行了,而CMD在将镜像启动为容器后才会被执行。

ENTRYPOINT :用于为容器指定默认运行的程序,从而使得容器像是一个单独的可执行程序。与CMD不同的是,由ENTRYPOINT启动的程序不会被docker container run 命令指定的参数所覆盖,而且这些命令参数会被当做参数传递给ENTRYPOINT指定的程序。使用语法与CMD类似。PS:在ENTRYPOINT与CMD的第三种格式搭配使用时,CMD中的参数将传递给ENTRYPOINT。例:

ENTRYPOINT ["/bin/sh","-c"]

USER :用于指定运行镜像时或RUN、CMD、等指令是的用户名或UID。用户名或UID必须是已经存在的。

HEALTHCHECK :健康状态检测相关。

基于Dockerfile镜像制作的基本操作的更多相关文章

  1. Dockerfile镜像制作时间同步

    1.问题描述 宿主机与容器时间相差8小时 2.原因 宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)容器采用了UTC时区,UTC应该是指(Coordinat ...

  2. Dockerfile 自动制作 Docker 镜像(三)—— 镜像的分层与 Dockerfile 的优化

    Dockerfile 自动制作 Docker 镜像(三)-- 镜像的分层与 Dockerfile 的优化 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云 ...

  3. 基于Dockerfile制作tomcat镜像

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

  4. Docker镜像管理基础与基于容器的镜像制作示例

    一.Docker镜像 Docker镜像是启动Docker容器的一个非常重要的组件.Docker各组件之间的关系如图: Docker镜像含有启动容器所需要的文件系统及其内容,因此Docker镜像用于创建 ...

  5. 测试环境docker化(一)—基于ndp部署模式的docker基础镜像制作

    本文来自网易云社区 作者:孙婷婷 背景 我所在测试项目组目前的测试环境只有一套,在项目版本迭代过程中,开发或产品偶尔会在测试环境进行数据校验,QA人数在不断增加,各个人员在负责不同模块工作时也会产生脏 ...

  6. Dockerfile 自动制作 Docker 镜像(一)—— 基本命令

    Dockerfile 自动制作 Docker 镜像(一)-- 基本命令 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器 c. 上一篇:手动制作Do ...

  7. docker利用Dockerfile来制作镜像

    在前面的例子(docker tomcat镜像制作)中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我 ...

  8. Dockerfile镜像的制作

    Dockerfile镜像的制作 如果学习Docker,那么制作镜像这一步肯定不能少的,别人给你的是环境,而你自己做的才是你最终需要的东西,接下来就记录一下如何制作一个满足自己的镜像,我们使用docke ...

  9. 项目——基于httpd镜像演示Dockerfile所有的指令

    基于httpd镜像演示Dockerfile所有的指令: 第一步:创建Dockerfile工作目录 [root@localhost harbor]# mkdir /test [root@localhos ...

随机推荐

  1. C#三目运算符

    在编写项目的时候,会经常用到 if else 判断语句,但有些简单的判断或赋值,可以通过三目运算符来完成! 例如: int sex=0; string sexText=""; if ...

  2. Java-IO 字节流的使用和效率比较

    打算做一个系列,前面讲了基本的字符流的用法,这篇博客介绍一下字节流的基本用法: 一.基本使用: 基本字节流: FileInputStream   FileOutputStream BufferedIn ...

  3. 反沙箱——SetErrorMode

    目录 1.前言 2.原理讲解 3.代码实现 4.参考 1.前言 利用SetErrorMode进行反沙箱的技术,在2010年就有被提出,但是之前搜了很久都没有相关内容,这里简单的说一下这个反沙箱的实现. ...

  4. Could not resolve placeholder 'IMAGE_SERVER_URL' in string value "${IMAGE_SERVER_URL}"

    这种问题 在网上查的是说使用了重复的property-placeholder   可能是在别的xml 也用了property-placeholder 解决方法 加上  ignore-unresolva ...

  5. COOKIE和Session的原理及异同

    COOKIE和Session的原理及异同 1. cookie的创建和读取 cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的w ...

  6. linux端安装Anaconda,方便远端访问jupyter

    ipython notebook是一个基于浏览器的python数据分析工具,使用起来非常方便,具有极强的交互方式和富文本的展示效果.jupyter是它的升级版,它的安装也非常方便,一般Anaconda ...

  7. Linux下CenOS系统 安装MariaDB

    1.首先去MariaDB官网下载安装包,首页是:https://mariadb.org/ 2.放在linux下的新建目录下:/root/mariadb 然后解压缩,命令为:tar -xzvf mari ...

  8. H5 和移动端 WebView 缓存机制解析与实战

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qHm_dJBhVbv0pJs8Crp77w 作者:叶 ...

  9. 获取安卓应用APK包名的方法

    应用商店按照符合Android标准的原则进行设计,使用包名(Package Name)作为应用的唯一标识.即:包名必须唯一,一个包名代表一个应用,不允许两个应用使用同样的包名.包名主要用于系统识别应用 ...

  10. [Swift]LeetCode447. 回旋镖的数量 | Number of Boomerangs

    Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...