Docker10_1:DockerFile介绍及脚本指令
DockerFile介绍
dockerfile是用来构建docker镜像的文件,是一堆命令参数脚本。
dockerfile指令是忽略大小写的,建议用大写。
dockerhub查看dockerfile:
https://registry.hub.docker.com/_/centos?tab=description
点击就会跳转到GitHub
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
LABEL \
org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20201113" \
org.opencontainers.image.title="CentOS Base Image" \
org.opencontainers.image.vendor="CentOS" \
org.opencontainers.image.licenses="GPL-2.0-only" \
org.opencontainers.image.created="2020-11-13 00:00:00+00:00"
CMD ["/bin/bash"]
这也是为什么官方的centos连clear命令都没有的原因,因为官方的是最简单的centos。
DockerFile指令
指令 | 描述 | 示例 |
---|---|---|
FROM | 构建的新镜像是基于哪个镜像 | FROM centos:7 |
MAINTAINER | 镜像维护者姓名或邮箱地址,一般为姓名+邮箱的格式 | MAINTAINER name@emal |
RUN | 构建镜像时运行的Shell命令 | RUN [“yum”,“install”,“nginx”] RUN yum install nginx |
CMD | 运行容器时执行的Shell命令,只有最后的指令会生效,会被docker run后面的指令替代 | CMD [“-c”,“/start.sh”] CMD ["/usr/sbin/sshd","-D"] CMD /usr/sbin/sshd -D |
EXPOSE | 声明容器运行的服务端口 | EXPOSE 80 443 |
ENV | 设置容器内环境变量 | ENVMYSQL ROOT PASSWORD 123456 |
ADD | 拷贝文件或目录到镜像,如果是URL或压缩包会自动下载或自动解压 | ADD < src >… < dest > ADD ["< src >",…"< dest >"] ADD https://xxxcom/html.targz/var/www/html ADD htmltarqz/var/www/html |
COPY | 拷贝文件或目录到镜像,用法同上,类似ADD,拷贝文件的 | COPY ./startsh /startsh |
ENTRYPOINT | 运行容器时执行的Shell命令,可以追加命令,追加在daockerfile ENTRYPOINT指令后的命令的后面 | ENTRYPOINT ["/bin/bash","-c",“/start.sh"] ENTRYPOINT/bin/bash-c/startsh |
VOLUME | 指定容器挂载点到宿主机自动生成的目录或其他容器,这种方式是匿名挂载的,需要docker inspect再去查看挂载的目录,不是很方便 | VOLUME["/var/lib/mysql"] |
USER | 为RUN、CMD和ENTRYPOINT执行命令指定运行用户USER < user >[:< group >] or USER < UID>[:< GID >] | USERops 443 |
WORKDIR | 为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录 | WORKDIR /data |
HEALTHCHECK | 健康检查 | HEALTHCHECK --interval=5m --timeout=3s --retries=3 CMD curl -f http://ocalhost/ll exit 1 |
ARG | 在构建镜像时指定一些参数 | FROM centos:7 ARG user #ARGuser=root USER $user # docker build --build-arg user=ops DockerFile |
OUTBUILD | 当构建一个被继承 DockerFile 这个时候就会运行OUTBUILD的指令,触发指令 | FROM centos |
DockerFile构建步骤
- 编写dockerfile文件
- docker build构建成为一个镜像
- docker run运行容器
- docker push发布镜像(DockerHub、阿里云等)
基础知识
- 每个保留关键字(指令)都是大写的
- 执行顺序从上到下
- #表示注释
- 每一个指令都会创造一个新的镜像层,并提交
将dockerfile打成镜像
docker build -f mydockerfile-centos -t mycentos:0.1 .
# -f dockerfile路径,官方命名Dokcerfile,如果你也是,那么就不需要加-f去指定文件名了
# -t 指定镜像版本,TAG
# 结尾的.别少了