用Dockerfile定制镜像

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那之前提示的无法重复的问题。镜像透明性问题。体积的问题就都会解决,所以就有了Dockerfile。

Dockerfile是一个文本文件,其内容包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

创建一个空的目录(养成好习惯,目录要干净,项目路径也是要干净简洁)

mkdir mynginx

创建一个文件 Dockerfile 里面这样写

FROM nginx

RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

就两行,第一行是指定基础镜像,就是这个镜像已哪个镜像为基础开始创建。上面是用的官方nginx镜像,官方Docker Hub有很多基础镜像,

服务类:

nginx  、 redis  、 mongo  、 mysql  、 httpd  、 php  、 tomcat、

语言应用:

node  、 openjdk  、 python  、 ruby  、 golang 、

操作系统:

ubuntu  、 debian  、 centos  、 fedora  、 alpine等很多镜像。

如果想用空白镜,也就是不用镜像就直接 FROM scratch 这个并不罕见,swarm etcd 或者一些GO语言开发的应用很多会直接用这种方式来制作镜像。

这个是Dockerfile里的第一条指令,第二条是用的RUN

RUN  指令是用来执行命令行命令的。两种格式:

shell 格式: RUN <命令>

exec 格式: RUN ["可执行文件", "参数1", "参数2"]

一定一定一定要注意,每一条RUN都会创建一个单独的一层镜像的,千万不要这么写:

这创建了七层镜像。正确姿势是类似这样:

其实就是一条RUN 指令。必须这么写,这样就创建了一层了。不过讲真,这看着不舒服。

还有就是Union FS是有最大层数限制的,AUFS曾经是最大42层,现在是127层。

还有就是,构建镜像的时候,确保每一层只添加真正需要的东西,其他的或者是中间生成的垃圾,都记得删除清理掉。保持干净,给后面的镜像留下干净的环境。

然后继续回到Dokcerfile构建这块来,现在是开始构建镜像。

格式 docker build [选项] <上下文路径/URL/->

具体操作是:docker build -t nginx:v3 .

细节看下下面(我故意输入了一些命令,回忆下现在是个什么状态)

跑跑试试

可以,没问题。

关于 【镜像构建上下文(Context)】

上面 docker build -t nginx:v3 .  最后面的那个.是指定上下文的意思,这个上下文要注意,这块容易混淆。

当构建的时候,用户会指定构建镜像上下文的路径, docker build  命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。这样 Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。然后如果你在Dockerfile中这么写:

COPY ./package.json /app/

其实是把上下文中的package.json复制到了/app/里。不是当前目录,也不是Dockerfile所在的目录。

一般来说,应该会将  Dockerfile  置于一个空目录下,或者项目根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用  .gitignore  一样的语法写一个  .dockerignore  ,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。

同时:在默认情况下,如果不额外指定  Dockerfile  的话,会将上下文目录下的名为Dockerfile  的文件作为 Dockerfile

Docker build还有其他姿势:直接简单看下下面就好。

(1)docker build https://github.com/twang2218/gitlab-ce-zh.git#:11.1

(2)docker build http://server/context.tar.gz

(3)docker build - < Dockerfile 或者 cat Dockerfile | docker build -

(4)docker build - < context.tar.gz

Docker用Dockerfile定制镜像的更多相关文章

  1. Docker 学习笔记(二):Dockerfile 定制镜像

    镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...

  2. Docker Dockerfile 定制镜像

    使用 Dockerfile 定制镜像  镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...

  3. 利用dockerfile定制镜像

    利用dockerfile定制镜像 镜像的定制就是定制每一层所添加的配置.文件.如果可以吧每一层修改.安装.构建.操作的命令都写入到一个脚本,用脚本来构建.定制镜像,这个脚本就是dockerfile. ...

  4. Dockerfile定制镜像

    一.Dockerfile是什么? 镜像定制实质就是定制每一层所添加的配置.文件. Dockerfile就是一个脚本来构建和定制镜像,把每一层的修改.安装.构建.操作都写入脚本.以此来解决体积.镜像构建 ...

  5. 微服务架构 ------ Dockerfile定制镜像

    Docker容器不仅仅是运行原生的容器,而是把我们的具体的项目能够布置到容器上面去,这就是Docker定制镜像需要做的事情.  Docker容器 = new Docker镜像  镜像相当于类,容器相当 ...

  6. Docker Dockerfile 定制镜像(转)

    转自: https://yeasy.gitbooks.io/docker_practice/ 及 https://blog.csdn.net/wo18237095579/article/details ...

  7. Docker入门之--定制镜像

    1. 首先定制一个Web 服务器为例 1.1 启动镜像 执行下面命令 docker run --name webserver -d -p 80:80 nginx 1.2 查看容器和镜像状态 然后执行下 ...

  8. 使用Dockerfile定制镜像

    Dockerfile是一个文本文件,其中包含额一条一条的指令,每一条指令构建一层,因此每一条指令的作用就是描述这一层应当如何的构建. 以构建nginx镜像为例,使用Dockerfile构建的步骤如下: ...

  9. Dockerfile 定制镜像

    从上一篇文章中我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置.文件等信息,但是命令毕竟只是命令,每次定制都得去重复执行这个命令,而且还不够直观,如果我们可以把每一层修改.安装.构建.操作的 ...

随机推荐

  1. 漏洞复现-CVE-2014-3120-ElasticSearch 命令执行漏洞

        0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 < ElasticSearch 1.2的版本 ...

  2. P2055 [ZJOI2009]假期的宿舍 题解(二分图)

    题目链接 P2055 [ZJOI2009]假期的宿舍 解题思路 因为懒,提供一种不连边,直接根据题目给出的邻接矩阵进行匈牙利算法的思路. \(a[i][j]\)表示\(i\)能不能睡\(j\)的床,需 ...

  3. Solon 框架详解(九)- 渲染控制之定制统一的接口输出

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  4. Linux sed 使用笔记

    sed 工具使用笔记 Linux中经常需要对一些超大的文本文件进行操作,例如 GB 级别的 CSV.TXT.LOG 文件,如果使用 vi 或者 vim 编辑器操作会非常慢且卡,此时 sed 工具或许可 ...

  5. PTA 递增的整数序列链表的插入

    6-4 递增的整数序列链表的插入 (15 分)   本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List ...

  6. 解Bug之路-主从切换"未成功"?

    解Bug之路-主从切换"未成功"? 前言 数据库主从切换是个非常有意思的话题.能够稳定的处理主从切换是保证业务连续性的必要条件.今天笔者就来讲讲主从切换过程中一个小小的问题. 故障 ...

  7. Android Studio 之 编写精美的聊天界面

    •准备工作 首先制作一张 .9 格式的聊天气泡,参见我的这篇博客: 需要注意的是,制作完成后,应该将原始文件删除,否则AS会分不清楚而报错. 新建一个 Empty Activity,Java 和 XM ...

  8. 如何开发一个APP——转自知乎

    作者:简单点链接:https://www.zhihu.com/question/22999185/answer/155469014来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  9. 解决wampserver 服务无法启动

    如图左击选中apache的httpd.conf把文本中的80端口,改成未被占用的端口.

  10. 腾讯高级工程师带你完整体验Node.js开发实战

    Node.js拥有广大的 JavaScript程序员基础并且完全开源,它被广泛地用在 Web服务.开发工作流.客户端应用等诸多领域.在 Web 服务开发这个领域,业界对 Node.js 的接受程度最高 ...