**\-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
- mac