Dockerfile编写
Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建
编写命令:
1.FROM
作用:声明使用哪个基础镜像
格式:FROM IMAGE:TAG
例: FROM nginx:latest
2.LABEL
作用:指明作者
格式:LABEL author=tian
3.ENV
作用:声明环境变量
格式:ENV KEY=VALUE
例:ENV workdir=/var/www/html
4.WORKDIR
作用:声明工作目录
格式:WORKDIR 工作目录
例:WORKDIR $wrkdir
WORKDIR /var/www/html
WORKDIR /usr/local/apache2
5.RUN
作用:执行命令
格式: RUN cmd && cmd2
例:RUN yum install httpd -y && systemctl enable httpd
相当的指令尽量放到一层
6.EXPOSE
作用:声明暴露的端口
格式:EXPOSE 80 3306
7.COPY
作用:复制Dockerfile 工作目录下的文件至镜像内
格式:COPY SRC DEST
例:COPY psswd /etc/
注意:源文件路径用相对路径 目标一般用绝对路径
也可使用通配符
源文件必须在工作目录或者工作目录的子目录中
目标路径可以不存在,会自动创建
如果源文件是一个目录,会自动递归复制目录下的文件到目标位置,目录本身不会被复制
如果复制多个文件,或者源文件中用了通配符,那么目标路径必须以 / 为结尾
8.ADD
作用:复制
格式:ADD SRC DEST
例:ADD tian.tar.gz /etc/
ADD 和COPY区别
ADD会自动解压tar 包
ADD 可以从网络上下载,但是这时候的tar包不会被解压
9.VOLUME
声明挂载点
格式:VOLUME DEST
例:VOLUME /var/www/html
10.触发器 #当别人用你的镜像制作新的镜像时候会触发一个动作
格式:ONBUILD 动作
例:ONBUILD ADD https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/adwaita-qt-common-1.0-1.el7.x86_64.rpm /date
11.CMD
作用:执行命令 PID为1的指令
格式:CMD 命令
例:CMD nginx -g daemon off;
CMD ["nginx","-g","daemon off;"]
12.ENTRYPOINT
作用:执行命令 PID 为1的指令
格式:ENTRYPOINT 指令
例:ENTRYPOINT nginx -q daemon off;
ENTRYPOINT ["nginx","-g","daemon off;"]
CMD ["-g","daemon off;"]
ENTRYPOINT ["nginx"]
# :指备注,注释
指令参数,指令的大小写不敏感 #通常情况下一般使用大写
第一个非注释行必须是FROM指令 #在没有注释的Dockerfile中。FROM必须是首行
编写Dockerfile必须在一个目录下进行,这个目录称之为 工作目录(WORKSPACE)
Dockerfile文件命令的首字母必须大写
制作镜像所要用的文件必须放在工作目录或者工作目录的子目录之下,不能放在父目录
可以通过隐藏文件 .dockeringnore 来指定不要放入到镜像中的文件,一行是一个文件,可以用通配符
基于dockerfile做镜像,本质上还是基于一个现有的镜像做新镜像
例:基于httpd镜像演示上面所有的指令
第一步:创建Dockerfile工作目录
mkdir test
cd test
vim Dockerfile
#this is my first Dockerfile
FROM httpd:latest
LABEL author=tian
ENV dir=/usr/local/apache2/htdocs
WORKDIR $dir
COPY test1 ./
RUN touch test2
ADD https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/adwaita-qt-common-1.0-1.el7.x86_64.rpm ./
EXPOSE 80 3306
VOLUME $dir
CMD ["httpd-foreground"]
第二步:基于dockerfile创建镜像
docker build -t httpd:tian1 .
第三步:基于新创建的镜像启动容器
docker run -d httpd:tian1
Dockerfile编写的更多相关文章
- Docker容器化【Dockerfile编写&&搭建与使用Docker私有仓库】
# Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...
- 最简单的Go Dockerfile编写姿势,没有之一!
1. Dockerfile一些额外注意点 选择最简单的镜像 比如alpine,整个镜像5M左右 设置镜像时区 RUN apk add --no-cache tzdata ENV TZ Asia/Sha ...
- docker 应用-2(Dockerfile 编写以及镜像保存提交)
我们可以从docker hub上pull别人的镜像,也可以将容器进行修改,然后commit镜像,并把镜像push到docker hub上被被人使用.但是,直接pull或者push镜像的方式太过笨重,尤 ...
- Dockerfile编写注意事项
转载自:https://blog.fundebug.com/2017/05/15/write-excellent-dockerfile/ 一.目标 更快的构建速度 更小的Docker镜像大小 更少的D ...
- Docker解析及轻量级PaaS平台演练(三)--Dockerfile编写
在本篇中将介绍Dockerfile的编写 除了通过修改Image,创建Container,在打包成Image来创建我们需要的Image之外 我们还可以编写Dockerfile文件,通过build来创建 ...
- Dockerfile 编写
转: https://blog.fundebug.com/2017/05/15/write-excellent-dockerfile/如何编写最佳的Dockerfile 译者按: Dockerfile ...
- Docker的简介以及Dockerfile编写与使用
Docker的简介 Docker是在容器的基础上,进行了进一步的封装,极大的简化了容器的创建和维护.使得Docker技术比虚拟机技术更为轻便.快捷. 下面是两张对比图. 可以看到传统虚拟机技术是虚拟出 ...
- Prometheus之Dockerfile编写、镜像构建、容器启动
目录 从官方镜像启动:prom/prometheus 官方Dockerfile分析 编写自己的Dockerfile 构建镜像: 启动容器: 从官方镜像启动:prom/prometheus 拉取镜像 $ ...
- Dockerfile编写语法
docker镜像本质上就是一个个基础镜像的堆叠,为了做出我们想要的镜像,我们需要考虑最终镜像所需的所有基础环境,然后一层层堆叠.也就是不断以基础镜像搭建上层镜像. 先看例子: # Version: # ...
随机推荐
- P1387 最大正方形 |动态规划
题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入格式 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m个数字,用空格隔 ...
- mac终端基本命令
一 基本命令 1.列出文件 ls 参数 目录名 参数 -w 显示中文,-l 详细信息, -a 包括隐藏文件 例: 看看驱动目录下有什么:ls /System/Library/Extensions 2. ...
- Spring Boot Validation,既有注解不满足,我是怎么暴力扩展validation注解的
前言 昨天,我开发的代码,又收获了一个bug,说是界面上列表查询时,正常情况下,可以根据某个关键字keyword模糊查询,后台会去数据库 %keyword%查询(非互联网项目,没有使用es,只能这样了 ...
- linux 根据端口关闭程序的管道命令
netstat -anp|grep :3306|head -n1|cut -d"/" -f1|sed 's/ /\r\n/g'|tail -n1|xargs -I{} kill - ...
- 【CSS】346- 你所不知道的 CSS 阴影技巧与细节
偷懒了1个多礼拜,在工作饱和的情况下,怎么坚持学习?今天的分享来自@Coco国服第一切图仔,我们聊聊CSS属性box-shadow- 关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 ...
- 浅析Java String
String 特性 1.其定义的字符串序列不可变. 2.是一个final类,不可被继承,且其内部一些重要方法被定义为final类型,不可重写. 3.内部实现Serializable接口(支持字符串序列 ...
- JavaWeb中的MVC 下
代码较多,请先略过代码,看懂逻辑在研究代码 引入 回顾上一节中的项目,最终的层次结构: 在MVC上中,我们分析了MVC设计模式具备的优点,以及不足,并在其基础上增了Service层用于处理业务逻辑,但 ...
- Redis实战 | 5种Redis数据类型详解
我们知道Redis是目前非常主流的KV数据库,它因高性能的读写能力而著称,其实还有另外一个优势,就是Redis提供了更加丰富的数据类型,这使得Redis有着更加广泛的使用场景.那Redis提供给用户的 ...
- JS-常见数据结构
常见数据结构 这一章节我们将来学习数据结构的内容.经常会有人提问说:学习数据结构或者算法对于前端工程师有用么? 总的来说,这些基础学科在短期内收效确实甚微,但是我们首先不要将自己局限在前端工程师这点上 ...
- Hexo+Github个人博客搭建 | 实战经验分享
概述 第一次尝试搭建属于自己的博客,并且成功了,非常开心. 很久之前就想搭建一个博客,可是也一直没有行动,最近在逛B站的时候发现一个up主(CodeSheep)的一个视频 <手把手教你从0开始搭 ...