多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
**\-f :** 指定要使用的Dockerfile路径; **\-m :** 设置内存最大值; **\--tag, -t:** 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。 ***** **1.** 使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。 ~~~ docker build -t runoob/ubuntu:v1 . ~~~ **2.** 使用URL**github.com/creack/docker-firefox**的 Dockerfile 创建镜像。 ~~~ docker build github.com/creack/docker-firefox ~~~ **3.** 也可以通过 -f Dockerfile 文件的位置: ~~~ $ docker build -f /path/to/a/Dockerfile . ~~~ ***** [docker build ——“.”](https://www.cnblogs.com/panpanwelcome/p/12603701.html) 我们在使用 docker build 命令去构建镜像时,往往会看到命令最后会有一个 **.** 号。 docker build -t xxx **.** 这里的 **.** 号代表什么意思呢? 在跟后端小悦悦同学交流的过程中,就发现小悦悦同学对 . 号的理解有所偏差,以为是用来指定 Dockerfile 文件所在的位置的,但其实 -f 参数才是用来指定 Dockerfile 的路径的,那么 **.** 号究竟是用来做什么的呢? Docker 在运行时分为 Docker引擎(服务端守护进程) 以及 客户端工具, 我们日常使用各种 docker 命令,其实就是在使用客户端工具与 Docker 引擎 进行交互。 那么当我们使用 docker build 命令来构建镜像时,这个构建过程其实是在 Docker引擎中完成的,而不是在本机环境。 那么如果在 Dockerfile 中使用了一些 COPY 等指令来操作文件,如何让 Docker引擎 获取到这些文件呢? 这里就有了一个 镜像构建上下文 的概念,当构建的时候,由用户指定构建镜像的上下文路径,而 docker build 会将这个路径下所有的文件都打包上传给 Docker 引擎,引擎内将这些内容展开后,就能获取到所有指定上下文中的文件了。 比如说 dockerfile 中的 COPY ./package.json /project,其实拷贝的并不是本机目录下的 package.json 文件,而是 docker引擎 中展开的构建上下文中的文件,所以如果拷贝的文件超出了构建上下文的范围,Docker引擎 是找不到那些文件的。 所以 docker build 最后的 . 号,其实是在指定镜像构建过程中的上下文环境的目录。 理解了上面的这些概念,就更方便的去理解 .dockerignore 文件的作用了。 关于 .dockerignore 的使用参见另一篇博文: 文件的作用 .dockerignore 在项目中,我们见过很多各式各样的 ignore 文件。 比如使用 .gitignore 来忽略掉你不想追踪的文件:https://git-scm.com/docs/gitignore 使用 .npmignore 来忽略你在发布包时不想发布的文件:https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package 那么 .dockerignore 文件是起什么作用的呢,不管是在 docker build 过程中,还是 docker run 的过程中,有没有这个文件好像并没有什么很大的影响,存在感不强的一个文件。 首先需要理解一下 镜像构建上下文(context) 的概念,参见另一篇博文:docker build 命令后 . 号的意思 理解了这个概念就明白,当我们在 docker build 的过程中,首先会将指定的上下文目录打包传递给 docker引擎,而这个上下文目录中可能并不是所有的文件我们都会在 Dockerfile 中使用到,那么这个时候就可以在 .dockerignore 文件中指定在传递给 docker引擎 时需要忽略掉的文件或文件夹。 举栗说明~ 比如我们在前端项目中,node\_modules 文件夹在构建镜像过程中如果用不到,但是又异常庞大,那么向 docker引擎 传递其实是并没有必要的(其实大家电脑性能都这么好,也不在乎这几秒钟了。。。只是举个例子,可以提升镜像构建速度),这个时候就可以将 node\_modules 文件夹加入 .dockerignore 文件中。