Docker解析及轻量级PaaS平台演练(三)--Dockerfile编写

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/46291461 在本篇中...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/46291461

在本篇中将介绍Dockerfile的编写

除了通过修改Image,创建Container,在打包成Image来创建我们需要的Image之外
我们还可以编写Dockerfile文件,通过build来创建我们需要的Image

Dockerfile是一个文件名,Docker规定必须是这样子来命名的
Dockerfile放在项目的根目录
通过docker build -t {镜像的名字} {项目的路径}
来读取Dockerfile中的代码自动构建一个Image

Dockerfile中每一行指令执行完之后都会提交成为一个Image,这样保证了指令之间不会有影响
而且Docker会尽可能的尝试复用之前的Image
可以通过在build命令中添加–no-cache方式来取消这种cache复用方式

Dockerfile中只支持自己定义的那套指令,在书写时建议全部使用大写

FROM {base Image}
必须放在Dockerfile的第一行,表示从哪个Image开始构建

MAINTAINER
可选的,用来标识Image作者

RUN
每个RUN指令都会是在新的Container中执行,并提交为Image,作为下一个RUN的base image
RUN[“executable”,”arg1”,…]

CMD
在Dockerfile中定义的CMD命令,在提交成Image的时候不会起作用,只有当使用这个Image来创建一个Container的时候,会在Container内部默认执行这条CMD命令
一个Dockerfile中只能有一个有效的CMD
当运行Container时如果指定了command,那么将会覆盖默认设置的这个CMD

下面来编写一个Demo Dockerfile

在/test目录下新建Dockerfile

FROM busybox:ubuntu-14.04
RUN touch /test.sh
CMD ["ls","-al","/"]
//默认执行ls -al /
//外部可以通过ls -al /usr甚至是ps -al来覆盖原有的command

使用build来构建Image

docker build -t jchubby/testimage /test 
//-t [image名] [Dockerfile目录]

运行结果如下:

这里写图片描述

ENTRYPOINT
之前的CMD是定义默认的command命令,但是在运行container的时候可以执行另外的command来覆盖原先的command
ENTRYPOINT的作用是在运行container的时候,设置默认要执行的command命令,是不可修改的,但是可以传不同的参数给这个command命令得到不同的结果
一个Dockerfile中只能有一个有效的ENTRYPOINT

使用ENTRYPOINT

FROM busybox:ubuntu-14.04
RUN touch /test.sh
ENTRYPOINT ["ls","-al"]
CMD["/"]
//默认会执行ls -al /
//外部只能通过传不同的路径,来得到对应目录的文件,只能使用ls命令

ADD&COPY
将host上的文件或目录复制到Image中,ADD如果是一个URL的情况下,会将其下载到指定的目录

FROM busybox:ubuntu-14.04
RUN touch /test.sh
ADD http://.... /test/..
//将指定网址的资源下载到/test/..文件中
ENTRYPOINT ["ls","-al"]
CMD["/"]

其他的一些Dockerfile指令

ENV
ENV key value
用来设置环境变量,后续的RUN可以使用其创建的环境变量
创建基于该Image的Container时也会自动拥有这些环境变量

WORKDIR
指定当前的工作目录

USER
指定在RUN的时候使用哪个用户

ONBUILD
类似于一个触发器,比如Image a的Dockerfile中制定了ONBUILD,Image b的Dockerfile指定FROM Image a,那么在构建Image b的时候会先执行Image a中的ONBUILD指定的操作(ONBUILD后面跟的是Dockerfile的指令)

VOLUME
通过VOLUME[“path1”,”path2”,…]
来指定某些目录为Container之间可以共享数据,访问的目录

相关文章
|
10月前
|
存储 安全 数据建模
Docker数据卷深入解析与操作技巧
通过巧妙使用Docker数据卷,我们就能实现数据的灵活管理和无缝迁移,享受容器化的便捷,同时确保数据的安全与高效共享。
188 6
|
8月前
|
Kubernetes Cloud Native 持续交付
Docker:轻量级容器化技术解析
Docker:轻量级容器化技术解析
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
1074 90
|
存储 Kubernetes 调度
Kubernetes、Docker和Containerd的关系解析
总的来说,Docker、Containerd和Kubernetes之间的关系可以用一个形象的比喻来描述:Docker就像是一辆装满货物的卡车,Containerd就像是卡车的引擎,而Kubernetes就像是调度中心,负责指挥卡车何时何地送货。
523 12
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
532 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
616 76
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
527 25
|
NoSQL Redis 数据库
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
763 10
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
14600 37
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
JSON Shell Linux
dockerfile 用法全解析
Dockerfile指令简介:`FROM`基于Alpine镜像;`WORKDIR`设置工作目录;`COPY`复制文件;`ADD`支持URL;`RUN`运行命令;`CMD`容器启动时执行;`ENTRYPOINT`与`CMD`组合执行;`EXPOSE`声明端口;`VOLUME`映射文件;`ENV`设置环境变量;`ARG`构建参数;`LABEL`元数据;`ONBUILD`触发命令;`STOPSIGNAL`停止信号;`HEALTHCHECK`健康检查;`SHELL`默认Shell。Alpine仅5M,小巧高效。
356 4
dockerfile 用法全解析

热门文章

最新文章