如何使用
Dockerfile用來(lái)創(chuàng)建一個(gè)自定義的image,包含了用戶(hù)指定的軟件依賴(lài)等搭独。當(dāng)前目錄下包含Dockerfile,使用命令build來(lái)創(chuàng)建新的image,并命名為edwardsbean/centos6-jdk1.7:
docker build -t edwardsbean/centos6-jdk1.7 .
Dockerfile關(guān)鍵字
如何編寫(xiě)一個(gè)Dockerfile,格式如下:
FROM
基于哪個(gè)鏡像
RUN
安裝軟件用
MAINTAINER
鏡像創(chuàng)建者
CMD
Container啟動(dòng)時(shí)執(zhí)行的命令,但是一個(gè)Dockerfile中只能有一條CMD命令苦囱,多條則只執(zhí)行最后一條CMD.
CMD主要用于container時(shí)啟動(dòng)指定的服務(wù)鞠鲜,當(dāng)Docker run command的命令匹配到CMD command時(shí)宁脊,會(huì)替換CMD執(zhí)行的命令。如:Dockerfile:
CMD echo hello world
運(yùn)行一下試試:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmdhello world
一旦命令匹配:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd echo hello edwardsbeanhello edwardsbean
ENTRYPOINT
container啟動(dòng)時(shí)執(zhí)行的命令贤姆,但是一個(gè)Dockerfile中只能有一條ENTRYPOINT命令榆苞,如果多條,則只執(zhí)行最后一條
ENTRYPOINT沒(méi)有CMD的可替換特性
USER
使用哪個(gè)用戶(hù)跑container如:
ENTRYPOINT ["memcached"]USER daemon
EXPOSE
container內(nèi)部服務(wù)開(kāi)啟的端口霞捡。主機(jī)上要用還得在啟動(dòng)container時(shí)坐漏,做host-container的端口映射:
docker run -d -p 127.0.0.1:33301:22 centos6-ssh
container ssh服務(wù)的22端口被映射到主機(jī)的33301端口
ENV
用來(lái)設(shè)置環(huán)境變量,比如:
ENV LANG en_US.UTF-8ENV LC_ALL en_US.UTF-8
ADD
將文件<src>拷貝到container的文件系統(tǒng)對(duì)應(yīng)的路徑<dest>所有拷貝到container中的文件和文件夾權(quán)限為0755,uid和gid為0如果文件是可識(shí)別的壓縮格式碧信,則docker會(huì)幫忙解壓縮
如果要ADD本地文件赊琳,則本地文件必須在 docker build <PATH>,指定的<PATH>目錄下
如果要ADD遠(yuǎn)程文件砰碴,則遠(yuǎn)程文件必須在 docker build <PATH>躏筏,指定的<PATH>目錄下。比如:
docker build github.com/creack/docker-firefox
docker-firefox目錄下必須有Dockerfile和要ADD的文件
注意
:使用docker build - < somefile方式進(jìn)行build呈枉,是不能直接將本地文件ADD到container中趁尼。只能ADD url file.
ADD只有在build鏡像的時(shí)候運(yùn)行一次,后面運(yùn)行container的時(shí)候不會(huì)再重新加載了猖辫。
VOLUME
可以將本地文件夾或者其他container的文件夾掛載到container中酥泞。
WORKDIR
切換目錄用,可以多次切換(相當(dāng)于cd命令)啃憎,對(duì)RUN,CMD,ENTRYPOINT生效
ONBUILD
ONBUILD 指定的命令在構(gòu)建鏡像時(shí)并不執(zhí)行芝囤,而是在它的子鏡像中執(zhí)行