基本概念
Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
格式:#为注释,指令(大写)内容(小写),尽管指令是大小写不敏感的,但还是强烈推荐指令使用大写,内容是用小写作为区分
Docker是按照Dockerfile中的内容 自上向下 逐行执行的
每个Dockerfile的第一行非注释内容 必须是“FROM”指令 用于指定在构建镜像过程中指定基本镜像,后续的指令运行于这个基本镜像所提供的环境之中
基本镜像可以是任何可用镜像文件,默认情况下 docker会从本地检索镜像,当本地检索不到时 会从远端拉去镜像 并存到本地
# 这个是dockerfile 案例# 基础镜像 base imageFROM centos7# MAINTAINER 维护者信息MAINTAINER _cn@yeah.net# USER 指定使用base image 镜像的用户USER root# WORKDIR 设置进入镜像内 工作的目录 相当于cdWORKDIR /usr/share/nginx/html# ENV 设置环境变量ENV PATH /usr/local/nginx/sbin:$PATH#ADD 添加文件到容器内部,压缩文件拷过去会自动解压ADD nginx.tar.gz /usr/local/
常用指令
USER/WORKDIR
USER 用于指定镜像中使用的用户
WORKDIR 用于指定默认的工作目录
# vim dockerfileFROM centos7USER rootWORKDIR /:wqdocker build . -t centos7:20.10.26
ADD/EXPOSE
ADD 和 COPY 指令很像 但比其范围广 可以接受压缩包 urlEXPOSE 用来暴露端口 具有提示的作用 使用docker run -P随机映射端口时 会随机的从 EXPOSE指定的端口列表中进行映射 当使用 docker run -p 时 EXPOSE 并不生效
# nginx dockerfile 练习FROM docker.io/suyan0909/nginx:20.10.23MAINTAINER SuYanADD index.html /usr/share/nginx/html/index.htmlEXPOSE 80
RUN/ENV
RUN 在构建镜像时 执行命令 并不是在容器中
ENV 定义变量 或者环境变量
CMD/ENTRYPOINT
CMD 用于指定 容器中执行的指令
ENTRYPOINT 指定启动容器时的运行脚本文件
CMD 命令可以被自定义终端替换掉 如 docker run -it nginx /bin/echo 123
ENTRYPOINT 则不受 自定义终端的影响
构建 Dockerfile
# 构建当前目录下的 dockerfile文件生成镜像并指定镜像标签为docker.io/suyan0909/nginx:20.10.26docker build . -t docker.io/suyan0909/nginx:20.10.26
