日韩精品成人无码专区免费-国产99久久久久久免费看-国产精品丝袜久久久久久不卡-国产精品无码一区二区三区

Dockerfile命令介紹及用例解析

發布時間:2024-07-12 點擊:151
什么是dockerfile
dockerfile是由一系列命令和參數構成的腳本,這些命令應用于基礎鏡像并最終創建一個新的鏡像。它們簡化了從頭到尾的流程并極大的簡化了部署工作。dockerfile從from命令開始,緊接著跟隨者各種方法,命令和參數。其產出為一個新的可以用于創建容器的鏡像。
當你在使用 docker構建鏡像的時候,每一個命令都會在前一個命令的基礎上形成一個新層。這些基礎鏡像可以用于創建新的容器。本篇文章將手把手教您如何從基礎鏡像,一步一步,一層一層的從dockerfile構建容器的過程。
dockerfile示例
# version 1.0 form ubuntu:14.04 maintainer mao hongtu1993@sina.cn run apt-get update && apt-get install -y nginx run echo 'hello,i am work' > /usr/share/nginx/html/index.html expose 80 80docker執行步驟分析
以上dockerfile示例中,每條指令都會創建一個新的鏡像層并對鏡像進行提交.docker執行dockerfile大致流程:
docker從基礎鏡像運行一個容器;執行一條指令,對容器做出修改;執行類似docker commit的操作,提交一個新的鏡像層;docker再基于剛提交的鏡像運行一個新容器;執行dockerfile中的下一條指令,直到所有指令都執行完畢;示例解析
from:每個dockerfile的第一條命令是from.from指令指定一個已經存在的鏡像,則代表from后續的指令都是基于該鏡像(ubuntu14.04)進行的.maintainer:該指令告訴docker,作者和郵箱地址run:通俗地說,run指令會在shell里使用命令包裝器 /bin/sh -c 來執行.如果在不支持shell的平臺上運行,則可使用exec格式的run指令run [“apt-get”,”install”,”-y”,”nginx”]expose: 向外公開端口dockerfile指令匯總及解析
maintainer
我建議這個命令放在dockerfile的起始部分,雖然理論上它可以放置于dockerfile的任意位置。這個命令用于聲明作者,并應該放在from的后面。
# maintainer [name] [email] maintainer authors_name hongtu1993@sina.cnfrom
from命令可能是最重要的dockerfile命令。改命令定義了使用哪個基礎鏡像啟動構建流程。基礎鏡像可以為任意鏡 像。如果基礎鏡像沒有被發現,docker將試圖從docker image index來查找該鏡像。from命令必須是dockerfile的首個命令。
# from [image name] from ubuntuadd
add命令有兩個參數,源和目標。它的基本作用是從源系統的文件系統上復制文件到目標容器的文件系統。如果源是一個url,那該url的內容將被下載并復制到容器中。
# add [source directory or url] [destination directory] add /my_app_folder /my_app_folderrun
run命令是dockerfile執行命令的核心部分。它接受命令作為參數并用于創建鏡像。不像cmd命令,run命令用于創建鏡像(在之前commit的層之上形成新的層)。
# run [command] run apt-get updatecmd
和run命令相似,cmd可以用于執行特定的命令。和run不同的是,這些命令不是在鏡像構建的過程中執行的,而是在用鏡像構建容器后被調用。
# cmd application argument, argument, .. cmd echo hello mao!entrypoint
entrypoint幫助你配置一個容器使之可執行化,如果你結合cmd命令和entrypoint命令,你可以從cmd命令中移除“application”而僅僅保留參數,參數將傳遞給entrypoint命令。
# usage: entrypoint application argument, argument, .. # remember: arguments are optional. they can be provided by cmd # or during the creation of a container. entrypoint echo # usage example with cmd: # arguments set with cmd can be overridden during *run* cmd hello docker! entrypoint echoenv
env命令用于設置環境變量。這些變量以”key=value”的形式存在,并可以在容器內被腳本或者程序調用。這個機制給在容器中運行應用帶來了極大的便利。
# env key value env server_works 4 useruser命令用于設置運行容器的uid。
# user [uid] user 751volume
volume命令用于讓你的容器訪問宿主機上的目錄。
# volume [/dir_1, /dir_2 ..] volume [/my_files]workdir
workdir命令用于設置cmd指明的命令的運行目錄。
# workdir /path workdir ~/expose
expose指令用來告訴docker這個容器在運行時會監聽哪些端口,docker在連接不同的容器(使用–link參數)時使用這些信息;
兩個docker的核心概念是可重復和可移植。鏡像應該可以運行在任何主機上并且運行盡可能多的次數。在 dockerfile中你有能力映射私有和公有端口,但是你永遠不要通過dockerfile映射公有端口。通過映射公有端口到主機上,你將只能運行一個容器化應用程序實例。(譯者注:運行多個端口不就沖突啦)
# expose [port] # private and public mapping expose 80:8080 # private only expose 80最后我們來個簡單的示例吧
使用dockerfile自動構建nginx容器
因為我們命令docker用當前目錄的nginx的配置文件替換默認的配置文件,我們要保證這個新的配置文件存在。在dockerfile存在的目錄下,創建nginx.conf:
sudo nano nginx.conf然后用下述內容替換原有內容:
worker_processes 1; events { worker_connections 1024; } http { sendfile on; server { listen 80; location / { proxy_pass http://httpstat.us/; proxy_set_header x-real-ip $remote_addr; } } } 讓我們保存nginx.conf。之后我們就可以用dockerfile和配置文件來構建鏡像。


阿里云服務器租用價格表太原
線上教學哪個平臺好 實用的線上教學平臺推薦
寶塔面板如何開啟php擴展
網站被K(K站)
安徽云服務器租用報價表云空間
營業執照清楚呀-備案平臺
不會個人網站建站?輕松get免費建站新技能
網站改版為什么會降權?這些改版的條件需滿足