DockerFile 保留字指令 | 学习笔记

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 快速学习 DockerFile 保留字指令

开发者学堂课程【Docker 快速入门:DockerFile 保留字指令】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/616/detail/9407


DockerFile 保留字指令

DockerFile 体系结构

1.FORM — 基础镜像,当前新镜像是基于哪个镜像的

CentOS 是基于 scratch 镜像的,

FROM scratch
MAINTAINER The CentOS Project<cloud-ops@centos.org>
ADD c68-docker. tar. xz/
LABEL name="CentOS Base Image"\
vendor="Cent0S"\
license="GPLv2"\
build-date=“2016-06-02”

#Default command
CMD["/bin/bash"]

2.MAINTAINER —镜像维护者的姓名与邮箱地址

MAINTAINER The CentOS  Project<cloud-ops@centos.org>

3.RUN —容器构建时需要运行的命令

程序从上至下执行,遇到 RUN 命令时,构建时需要执行的额外的命令。

image.png

centOS 中查找  redis 镜像,找到 redis 4.0,添加 redis 用户组,并且添加 redis 用户。

RUN groupadd -r redis && useradd  -r  -g redis redis

构建镜像过程中执行具体命令

4. EXPOSE —该镜像变成实例对外启动以后,它服务的端口号

EXPOSE 6379

5. WORKDIR —指定在创建容器后,终端默认登录的进来工作目录,一个落脚点

WORKDIR /date

登录 docker run -it centos 运行实例,获得实例# pwd/,如图,因 为在 centos 中没有指定,默认的 centos 落脚点是根目录,后续有修改镜像,如图:

docker run -it centos

# cd /tmp

# pwd/tmp

image.png

6.ENV —用来在构建镜像过程中设置环境变量

设置变量 MY_PATH,值为 /usr/mytest

这个环境变量可以在后续的任何RUN 指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其他指令中直接使用这些环境变量。

如果在 centOS中执行 WORKDIR $MY_PATH,不会登录根目录,落脚点是/usr/mytest

7.ADD —将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL和解压 tar 压缩包

ADD c68-docker. tar. xz/

ADD 相当于 COPY,在构建 Dockerfile 路径的时候,将 jar 包拷贝进镜像中。

但 ADD 还具有解压缩的功能,比 COPY 更加强大。ADD 相当于快递送到目的地后,拆掉外包装,而 COPY 只有将快递送到目的地这一个功能。ADD=COPY+解压缩

8. COPY —类似 ADD,拷贝文件到镜像中。

将从构建上下文件目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

(1)COPY src dest   脚本类写法

(2)COPY [“src’,’”dest”]  计算串写法

9.VOLUME  —容器数据卷,用于数据保存和持久化工作

如:

FROM centOS

VOLUME [“/dataVolumeContainer1”,“/dataVolumeContainer2”]

建 centOS 时,同时在根目录上创建两个活动硬盘(容器卷)

10.CMD —(1)指定一个容器启动时要运行的命令;

CMD 容器启动命令
CMD 指令的格式和 RUN 相似,也是两种格式:
shell 格式: CMD <命令>
exec 格式: CID ["可执行文件”, "参数1”,“参数2"..]
参数列表格式: CMD ["参数1", "参数2"...]。

在指定了ENTRYPOINT 指令后,用 CMD 指定具体的参数。

(2)Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

如:#Default command

CMD[“/bin/bash”]

CMD cat /etc/hosts

在构建时, CMD[“/bin/bash”] 此命令会执行,但 CMD cat /etc/hosts 命令会覆盖上条命令执行的效果。

11. ENTRYPOINT —(1)指定一个容器启动时要运行的命令;

(2)ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数

与 CMD 后人工添加的参数会将 dockerfile 中的最后一条命令覆盖不同,ENTRYPOINT 后会变为追加。

12.ONBULID —当构建一个被继承的 Dockerfile 时运行命令,父镜像在被子镜像继承后父镜像的 onbulid 被触发(触发器,倒钩刺)

子镜像继承了父镜像,运行后,父镜像还需要进行其他收尾工作,需要 ONBULID 命令,类似于触发器。

Dockerfile

BULID

Both

RUN

FROM

WORKDIR

CMD

MAINTAINER

USER

ENV

COPY

 

EXPOSE

ADD

 

VOLUME

RUN

 

ENTRYPOINT

ONBULID

 

 

.dockerignore

 

 

USER  —那一组的哪个运服 ID,可以运行 dockerfile,实际中哪个运服 ID 编写,哪个就运行,意义不大 .dockerignore —忽略某些语句。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
应用服务中间件 nginx Docker
Dockerfile语法详解
Dockerfile语法详解
23 0
|
应用服务中间件 Shell Linux
DockerFile 中的保留字(指令)说明
FROM 表示新构建的镜像是基于哪个镜像的,指定一个已存在的镜像作为模板。dockerfile中第一条必须是from
|
6月前
|
运维 Linux Shell
Dockerfile中的保留字指令讲解
Dockerfile中的保留字指令讲解
98 0
|
6月前
|
JSON 物联网 Shell
Dockerfile指令详解
Dockerfile指令详解
118 0
|
6月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
59 0
Dockerfile(3) - WORKDIR 指令详解
Dockerfile(3) - WORKDIR 指令详解
1033 0
|
Shell Docker 容器
dockerfile语法
dockerfile语法
114 0
|
NoSQL 安全 Java
DockerFile 保留字指令|学习笔记
快速学习 DockerFile 保留字指令
DockerFile 保留字指令|学习笔记
|
存储 Shell 应用服务中间件
学习Docker就应该掌握的dockerfile语法与指令
在日常的工作中,常常需要制作自己的项目的镜像,一般通过以下两种方式制作镜像:Docker commit、Dockerfile。 ## Docker commit Docker commit一般用做从一个运行状态的容器来创建一个新的镜像。定制镜像应该使用Dockerfile来完成。 ``` docker commit 容器名 新镜像名:tag ``` 使用这种方式的缺点是:1.对外不
Dockerfile(1) - FROM 指令详解
Dockerfile(1) - FROM 指令详解
599 0