**\-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 文件中。
- 空白目录
- containerd
- php
- php常用函数
- 点语法
- 依赖注入
- 反射
- 迭代器和yield
- array_walk
- str_replace
- openssl_decrypt
- array_merge
- 闭包
- 深拷贝与浅拷贝
- 面向对象
- 魔术方法
- __invoke
- __isset 和 __unset
- __clone
- 常用知识点
- 访问权限
- 抽象类
- 多态
- php框架
- tp
- tp3
- tp5
- job
- laravel
- 中间件
- laravel闭包
- symfony
- 小工具
- phpexcel
- xlswrite
- 设计模式
- 事件event
- 里氏替换原则
- 借鉴
- RESTful API
- 环境安装
- 编译安装
- 编译安装后扩展补充
- php小记录
- php-fpm
- 容器(Container)
- composer
- composer踩坑
- mysql
- 基础知识
- 外键
- 索引
- 触发器
- 定时器
- 分表
- 分区
- 连接查询
- 事务
- 锁机制
- 视图
- 存储过程
- 查询
- 字符截取
- 批量修改表名(前缀)
- explain
- when_case
- pdo
- mysql优化
- 主从复制
- 权限分配
- 实用例子
- 查询用户
- 常见问题
- 5.7group by问题
- 远程链接慢问题
- 查看进程
- 远程访问
- 常用小记
- mysqldump
- 备份还原
- 系统盘迁移数据盘
- 安装sql
- 安装MariaDB
- docker
- 安装docker
- 配置centos开发环境
- docker运行程序
- rabbitmq
- 删除无用镜像
- 解决Centos firewalld导致的docker容器内无法访问外网,无法访问其他容器(host没办法解析)
- docker-compose
- docker-selenium
- ports 配置
- docker-compose-settings
- 安装
- docker-compose常用配置
- docker常用命令
- build
- docker-hub加速
- docker-run
- Dockerfile
- apt-get update 无法升级
- 阿里打标签
- 打包流程
- docker-network
- ufw 允许 docker 容器联网
- 安装containerd
- linux
- centos7
- 常用语法
- chmod
- chown
- find
- grep
- /etc/passwd
- chattr
- In软连接
- 文件目录大小
- xargs
- 管道用法
- top
- free
- 端口占用
- 压缩解压
- tar
- gzip
- zip
- 2>&1
- 环境变量
- 服务管理
- systemctl
- sed
- shell脚本
- time
- journal
- history
- linux-set
- linux-curl
- cp
- umask
- mkdir
- http状态码
- awk
- lsof
- crontab
- supervisor
- 常用命令汇总
- 用户权限
- 普通用户添加sudo权限
- sudo su
- 添加用户
- 查看用户信息
- 修改用户信息
- 特殊权限
- 系统命令
- 常用小技巧
- vim小技巧
- 防火墙
- 常用规则
- iptables
- 磁盘清理
- 分区挂载
- linux-sh
- tmux
- 多命令执行
- 常用工具
- telnet
- ip转发
- nohup
- watch
- dig
- 查看磁盘IO
- ssh
- 修改ssh端口
- ssh免密登录
- 配置文件
- 公钥分发
- xsync
- 国内镜像站
- github加速
- 测网速
- 网卡
- 清理日志备份
- 配置sftp
- shell
- rpm
- 安全
- 安装openssl
- 安装openssh
- 禁用selinux和防火墙
- lanp环境安装
- versionTool
- git
- git基本用法
- Gogs搭建
- git钩子
- git的习惯配置
- phpStorm设置git bash
- git bash 设置代理
- gitignore 不起作用的解决办法
- gitea搭建
- 同步主干到fork
- git修改地址
- svn
- svn基本操作
- svn 钩子应用
- svn多版本操作
- Go语言
- Go语言基础
- 安装环境
- linux安装
- window安装
- 工具使用教程
- linux终端分屏Screen
- keepass 帐号密码管理
- phpstorm
- 去掉window换行符
- php_cs
- 自定义快捷模块
- phpstorm快捷键
- curl
- 正则
- 设计架构
- 设计模式的六大原则
- 计算机基础
- TCP三次握手
- OSI7层
- http状态返回码
- 前端框架
- Vue
- Angular
- React
- node
- 服务端渲染(SSR)
- MVVM
- nuxt
- pm2
- js
- Promise
- es6
- 常用站点
- 工具类
- 学习类
- ps常用命令
- nginx
- 缓存
- 配置
- TCP
- 常用配置
- ng优先级
- vhost注意点
- nginx第一层验证
- 转发(跨域问题)
- 404
- nginx日志格式化
- 重启脚本
- 宝塔禁用境外ip访问
- ng统计
- ng编译安装
- 防盗链
- 技术相关了解
- ddos
- xss
- mysql防注入
- csrf攻击
- 邮箱系统原理
- DNS
- python
- Selenium
- 微信
- 公众号
- 公众号配置
- 用户授权
- 小程序
- 公有云
- 华为云
- JAVA
- springboot
- windows
- service
- WSL
- 目录迁移
- wsl2 踩坑
- NoSql
- mongodb
- 安装mongodb
- redis
- redis-windows
- redis-linux
- openstack
- ====副业====
- 撸茅台
- 网络
- 单位换算
- DB
- clickhouse