使用Dockerfile构建镜像

Dockerfile使用DSL(Domain Specific Language)来构建一个Docker镜像,只要编辑好了Dockerfile文件,就可以使用docker build命令来构建一个新的镜像。

我们先创建一个空文件夹并在文件夹下创建名为Dockerfile的文件。

touch Dockerfile

编辑这个Dockerfile文件添加如下所示的内容。

vim Dockerfile
# version: 0.0.1
FROM ubuntu:14.04
MAINTAINER jackfrued "jackfrued@126.com"
RUN apt-get update && apt-get install -y nginx
RUN echo 'hello, world!' > /usr/share/nginx/html/index.html
EXPOSE 80

我们来解释一下上面的Dockerfile文件。Dockerfile文件通过特殊的指令来指定基础镜像(FROM指令)、创建容器后需要指定的命令(RUN指令)以及需要暴露的端口(EXPOSE)等信息。我们稍后会专门为大家介绍这些Dockfile中的指令。

接下来我们可以使用docker build命令来创建镜像,如下所示。

docker build -t="jackfrued/webserver" .

提示:上面的命令最后面的. 千万不要漏掉了哦,它表示从当前路径下寻找Dockerfile。

通过下面的命令可以查看创建好的镜像。

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jackfrued/webserver latest 87d6cb096be2 23 minutes ago 222 MB

如果想知道镜像文件是如何创建出来的,可以使用下面的命令。

docker history jackfrued/webserver
IMAGE CREATED CREATED BY SIZE
87d6cb096be2 25 minutes ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B
53d3bc3a123e 25 minutes ago /bin/sh -c service nginx start 3 B
10646b63275e 25 minutes ago /bin/sh -c echo 'hello, world!' > /usr/sha... 14 B
f3e3bf3e998e 25 minutes ago /bin/sh -c apt-get update && apt-get insta... 34.3 MB
c98e22cf5a64 26 minutes ago /bin/sh -c #(nop) MAINTAINER jackfrued "j... 0 B
2c5e00d77a67 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 3 months ago /bin/sh -c mkdir -p /run/systemd && echo '... 7 B
<missing> 3 months ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0 B
<missing> 3 months ago /bin/sh -c set -xe && echo '#!/bin/sh' >... 195 kB
<missing> 3 months ago /bin/sh -c #(nop) ADD file:1e01ab604c0cc30... 188 MB

使用该镜像来创建容器运行Web服务器。

docker run -d -p 80:80 --name mywebserver jackfrued/webserver nginx -g "daemon off;"
如果希望将上面创建的镜像文件放到dockerhub仓库中,可以按照如下所示的步骤进行操作。

通过下面的命令登录到dockerhub。

docker login

输入用户名和口令进行登录。

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: jackfrued
Password:
Login Succeeded

通过下面的命令将镜像推到仓库中(注意斜杠前一定是hub.docker.com的登录id否则会报错:denied: requested access to the resource is denied)。

docker push jackfrued/webserver

Dockerfile指令

想了解Dockerfile的指令可以查看官方提供的参考手册,下面我们为大家介绍一些常用的指令。

  1. FROM:设置基础镜像,必须是Dockerfile中的第一条指令。

    FROM <镜像名> [AS <别名>]
    或 FROM <镜像名>[:<标签>] [AS <别名>]
  2. RUN:指定构建镜像时要执行的命令。

    RUN <命令> [参数1], [参数2], ...
    或 RUN ["可执行文件", "参数1", "参数2", ...]
  3. CMD:指定构建镜像后要执行的命令。

    CMD <命令> [参数1], [参数2], ...
    或 CMD ["可执行文件", "参数1", "参数2", ...]

    说明:Docker不同于虚拟机,容器本身就是一个进程,容器中的应用应该位于前台运行。CMD命令相当于就是用来指定容器主进程(创建容器后要在前台执行的程序)的,如果主进程结束了,容器也就停止运行了。所以在容器中启动Nginx不能使用service nginx start或是systemctl start nginx而是要通过CMD ["nginx", "-g", "daemon off;"]让它在前台运行。

  4. ENTRYPOINT:和CMD类似,也可以执行命令,但docker run命令行中指定的任何参数都会被当做参数再次传给ENTRYPOINT指令中的命令,这就使得我们可以构建一个镜像,它既可以运行一个默认的命令,也支持通过docker run命令行为该命令指定可覆盖的参数选项。

    ENTRYPOINT <命令> [参数1], [参数2], ...
    或 ENTRYPOINT ["可执行文件", "参数1", "参数2", ...]
    WORKDIR:在通过镜像创建新容器时,在容器内部创建一个工作目录,ENTRYPOINT和CMD指定的程序会在这个目录下执行。在使用docker run命令时可以通过-w参数来覆盖由WORKDIR指定的工作目录。例如:
  5. WORKDIR /opt/webapp
    docker run -w /usr/share/webapp ...
  6. ENV:在创建镜像时设置环境变量。在使用docker run命令时,可以通过-e参数来修改环境变量的设置。例如:

    ENV DEFAULT_PORT=8080
    docker run -e "DEFAULT_PORT=8000" ...
  7. USER:指定镜像会以什么用户身份去运行。例如:

    USER nginx
  8. VOLUME:在创建容器时添加一个数据卷的挂载点。通过数据卷操作可以实现容器间数据的共享和重用,对卷所作的修改可以马上生效而不需要重新启动容器,我们之前创建容器时使用—volume参数就是为了实现数据卷的映射操作。

    VOLUME ["/路径1", "/路径2/子路径2.1/", ...]
  9. ADD:将构建目录下的文件和文件夹复制到镜像中,如果是压缩文件和归档文件,ADD命令会对这些文件进行解压缩解归档的操作。

    ADD [--chown=<用户>:<用户组>] <源文件> <目标文件>
  10. COPY:非常类似于ADD,但不会主动对文件进行提取操作。

  11. LABEL:为Docker镜像添加一些元数据,在使用docker inspect命令时会看到这些元数据。

    LABEL version="1.0.0" location="Chengdu"
  12. ONBUILD:为镜像添加触发器,当一个镜像被用作其他镜像的基础镜像,触发器将会被执行。例如:

    ONBUILD ADD . /app/src
    ONBUILD RUN cd /app/src && make

docker构建镜像 (3)的更多相关文章

  1. Docker 构建镜像

    Docker 构建镜像 1.首先,在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容. 下面三行代码表示: 1.这三个路径要排除,不要打包进入 image 文件. 2.如果你 ...

  2. docker 构建镜像 centos7 nginx php

    #docker 构建镜像(Dockerfile) centos 7.4.1078镜像制作 nginx镜像制作(以前面centos7镜像为基础) Nginx+php镜像制作 更多操作实例,查看git里的 ...

  3. Geoserver+Openlayers+MySQL设计思想,GeoServer服务器搭建(Docker构建镜像)

    Geoserver+Openlayers+MySQL设计思想,GeoServer服务器搭建(Docker构建镜像) 一.geoserver+openlayers+mysql主要设计思想 1.1 Geo ...

  4. docker构建镜像

    Docker 提供了两种构建镜像的方法: docker commit 命令Dockerfile 构建文件 示例: Dockerfile FROM golang:1.7.5 #基础镜像 RUN apt- ...

  5. 关于docker构建镜像

    今天正好看到这一块了,记录一下,希望可以帮助到大家. 构建Dockerfile 先来看一个示例: --------------------------------------------------- ...

  6. Docker构建镜像过于缓慢解决-----Docker构建服务之部署和备份jekyll网站

    参考原文链接:https://www.jianshu.com/p/e6b7e68f2ba7 来自<第一本Docker书>,我觉得很有趣,就记录一下 准备国内ubuntu镜像 每次构建Ubu ...

  7. Docker 构建网络服务后本机不能访问

    Docker 构建网络服务后本机不能访问 起因 使用tornado构建了一个服务,测试都没有问题 使用docker构建镜像,使用docker run image_name启动服务 使用浏览器访问 12 ...

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

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

  9. 从零开始构建docker基础镜像

    段子 今年基本已经结束了,我问了很多朋友今年挣钱了没?大多朋友都有挣,而且挣得五花八门:有挣个屁的,有挣个锤子的,有挣个毛的,更有甚者挣个妹的,奢侈之极!最恐怖的是挣个鬼的!有的还可以,挣个球,下午我 ...

随机推荐

  1. 【微信小程序云开发】1分钟学会实现上传、下载、预览、删除图片,并且以九宫格展示图片

    大家好,我叫小秃僧 这篇文章是讲解云开发如何上传.下载.预览.删除图片,并且以九宫格展示图片的功能 @ 目录 1. 实现效果 2.JavaScript代码 3.wxml代码 4.wxss代码 1. 实 ...

  2. css中cursor(光标类型)

    值 描述 url 需使用的自定义光标的 URL. 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标. default 默认光标(通常是一个箭头) auto 默认.浏览器 ...

  3. Java面向对象笔记 • 【第6章 Java常用类】

    全部章节   >>>> 本章目录 6.1 Object类 6.1.1 Object类概述 6.1.2 Object的常用方法 6.1.3 实践练习 6.2 String类和St ...

  4. Eclipse控制台Console使用说明

    1.说明 本文详细介绍Eclipse控制台Console使用说明, 调试时通过控制台查看日志, 有时候日志太多会找不到上面的日志, 有时候几个控制台会不受控制的弹出, 那么请参考本文, 通过调整Ecl ...

  5. 【】URL中的文本IPv6地址的格式RFC2732

    RFC2732规范中URL中的文本IPv6地址的格式, 截取其中重要部分原文如下: RFC 2732 Format for Literal IPv6 Addresses in URL's Decemb ...

  6. 使用sudo执行命令提示command not found

    笔记: 使用源码部署nginx的时候,使用sudo nginx提示command not found,但是直接使用nginx会导致权限问题: 这种情况应该是环境变量导致的,使用 env |grep P ...

  7. Spring @Component 注解的使用

    使用说明 这个注解用于声明当前的类是一个组件类,Spring 会通过类路径扫描来自动侦测和自动装配这些组件,创建一个个 bean 后,注册到 Spring 容器中. 带 @Component 注解的类 ...

  8. win10快捷方式小箭头怎么去掉

    为了演示,先来看看桌面图标是有小箭头的. 1.打开注册表 按下快捷键"win+R",然后输入"regedit",并点击确认按钮. 2.搜索HKEY_CLASSE ...

  9. 【PowerShell】格式化输出字符串

    1 '{0:d4}' -f 10 2 '数字的补零';{} 3 '{0:f4}' -f 10 4 '保留小数位数';{} 5 '{0:p2}' -f 0.4567 6 '转换为百分比';{} 7 '{ ...

  10. 马哈鱼血缘分析工具部署介绍--win 10

    马哈鱼血缘分析工具部署介绍--win 10 随着大数据技术的发展与普及,数据治理和数据质量变得越来越重要,数据血缘分析在业界悄然兴起并得到了广泛流行,马哈鱼是国内少有的一款专业且易用的血缘分析工具.本 ...