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