跳至主要內容

Dockerfile

微信公众号:储凡2023/2/23大约 8 分钟

Dockerfile

运行流程

  • docker从基础镜像运行一个容器
  • 执行一条指令并对容器做出修改
  • 执行类似docker commit 的操作提交一个新的镜像层
  • docker再基于提交的镜像运行一个容器
  • 执行dockerfile中的下一条指令知道所有指令都执行完成

常用指令

FROM

基础镜像,当前新镜像基于那个镜像,指定一个已经存在的镜像作为模板,一般第一条指令为FROM

MAINTAINER

镜像维护者的姓名和邮箱地址,表明联系方式

RUN

容器构建时需要运行的命令,一般有两种格式:

  • shell指令格式
  • exec命令格式 :RUN ['参数一' , '参数二' , ...]

RUN是在执行docker bulid命令时候运行的

EXPOSE

当前容器需要对外暴露的端口

WORKDIR

指定在容器创建后,终端默认登陆后进来的工作目录,即:文件路径落脚点

USER

指令该镜像需要什么样的用户角色去执行,如果没有指定,就默认root用户

ENV

用来在构建过程中,设置镜像的环境变量 方便后面使用;

ADD

将宿主机目录下的文件拷贝到镜像中,并且会自动处理URL和解压tar压缩包

COPY

类似ADD保留字功能,用来拷贝文件和目录到镜像中

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

  • COPY src dest
  • COPY ["src" , "dest" ]
  • <src源路径>: 源文件或者源目录
  • <dest目标路径>:容器内的指定路径,该路径不用事先建好,如果没有会自动创建

VOLUME

容器卷,可以用来实现文件的映射

CMD

用来指定容器启动后需要做的事情/流程,

CMD指令和RUN指令格式相似,支持两种格式:

  • shell格式: CMD <命令>
  • exec 格式: CMD ["参数一" , "参数二" ,"...."]
  • 参数列表格式: CMD ["参数一" , "参数二" , "..."],在指定了ENTRYPOINT指令后,用CMD指定具体的参数

注意:dockerfile中可以有多个CMD指令,但是只有最后一个会生效,CMD会被docker run之后的参数/bin/bash替换掉

CMD指令和RUN指令的区别:

  • CMD命令是在docker run时运行
  • RUN命令是在docker build命令时运行

ENTRYPOINT

也是用来指定一个容器启动时要运行的命令,类似CMD指令,注意传参格式

构建镜像

用来构建node.js镜像,部署项目


# 安装node
FROM node:12.6.0-alpine
# 标签
LABEL version="Beta1.0"
LABEL description="基于egg框架实现的Oauth2统一认证登录"
# 作者
LABEL author="微信公众号:储凡"
LABEL email="mmdapl@163.com"
# 创建项目空间
RUN mkdir -p /web-project/node/oauth2-service
# 将当前代码文件复制到工作区域
COPY .. /web-project/node/oauth2-service
# 进入 vendors
WORKDIR /web-project/node/oauth2-service
# 指定npm仓库
RUN npm install --registry https://registry.npm.taobao.org
# 暴露端口
EXPOSE 8848
# 项目启动
CMD ["npm","run","start"]

更新日志

2024/7/31 09:24
查看所有更新日志
  • 842f3-feat: 调整导航栏,对文档排版和显示做了些优化
  • 5a2b2-feat: 移除markdown-cli模块,采用prettier校验文档格式
  • a3cca-refactor: 替换eslint规则,使用antfu/eslint模块 (#138)
  • c0f2d-refactor: 升级vuepress相关版本,优化项目结构 (#137)
  • 82053-feat: 更新忽略文件、链接地址
  • c374b-feat: 更新一些文档的固定链接 (#87)
  • b0275-feat(markdownlint-cli): 添加markdown文档校验,支持lint脚本自动格式化文档
  • 02ab1-style: 文档目录调整,修改mdEnhance配置
  • 3852a-feat: docker相关文章
  • a23ce-refactor: 新增manuscript目录,优化文稿结构
  • bc074-docs(server-end): egg框架相关文档
贡献者: Chu Fan,喜欢葡萄+芝士的妹妹,chufan,142vip.cn,mmdapl