1.dockerfile指令格式
# Comment
注釋INSTRUCTION argument
指令名 + 參數
2.普通指令
1. FROM
已存在的鏡像,基礎鏡像,第一條非注釋指令
FROM <image>
FROM <image>:<tag>
2. MAINTAINER
鏡像作者信息、聯系信息
與dockercommit -a
類似
MAINTAINER <name>
3. RUN
指定當前鏡像中運行的命令
每一個RUN指令都毀在當層鏡像的上層創建一個新的鏡像
RUN <command>
shell模式
默認/bin/sh -c command
RUN ["executable","param1","param2"]
exec模式
指定其他shell:
RUN["/bin/bash","-c","echo hello"]
docker 構建過程:
docker build -t="NAME"
-t 指定鏡像名
4. EXPOSE
指定運行該容器使用的端口
EXPOSE <port>[<port>...]
出於安全考慮,使用中仍需用 -p <port>
命令指定
3. CMD
ENTERYPOINT
容器運行時運行的命令
1. CMD
CMD ["executable","param1","param2"]
exec模式
CMD <command>
shell模式
與RUN區別:RUN是在容器構建是運行,CMD是在容器運行時運行。在docker run中指定命令,會覆蓋CMD命令,即CMD是默認命令。
CMD ["param1","param2"]
做為ENTRYPOINT指令的默認參數
2. ENTERYPOINT
CMD ["executable","param1","param2"]
exec模式
CMD <command>
shell模式
與CMD區別:不會被docker run 中運行的命令覆蓋。可以使用
docker run --entrypoint
覆蓋。entrypoint可與cmd組合:entrypoint指定命令,cmd指定參數。
4. ADD
COPY
VOLUME
設置鏡像目錄及文件
1. ADD
包含類似tar的解壓功能,安裝tar有所幫助
ADD <src>...<dest>
ADD ["<src>"..."<dest>"]
適用於文件路徑有空格的情況
2. COPY
使用於純粹復制文件
COPY <src>...<dest>
COPY ["<src>"..."<dest>"]
適用於文件路徑有空格的情況
3. VOLUME
VOLUME["/data"]
用於創建的容器添加卷,一個卷可以存在一個或多個容器的特定目錄,這個目錄可以跨過聯合文件系統,並提供如共享數據,對數據持久化功能。
5. WORKDIR
ENV
USER
鏡像在構建及容器運行時的環境設置
1. WORKDIR
在容器內部設置工作目錄
WORKDIR /path/to/workdir
cmd、entrypoint命令都會在這個目錄下執行。
一般使用絕對路徑,如果用相對路徑會一直傳遞下去。
2. ENV
設置環境變量,在構建過程中和運行中均有效
ENV <key> <value>
ENV <key>=<value>
3. USER
容器以什么用戶運行,不指定默認為root
USER daemon
USER uid:gid
USER user:group
6. ONBULID
類似觸發器的指令
ONBULID [INSTRUCTION]
為鏡像添加觸發器,當一個鏡像被用作其他鏡像的基礎鏡像時,觸發器被執行,當子鏡像被構建時,會插入觸發器的指令。ONBUILD指令不會在自己構建時運行。
7.構建鏡像
默認會使用構建緩存,但是類似於 apt-get update
不希望使用緩存,需要加上--no-cache
或是在Dockerfile
中修改ENV REFRESH_DATE 日期
,便會使緩存刷新。
查看構建過程:docker history [image]
在安裝nginx的容器中以后台程序運行NGINX:
docker run -d --name nginx -p 80 unbuntufornginx nginx -g "daemon off;"