基本概念

Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
格式:#为注释,指令(大写)内容(小写),尽管指令是大小写不敏感的,但还是强烈推荐指令使用大写,内容是用小写作为区分
Docker是按照Dockerfile中的内容 自上向下 逐行执行的
每个Dockerfile的第一行非注释内容 必须是“FROM”指令 用于指定在构建镜像过程中指定基本镜像,后续的指令运行于这个基本镜像所提供的环境之中

基本镜像可以是任何可用镜像文件,默认情况下 docker会从本地检索镜像,当本地检索不到时 会从远端拉去镜像 并存到本地

  1. # 这个是dockerfile 案例
  2. # 基础镜像 base image
  3. FROM centos7
  4. # MAINTAINER 维护者信息
  5. MAINTAINER _cn@yeah.net
  6. # USER 指定使用base image 镜像的用户
  7. USER root
  8. # WORKDIR 设置进入镜像内 工作的目录 相当于cd
  9. WORKDIR /usr/share/nginx/html
  10. # ENV 设置环境变量
  11. ENV PATH /usr/local/nginx/sbin:$PATH
  12. #ADD 添加文件到容器内部,压缩文件拷过去会自动解压
  13. ADD nginx.tar.gz /usr/local/

常用指令

USER/WORKDIR

USER 用于指定镜像中使用的用户
WORKDIR 用于指定默认的工作目录

  1. # vim dockerfile
  2. FROM centos7
  3. USER root
  4. WORKDIR /
  5. :wq
  6. docker build . -t centos7:20.10.26

ADD/EXPOSE

ADD 和 COPY 指令很像 但比其范围广 可以接受压缩包 url
EXPOSE 用来暴露端口 具有提示的作用 使用docker run -P随机映射端口时 会随机的从 EXPOSE指定的端口列表中进行映射 当使用 docker run -pEXPOSE 并不生效

  1. # nginx dockerfile 练习
  2. FROM docker.io/suyan0909/nginx:20.10.23
  3. MAINTAINER SuYan
  4. ADD index.html /usr/share/nginx/html/index.html
  5. EXPOSE 80

RUN/ENV

RUN 在构建镜像时 执行命令 并不是在容器中
ENV 定义变量 或者环境变量

CMD/ENTRYPOINT

CMD 用于指定 容器中执行的指令
ENTRYPOINT 指定启动容器时的运行脚本文件

CMD 命令可以被自定义终端替换掉 如 docker run -it nginx /bin/echo 123
ENTRYPOINT 则不受 自定义终端的影响

构建 Dockerfile

  1. # 构建当前目录下的 dockerfile文件生成镜像并指定镜像标签为docker.io/suyan0909/nginx:20.10.26
  2. docker build . -t docker.io/suyan0909/nginx:20.10.26