开发者学堂课程【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 命令时,构建时需要执行的额外的命令。
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
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 —忽略某些语句。