Docker的Dockerfile腳本基本使用指南
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。
Dockerfile 语法
在我们深入讨论Dockerfile之前,让我们快速过一下Dockerfile的语法和它们的意义。
什么是语法?
非常简单,在编程中,语法意味着一个调用命令,输入参数去让应用执行程序的文法结构。这些语法被规则或明或暗的约束。程序员遵循语法规范以和计算机 交互。如果一段程序语法不正确,计算机将无法识别。Dockerfile使用简单的,清楚的和干净的语法结构,极为易于使用。这些语法可以自我释义,支持注释。
Dockerfile 语法示例
Dockerfile语法由两部分构成,注释和命令+参数
一个简单的例子:
复制代码代码如下:
# Print "Hello docker!"
RUN echo "Hello docker!"
Dockerfile 命令
Dockerfile有十几条命令可用于构建镜像,下文将简略介绍这些命令。
FROM 命令
复制代码代码如下:
FROM image
或
复制代码代码如下:
FROM image:tag
这个设置基本的镜像,为后续的命令使用,所以应该作为Dockerfile的第一条指令。
比如:
复制代码代码如下:
FROM ubuntu
如果没有指定 tag ,则默认tag是latest,如果都没有则会报错。
RUN 命令
RUN命令会在上面FROM指定的镜像里执行任何命令,然后提交(commit)结果,提交的镜像会在后面继续用到。
两种格式:
复制代码代码如下:
RUN command (the command is run in a shell - /bin/sh -c)
或:
复制代码代码如下:
RUN ["executable", "param1", "param2" ... ](exec form)
RUN命令等价于:
复制代码代码如下:
docker run image command
docker commit container_id
注释
使用 # 作为注释
如:
复制代码代码如下:
# Memcached
#
# VERSION 1.0/p
# use the ubuntu base image provided by dotCloud
FROM ubuntu
# make sure the package repository is up to date
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
# install memcached
RUN apt-get install -y memcached
MAINTAINER 命令
MAINTAINER
MAINTAINER命令用来指定维护者的姓名和联系方式
如:
复制代码代码如下:
MAINTAINER Guillaume J. Charmes, guillaume@dotcloud.com
ENTRYPOINT 命令
有两种语法格式,一种就是上面的(shell方式):
复制代码代码如下:
ENTRYPOINT cmd param1 param2 ...
第二种是 exec 格式:
复制代码代码如下:
ENTRYPOINT ["cmd", "param1", "param2"...]
如:
复制代码代码如下:
ENTRYPOINT ["echo", "Whale you be my container"]
ENTRYPOINT 命令设置在容器启动时执行命令
复制代码代码如下:
root@tankywoo-docker:~# cat Dockerfile
FROM ubuntu
ENTRYPOINT echo "Welcome!"/p
root@tankywoo-docker:~# docker run 62fda5e450d5
Welcome!
USER 命令
比如指定 memcached 的运行用户,可以使用上面的 ENTRYPOINT 来实现:
复制代码代码如下:
ENTRYPOINT ["memcached", "-u", "daemon"]
更好的方式是:
复制代码代码如下:
ENTRYPOINT ["memcached"]
USER daemon
EXPOSE 命令
EXPOSE 命令可以设置一个端口在运行的镜像中暴露在外
复制代码代码如下:
EXPOSE port [port...]
比如memcached使用端口 11211,可以把这个端口暴露在外,这样容器外可以看到这个端口并与其通信。
复制代码代码如下:
EXPOSE 11211
一个完整的例子:
复制代码代码如下:
# Memcached
#
# VERSION 2.2/p
# use the ubuntu base image provided by dotCloud
FROM ubuntu
MAINTAINER Victor Coisne victor.coisne@dotcloud.com
# make sure the package repository is up to date
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
# install memcached
RUN apt-get install -y memcached
# Launch memcached when launching the container
ENTRYPOINT ["memcached"]
# run memcached as the daemon user
USER daemon
# expose memcached port
EXPOSE 11211
上面是官方例子,国内建议换成163或sohu的源,不然太慢了。
复制代码代码如下:
root@tankywoo-docker:~# docker build -t tankywoo- Uploading context2.56 kB
Uploading context
Step 0 : FROM ubuntu
---> 99ec81b80c55
Step 1 : MAINTAINER Victor Coisne victor.coisne@dotcloud.com
---> Using cache
---> 2b58110877f6
Step 2 : RUN echo "deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse" > /etc/apt/sources.list
---> Running in f55a4a8bb069
---> d48c6a965398
Step 3 : RUN apt-get update
---> Running in da091a1dd6e7
Ign http://mirrors.163.com precise InRelease
Get:1 http://mirrors.163.com precise Release.gpg [198 B]
....
Processing triggers for libc-bin (2.19-0ubuntu6) ...
Processing triggers for ureadahead (0.100.0-16) ...
---> 2886671b5b86
Step 5 : ENTRYPOINT ["memcached"]
---> Running in e8aeeab92cb6
---> 7148293a4053
Step 6 : USER daemon
---> Running in 288766b19606
---> 235e7f630ffa
Step 7 : EXPOSE 11211
---> Running in c6f881b9d51f
---> 666c5d65f396
Successfully built 666c5d65f396
Removing intermediate container f55a4a8bb069
Removing intermediate container da091a1dd6e7
Removing intermediate container f23631d3d45a
Removing intermediate container e8aeeab92cb6
Removing intermediate container 288766b19606
Removing intermediate container c6f881b9d51f
ENV 命令
用于设置环境变量
复制代码代码如下:
ENV key value
设置了后,后续的RUN命令都可以使用。
使用此dockerfile生成的image新建container,可以通过 docker inspect 看到这个环境变量:
复制代码代码如下:
root@tankywoo-docker:~# docker inspect 49bfc7a9817f
...
"Env": [
"name=tanky",
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
...
里面的name=tanky就是设置的。
也可以通过在docker run时设置或修改环境变量:
复制代码代码如下:
docker run -i -t --env name="tanky" ubuntu:newtest /bin/bash
ADD 命令
从src复制文件到container的dest路径:
复制代码代码如下:
ADD src dest
src 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url
dest 是container中的绝对路径
VOLUME 命令
复制代码代码如下:
VOLUME ["mountpoint"]
如:
复制代码代码如下:
VOLUME ["/data"]
创建一个挂载点用于共享目录
WORKDIR 命令
复制代码代码如下:
WORKDIR /path/to/workdir
配置RUN, CMD, ENTRYPOINT 命令设置当前工作路径
可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令
比如:
复制代码代码如下:
WORKDIR /a WORKDIR b WORKDIR c RUN pwd
其实是在 /a/b/c 下执行 pwd
CMD 命令
有三种格式:
复制代码代码如下:
CMD ["executable","param1","param2"] (like an exec, preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (as a shell)
一个Dockerfile里只能有一个CMD,如果有多个,只有最后一个生效。
推薦系統(tǒng)
雨林木風(fēng) winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:WinXP雨林木風(fēng)在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)知名品牌,雨林木風(fēng)WindowsXP其系統(tǒng)口碑得到許多人認可,積累了廣大的用戶群體,是一款穩(wěn)定流暢的系統(tǒng),雨林木風(fēng) winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載,有需要的朋友速度下載吧。
系統(tǒng)等級:進入下載 >蘿卜家園win7純凈版 ghost系統(tǒng)下載 x64 聯(lián)想電腦專用
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win7蘿卜家園win7純凈版是款非常純凈的win7系統(tǒng),此版本優(yōu)化更新了大量的驅(qū)動,幫助用戶們進行舒適的使用,更加的適合家庭辦公的使用,方便用戶,有需要的用戶們快來下載安裝吧。
系統(tǒng)等級:進入下載 >雨林木風(fēng)xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載
系統(tǒng)大?。?/em>1.01GB系統(tǒng)類型:WinXP雨林木風(fēng)xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載,雨林木風(fēng)WinXP系統(tǒng)技術(shù)積累雄厚深耕多年,采用了新的系統(tǒng)功能和硬件驅(qū)動,可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動對硬件的加速,加固了系統(tǒng)安全策略,運行環(huán)境安全可靠穩(wěn)定。
系統(tǒng)等級:進入下載 >蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 V2023 X64位系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win10蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,(win10企業(yè)版,win10 ghost,win10鏡像),蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 ghost鏡像 X64位系統(tǒng)下載,其系統(tǒng)口碑得到許多人認可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來都以用戶為中心,是由蘿卜家園win10團隊推出的蘿卜家園
系統(tǒng)等級:進入下載 >蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 V2023 X64位系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win10蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 ghost X64位 系統(tǒng)下載,蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,其系統(tǒng)口碑得到許多人認可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來都以用戶為中心,是由蘿卜家園win10團隊推出的蘿卜家園win10國內(nèi)鏡像版,基于國內(nèi)用戶的習(xí)慣,做
系統(tǒng)等級:進入下載 >windows11下載 蘿卜家園win11專業(yè)版 X64位 V2023官網(wǎng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win11蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,windows11下載 蘿卜家園win11專業(yè)版 X64位 官網(wǎng)正式版可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動對硬件的加速,使得軟件在WINDOWS11系統(tǒng)中運行得更加流暢,加固了系統(tǒng)安全策略,WINDOWS11系統(tǒng)在家用辦公上跑分表現(xiàn)都是非常優(yōu)秀,完美的兼容各種硬件和軟件,運行環(huán)境安全可靠穩(wěn)定。
系統(tǒng)等級:進入下載 >
相關(guān)文章
- 《巫師3:狂獵》游戲中因缺失steam_api64.dll文件導(dǎo)致的問題應(yīng)該如何解決
- 解決《巫師3:狂獵》游戲中因缺失nvapi64.dll文件導(dǎo)致的問題
- 解決《巫師3:狂獵》游戲中因缺失phyx3common_64.dll文件導(dǎo)致的問題
- NBA 2K19啟動故障的深度解析與應(yīng)對策略——解決缺失msvcr110.dll文件的問題
- 解決《英雄連2》游戲中steam_api.dll文件丟失導(dǎo)致無法啟動的問題
- 解決《勇者斗惡龍:英雄》游戲中丟失steam_api64.dll文件的問題
- 解決《勇者斗惡龍:英雄》游戲中缺失msvcp110.dll文件的問題
- PUBG(絕地求生)因缺失DLL文件導(dǎo)致無法啟動的全方位解決方案及深度解析
- 當(dāng)電腦C盤滿載時,如何科學(xué)、高效地進行清理與釋放空間
- NewtabPro瀏覽器插件:集合ChatGPT、PDF轉(zhuǎn)換、OCR識別、谷歌翻譯及趣味減壓功能于一體的高效在線工具
- win11任務(wù)欄圖標(biāo)變黑變暗怎么辦?win11任務(wù)欄圖標(biāo)變暗處理教程分享
- win11搜索欄一直在加載無法使用深入解決方法分享
- win11休眠后喚醒點擊圖標(biāo)沒反應(yīng)?win11休眠后喚醒點擊圖標(biāo)沒反應(yīng)全方位解決指南
- 設(shè)置壁紙后不能鋪滿屏幕電腦桌面的邊緣顯示黑邊怎么處理?
熱門系統(tǒng)
推薦軟件
推薦應(yīng)用
推薦游戲
熱門文章
常用系統(tǒng)
- 1windows11最新穩(wěn)定版下載 電腦公司x64位 激活密鑰 筆記本專用下載
- 2win10中秋國慶版下載 深度技術(shù)64位專業(yè)版 Ghost鏡像下載 永久免費
- 3系統(tǒng)之家windows11企業(yè)版最新 ghost x64bit v2022.05下載
- 4深度技術(shù)win11娛樂版 X64位最新版下載 ISO鏡像 華碩電腦專用下載
- 5Windows7家庭版下載 電腦公司x86內(nèi)部版 官網(wǎng)鏡像下載 無需密鑰激活
- 6windowsXP系統(tǒng)之家 純凈版 V2023 XP ghost鏡像最新版下載
- 7電腦公司windows11專業(yè)版 x64 v2022.05 ghost下載
- 8外星人Win11游戲版系統(tǒng) WINDOWS11游戲?qū)S冒鎣2021.11
- 9Windows10經(jīng)典珍藏版下載 電腦公司 x64位穩(wěn)定版下載 筆記本專用