Docker(五)如何构建Dockerfile
摘自
https://mp.weixin.qq.com/s/_hq9dPe6390htN8BTkoQeQ
?
一、Dockerfile的指令集
由于Dockerfile中所有的命令都是以下格式:INSTRUCTION argument,指令(INSTRUCTION)不分大小寫,但是約定俗成是大寫的。
1、FROM
FROM是用于制定基礎(chǔ)的images,一般格式為FROM<images> or FROM<IMAGE>:<TAG>?,所以有的Dockerfile都用該以FROM開頭,FROM命令指明Dockerfile所創(chuàng)建的鏡像文件以什么鏡像為基礎(chǔ),FROM以后的所有指令都會(huì)在FROM的基礎(chǔ)上進(jìn)行創(chuàng)建鏡像。可以在同一個(gè)Dockerfile中多次使用FROM命令用于創(chuàng)建多個(gè)鏡像。比如我們需要指定python2.7的基礎(chǔ)鏡像,可以像如下寫法一樣:
FROM python:2.7?
2、MAINTAINER
MAINTAINER是用于指定鏡像創(chuàng)建者和聯(lián)系方式,一般格式為MAINTAINER<name>。這里我設(shè)置我的ID和郵箱
MAINTAINER AAA <AAA@ffff.com>?
3、COPY
COPY是用于復(fù)制本地主機(jī)的<src>(為Dockerfile所在目錄的相對(duì)路徑)到容器中的<dest>。當(dāng)使用本地目錄為源目錄時(shí),推薦使用copy。一般格式為copy <src><dest>。例如我們要拷貝當(dāng)前目錄到容器中的/app目錄下,我們可以這樣操作
COPY . /app?
4、WORKDIR
WORKDIR用于配合RUN,CMD,ENTRYPOINT命令設(shè)置當(dāng)前工作路徑。可以設(shè)置多次,如果是相對(duì)路徑。一般格式為 WORKDIR/path/to/word/dir。
WORKDIR /app?
5、RUN
RUN pip install -r requirements.txt?
6、EXPOSE
EXPOSE命令用來指定對(duì)外開放的端口。一般格式為EXPOSE<PORT>,例如上面那個(gè)例子,開放5000端口:
EXPOSE 5000?
7、ENTRYPOINT
ENTRYPOINT可以讓你的容器表現(xiàn)得像一個(gè)可執(zhí)行程序一樣。一個(gè)Dockerfile中只能有一個(gè)ENTRYPOINT,如果有多個(gè),則最后一個(gè)生效。格式有兩種
- ENTRYPOINT["executable", "param1", "param2"]:推薦使用的exec形式
- ENTRYPOINT command param1 param2: shell形式
?
例如下面這個(gè),我們要將python變成那個(gè)可執(zhí)行的程序,我們可以這樣取做:
ENTRYPOINT ["python"]?
8、CMD
CMD命令用于啟動(dòng)容器時(shí)默認(rèn)的執(zhí)行命令,CMD命令可以包含可執(zhí)行文件,也可以不包含可執(zhí)行文件。不包含可執(zhí)行文件的情況下就要用ENTRYPOINT指定一個(gè),然后CMD命令參數(shù)就會(huì)作為ENTRYPOINT的參數(shù)。
CMD命令有三種格式:
- CMD["executable", "param1", "param2"]: 推薦使用的exec形式
- CMD["param1", "param2"]: 無(wú)可執(zhí)行程序形式
- CMD command param1 param2: shell形式
一個(gè)Dockerfile中只能有一個(gè)CMD,如果有多個(gè),則最后一個(gè)生效。而CMD的shell形式默認(rèn)調(diào)用 /bin/sh -c執(zhí)行命令。CMD命令會(huì)被Docker命令行傳入的參數(shù)覆蓋: docker run busybox /bin/ echo Hello Docker會(huì)把CMD里的命令覆蓋。
例如我們要啟動(dòng) /app,我們可以用如下命令實(shí)現(xiàn):
CMD ["app.py"]?
二、構(gòu)建Dockerfile
我們大體已經(jīng)把Dockerfile的寫法講述完畢,我們可以自己動(dòng)手寫一個(gè)例子:
?
FROM nginx MAINTAINER AAAA <AAAA@FFFF.com> RUN echo 'Hello World' > /usr/share/nginx/html/index.html?
轉(zhuǎn)載于:https://www.cnblogs.com/ylxn/p/10510492.html
總結(jié)
以上是生活随笔為你收集整理的Docker(五)如何构建Dockerfile的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 方法和集合
- 下一篇: 12.oauth密码模式identity