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: # ...
随机推荐
- LeetCode--300. 最长递增子序列
题目:给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4 ...
- 【JS】325- 深度理解ES6中的解构赋值
点击上方"前端自习课"关注,学习起来~ 对象和数组时 Javascript 中最常用的两种数据结构,由于 JSON 数据格式的普及,二者已经成为 Javascript 语言中特别重 ...
- 【系列专题】JavaScript设计模式 重温系列(9篇全)
JavaScript 设计模式 [JS]164-JavaScript设计模式--单体模式 [JS]165-JavaScript设计模式--工厂模式 [JS]166-JavaScript设计模式--迭代 ...
- kubernetes-集群构建
本实验参考:https://github.com/gjmzj/kubeasz kubernetes官方github地址 https://github.com/kubernetes/kubernetes ...
- Vue中无法检测到数组的变动
本周在写项目中遇到修改数组中的值时,视图无变化问题.在查阅Vue官方文档后了解到,由于由JavaScript 的限制,Vue 不能检测以下数组的变动: 当利用索引直接设置一个数组项时,例如:vm.it ...
- 3年Java开发都知道的Redis数据结构和通用命令
Redis的数据结构 Redis支持多种不同的数据结构,包括5种基础数据结构和几种比较复杂的数据,这些数据结构可以满足不同的应用场景. 五种基础数据结构 String:字符串,是构建其他数据结构的基础 ...
- django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询
from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...
- 五分钟学会conda常用命令
文章目录 conda常用命令 1. 获取版本号 2. 获取帮助 3. 环境管理 4. 分享环境 5. 包管理 conda常用命令 1. 获取版本号 conda --version 或 conda -V ...
- Java并发之synchronized关键字深度解析(二)
前言 本文继续[Java并发之synchronized关键字深度解析(一)]一文而来,着重介绍synchronized几种锁的特性. 一.对象头结构及锁状态标识 synchronized关键字是如何实 ...
- c++-多态小案例
多态小案例 C面向接口编程和C多态 函数类型语法基础 函数指针做函数参数(回调函数)思想剖析 函数指针做函数参数两种用法(正向调用.反向调用) 纯虚函数 抽象类 抽象类基本概念 抽象类在多继承中的应用 ...