Dockerfile定制镜像
一、Dockerfile是什么?
镜像定制实质就是定制每一层所添加的配置、文件。
Dockerfile就是一个脚本来构建和定制镜像,把每一层的修改、安装、构建、操作都写入脚本。以此来解决体积、镜像构建透明等问题。
Dockerfile是一个文本文件,包含一条条指令(Instruction),每一条指令构建一层,每一条指令的内容,就是描述该层应当如何构建。
二、使用Dockerfile定制镜像
1、创建Dockerfile文件
[root@kwephicprc03547 home]# mkdir docker_nginx # 创建空白目录
[root@kwephicprc03547 home]# cd docker_nginx/
[root@kwephicprc03547 docker_nginx]# touch Dockerfile # 创建命名为Dockerfile的文件
2、编写Dockerfile内容
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
3、构建镜像
[root@kwephicprc03547 docker_nginx]# pwd
/home/docker_nginx # 在Dockerfile文件所在目录执行
[root@kwephicprc03547 docker_nginx]# docker build -t nginx:v3 .
Sending build context to Docker daemon .048kB
Step / : FROM nginx ---> 9235bd14ba8c
Step / : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html ---> Running in 147db19a597e # 启动了一个容器,并执行所要求的命令
Removing intermediate container 147db19a597e # 删除容器
---> f100fe2e6ea9 # 提交了这一层
f100fe2e6ea9Successfully built f100fe2e6ea9
Successfully tagged nginx:v3
docker build命令进行镜像构建,格式为:
docker build [选项] <上下文路径/URL/->
-t:指定了最终镜像的名称 nginx:v3。
三、FROM指令
定制镜像一定是以某个镜像为基础,基于它进行定制。
FROM就是指定基础镜像,Dockerfile中FROM是必备指令,且必须是第一个指令。
1、官方镜像
Docker Hub有非常多的高质量官方镜像,主要分为三类:
1)服务类镜像:可以直接拿来使用,如nginx、redis、http等。
2)开发语言镜像:方便开发、构建、运行各种语言应用,如node、python等。
3)操作系统镜像:更为基础更方便扩展,如centos、ubuntu等。
2、scratch镜像
scratch是docker中的一个特殊镜像。这个镜像是虚拟的概念,并不实际存在,表示一个空白的镜像。
如果以scratch为基础镜像,意味着不以任何镜像为基础,所写指令将作为第一层开始存在。
FROM scratch
使用 Go 语言 开发的应用很多会使用这种方式来制作镜像,这也是为什么有人认为 Go 是特别适合容器微服务架构的语言的原因之一。
四、RUN指令
RUN 指令是用来执行命令行命令的。Run指令在定制镜像时是最常用的指令之一。
1、RUN指令格式
(1)shell格式
RUN <命令>,就像直接在命令行输入命令一样。
RUN echo '<h1>Hello,Docker!</h1>' > /usr/share/nginx/html/index.html
(2)exec格式
RUN ["可执行文件", "参数1", "参数2"],更类似函数调用的格式。
(3)层数限制和指令写法
Union FS有最大层数限制,如AUFS之前最大不得超过42层,现在是不得超过127层。
每一条RUN行为都将新建一层,执行命令后,commit这一层的修改,构成新的镜像。
2、Dockerfile的正确写法
FROM debian:stretch RUN buildDeps='gcc libc6-dev make wget' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components= \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
所有这些命令的目的只有一个:编译安装redis。因此只需要建立一层即可。使用 && 将各个所需命令串联起来。
Dockerfile支持在行尾添加 \ 来实现命令换行;也支持行首 # 来实现注释。
上面的Dockerfile中还进行了rm 操作,这是在进行清理工作(删除编译构建所需软件;清理下载、展开的文件;清理apt缓存文件),这一点非常重要。镜像构建时,必须保证每一层只添加真正需要添加的东西,任何无关的东西都应该被清理掉。
Dockerfile定制镜像的更多相关文章
- 利用dockerfile定制镜像
利用dockerfile定制镜像 镜像的定制就是定制每一层所添加的配置.文件.如果可以吧每一层修改.安装.构建.操作的命令都写入到一个脚本,用脚本来构建.定制镜像,这个脚本就是dockerfile. ...
- 微服务架构 ------ Dockerfile定制镜像
Docker容器不仅仅是运行原生的容器,而是把我们的具体的项目能够布置到容器上面去,这就是Docker定制镜像需要做的事情. Docker容器 = new Docker镜像 镜像相当于类,容器相当 ...
- Docker 学习笔记(二):Dockerfile 定制镜像
镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...
- Docker Dockerfile 定制镜像
使用 Dockerfile 定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...
- Docker用Dockerfile定制镜像
用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...
- Docker Dockerfile 定制镜像(转)
转自: https://yeasy.gitbooks.io/docker_practice/ 及 https://blog.csdn.net/wo18237095579/article/details ...
- 使用Dockerfile定制镜像
Dockerfile是一个文本文件,其中包含额一条一条的指令,每一条指令构建一层,因此每一条指令的作用就是描述这一层应当如何的构建. 以构建nginx镜像为例,使用Dockerfile构建的步骤如下: ...
- Dockerfile 定制镜像
从上一篇文章中我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置.文件等信息,但是命令毕竟只是命令,每次定制都得去重复执行这个命令,而且还不够直观,如果我们可以把每一层修改.安装.构建.操作的 ...
- 利用 Dockerfile 定制镜像
镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像, 那么之前提及的无法重复的问题.镜像构建透明性的问题.体 ...
随机推荐
- HTML-★★★★★JavaScritp简介与语法★★★★★
简介: 1.什么是JavaScript? 它是个脚本语言,作用是使 HTML 页面具有更强的动态和交互性,它需要有宿主文件,它的宿主文件就是html文件. JavaScript 是 Web 的编程语 ...
- wordcloud词云--可视化
import jieba import wordcloud f = open("新时代中国特色社会主义.txt", "r", encoding="gb ...
- HTML 标记大全参考手册
1.文件结构 文件类型 <HTML></HTML> (放在文档的开头与结尾) 文件主题 <TITLE></TITLE> (必须放在「文头」区块内) 文头 ...
- dubbo核心流程一览
整体设计 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI. Serv ...
- CentOS&.NET Core初试-2-安装.NET Core SDK和发布网站
系列目录 CentOS的安装和网卡的配置 安装.NET Core SDK和发布网站 Nginx的安装和配置 安装守护服务(Supervisor) 安装.NET Core SDK 注册Microsoft ...
- UNIX SHELL基础知识总结(一)
1. Unix常目录结构与作用: 2. 基本命令: $echo $date $who $who am i 3. 创建文件的几种方式: A. touch FileName 创建空文件 B. > ...
- Zookeeper选举算法原理
Zookeeper选举算法原理 Leader选举 Leader选举是保证分布式数据一致性的关键所在.当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举. (1) 服 ...
- java实现猴子选大王问题(约瑟夫问题)
题目:m只猴子围成一圈报数,报n的猴子自动离开,然后下一位重新从1开始报数,一直循环,最后剩下的那个猴子就是猴大王,写出程序求出最后是大王的那只猴子最初的位置. package learn; impo ...
- Oracle 数据库、表、方案的逻辑备份与恢复
数据库(表)的逻辑备份与恢复 逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程,逻辑恢复是指当数据库对象被破坏而使用工具import利用备份的文件把数据对象导入到数据库的过程,逻 ...
- c++ 网络编程(三) LINUX/windows 进程间的通信原理与实现代码 基于多进程的服务端实现
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9613027.html 锲子:进程与线程是什么,他们的区别在哪里: 1 进程概念 进程是程序的一 ...