Docker用Dockerfile定制镜像
用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定制镜像的更多相关文章
- Docker 学习笔记(二):Dockerfile 定制镜像
镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...
- Docker Dockerfile 定制镜像
使用 Dockerfile 定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...
- 利用dockerfile定制镜像
利用dockerfile定制镜像 镜像的定制就是定制每一层所添加的配置.文件.如果可以吧每一层修改.安装.构建.操作的命令都写入到一个脚本,用脚本来构建.定制镜像,这个脚本就是dockerfile. ...
- Dockerfile定制镜像
一.Dockerfile是什么? 镜像定制实质就是定制每一层所添加的配置.文件. Dockerfile就是一个脚本来构建和定制镜像,把每一层的修改.安装.构建.操作都写入脚本.以此来解决体积.镜像构建 ...
- 微服务架构 ------ Dockerfile定制镜像
Docker容器不仅仅是运行原生的容器,而是把我们的具体的项目能够布置到容器上面去,这就是Docker定制镜像需要做的事情. Docker容器 = new Docker镜像 镜像相当于类,容器相当 ...
- Docker Dockerfile 定制镜像(转)
转自: https://yeasy.gitbooks.io/docker_practice/ 及 https://blog.csdn.net/wo18237095579/article/details ...
- Docker入门之--定制镜像
1. 首先定制一个Web 服务器为例 1.1 启动镜像 执行下面命令 docker run --name webserver -d -p 80:80 nginx 1.2 查看容器和镜像状态 然后执行下 ...
- 使用Dockerfile定制镜像
Dockerfile是一个文本文件,其中包含额一条一条的指令,每一条指令构建一层,因此每一条指令的作用就是描述这一层应当如何的构建. 以构建nginx镜像为例,使用Dockerfile构建的步骤如下: ...
- Dockerfile 定制镜像
从上一篇文章中我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置.文件等信息,但是命令毕竟只是命令,每次定制都得去重复执行这个命令,而且还不够直观,如果我们可以把每一层修改.安装.构建.操作的 ...
随机推荐
- 还在用crontab? 分布式定时任务了解一下
前言 日常任务开放中,我们会有很多异步.批量.定时.延迟任务要处理,go-zero中有 go-queue,推荐使用 go-queue 去处理,go-queue 本身也是基于 go-zero 开发的,其 ...
- ZooKeeper 基本概念并介绍RPC中Netty和Zookeeper的使用
前言 ZooKeeper 是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等.Zookeeper提供一个类似Linux文件系统的属性结构,每个节点可存储少量的内存文件,并提供每 ...
- JS的this指向深入
this指向深入 this的绑定规则 默认绑定 this默认指向了window 全局环境下this指向了window 函数独立调用,函数内部的this也指向了window <script> ...
- WAV16T VPX国产化千兆交换板
WAV16T是基于盛科CTC5160设计的国产化3U三层千兆VPX交换板,提供16路千兆电口,采用龙芯 2K1000处理器.支持常规的L2/L3协议,支持Telnet.SNMP.WEB,CLI等多 ...
- 解决springMVC https环境 jstlview redirect时变为http请求的问题
<property name="redirectHttp10Compatible" value="false" />
- [WC2014]时空穿梭
这才叫莫比乌斯反演题. 一.题目 点此看题 二.解法 也没有什么好的思路,我们不妨把暴力柿子写出来,我们想枚举直线,但是这道题不能枚举直线的斜率,所以就要用整数来表示直线,我们不妨枚举出发点和终止点的 ...
- .NET并发编程-任务函数并行
本系列学习在.NET中的并发并行编程模式,实战技巧 请问普通: 被门夹过的核桃还能补脑吗 本小节开始学习基于任务的函数式并行.本系列保证最少代码呈现量,虽然talk is cheap, show me ...
- WorkSkill 面试之 字节跳动一面
- golang 微服务以及相关web框架
golang 中国gocn golang Applicable to all database connection pools xorm是一个简单而强大的Go语言ORM库,通过它可以使数据库操作非常 ...
- 网络对抗技术Exp2-后门原理与实践
后门概念 后门就是不经过正常认证流程而访问系统的通道. 哪里有后门呢? 编译器留后门 操作系统留后门 最常见的当然还是应用程序中留后门 还有就是潜伏于操作系统中或伪装为特定应用的专用后门程序. 下面是 ...