Docker 透過讀取 Dockerfile 中的指令來構建映象。Dockerfile 是一個文字檔案,其中包含構建原始碼的指令。
以下是最常見的指令型別:
操作說明 | 描述 |
---|---|
FROM <image> |
為您的影像定義一個基礎。 |
RUN <command> |
在當前影像之上的新層中執行任何命令並提交結果。RUN 還具有用於執行命令的 shell 形式。 |
WORKDIR <directory> |
為Dockerfile 中其後的任何RUN 、CMD 、ENTRYPOINT 、COPY 和指令設定工作目錄。ADD |
COPY <src> <dest> |
<src> 從路徑中的容器檔案系統複製新檔案或目錄並將其新增到其中<dest> 。src在主機,dest在容器 |
CMD <command> |
允許您定義基於此映像啟動容器後執行的預設程式。每個 Dockerfile 只有一個CMD ,當存在多個時,僅CMD 考慮最後一個例項。 |
您可以使用命令的標誌<something>.Dockerfile
指定 Dockerfile 檔名。
以下 Dockerfile 建立一個容器映像,其中安裝了所有依賴項並自動啟動您的應用程式。
# syntax=docker/dockerfile:1 FROM ubuntu:22.04 # install app dependencies RUN apt-get update && apt-get install -y python3 python3-pip RUN pip install flask==3.0.* # install app COPY hello.py / # final configuration ENV FLASK_APP=hello EXPOSE 8000 #此映象暴露的埠號 CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] #CMD
指令設定從映象執行容器時要執行的命令。
#CMD ["executable","param1","param2"]
(執行形式),"executable":可執行檔案,如果省略此引數,則取變數ENTRYPOINT的值。
exec 形式,這是首選形式:
ENTRYPOINT ["executable", "param1", "param2"]
殼體形式:
ENTRYPOINT command param1 param2
Building
docker build -t test:latest . #-t指示映象名稱和標籤 .表示 當前目錄
docker build -f- PATH # 標準輸入構建
tar czf foo.tar.gz *
$ docker build - < foo.tar.gz #tar包構建
$docker build --file test.Dockerfile - < foo.tar.gz #tar包構建,指定dockerfile檔名
$docker build https://github.com/user/myrepo.git #遠端構建
docker run -p 127.0.0.1:8000:8000 test:latest
多階段構建
標籤相當於註釋,可以在構建檔案中以鍵值對的形式存在。