從 Dockerfile 執行 Docker 例項
Docker 容器無疑成為了不同環境下管理軟體和依賴關係的標準單元。在使用實際應用程式時,你必須在構建應用程式的容器映像之前建立一個 docker 檔案。
Dockerfile 只是一個只讀文字文件,在組裝 Docker 映像時設定了指令集。另一方面,Docker 映象是一組用於構建 Docker 容器的指令、應用程式程式碼、依賴項、工具和庫。
因此,容器是由 Dockerfile 組裝而成的 docker 映象的可執行例項。
本文將引導你完成建立 Dockerfile 並從該檔案執行 docker 例項的步驟。
從 Dockerfile 執行 Docker 例項的步驟
我們需要按照以下步驟從 Dockerfile 執行 Docker 例項。
建立一個 Dockerfile
要建立 Dockerfile,我們必須瞭解它的元件。一些最常見的命令包括:
FROM
:建立使用的父/基礎映象的層。WORKDIR
:允許我們設定工作目錄。COPY
:使我們能夠將當前目錄內容複製到容器中的目錄中。PULL
:從你的 Docker 儲存庫新增檔案。RUN
:當我們想要構建映象時執行。CMD
:指定容器啟動時要執行的命令。ENV
:定義構建期間使用的環境變數。ENTRYPOINT
:確定容器啟動時要執行的命令。MAINTAINER
:指定映象的作者。
要建立 Dockerfile,我們將首先建立將託管 Dockerfile 等檔案的主目錄。我們將製作一個簡單的 Flask 應用程式,在控制檯上列印一條訊息。
mkdir my-app
現在,我們進入該目錄並建立應用程式的主檔案為 app.py
。此檔案包含程式的應用程式程式碼。
from flask import Flask
app = Flask(__name__)
def hello():
print("Hello, this is a simple Flask application")
hello()
我們現在可以繼續建立 Dockerfile 並使用必要的命令填充它以建立 Docker 映像。
touch Dockerfile
我們還建立了一個 requirements.txt
檔案,其中包含執行此應用程式所需的安裝檔案。要求如下所示。
click==8.0.4
Flask==2.0.3
gunicorn==20.1.0
itsdangerous==2.1.0
Jinja2==3.0.3
MarkupSafe==2.1.0
Werkzeug==2.0.3
我們將編輯 Dockerfile 並新增以下命令以使用 docker build
命令建立 docker 映像。在這種情況下,Python 是基礎映象。
我們還設定了工作目錄並將必要的檔案從當前目錄複製到 Docker 容器中的目錄。
# base image
FROM python
# Set your working directory
WORKDIR /var/www/
# Copy the necessary files
COPY ./app.py /var/www/app.py
COPY ./requirements.txt /var/www/requirements.txt
# Install the necessary packages
RUN pip install -r /var/www/requirements.txt
# Run the app
CMD ["echo", "Hello, Developer"]
建立 Docker 映像
我們繼續使用 docker build
命令建立 Docker 映像。但是,我們必須在同一目錄中執行此命令。
語法:
$ docker build [OPTIONS] PATH | URL | -
在 my-app
目錄中,我們將執行以下命令。 -t
標誌使我們能夠標記映像的名稱並指示 Dockerfile 位於我們正在執行此命令的同一目錄中。
~/my-app$ docker build -t new_image .
輸出:
[+] Building 184.4s (10/10) FINISHED
=> [internal] load build definition from Dockerfile 1.5s
=> => transferring dockerfile: 38B 0.0s
=> [internal] load .dockerignore 1.9s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/python:latest 50.8s
=> [1/5] FROM docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55 30.4s
=> => resolve docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55 0.4s
=> => sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55 2.14kB / 2.14kB 0.0s
=> => sha256:17e2d81e5757980ee40742d77dd5d3e1a69ad0d6dacb13064e1b018a6664ec72 2.22kB / 2.22kB 0.0s
=> => sha256:178dcaa62b393b539abc8b866c39be81e8ade01786880dc5d17ce3fe02426dbb 8.55kB / 8.55kB 0.0s
=> => sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3 2.34MB / 2.34MB 10.4s
=> => extracting sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3 14.6s
=> [internal] load build context 1.1s
=> => transferring context: 195B 0.0s
=> [2/5] WORKDIR /var/www/ 3.2s
=> [3/5] COPY ./app.py /var/www/app.py 1.9s
=> [4/5] COPY ./requirements.txt /var/www/requirements.txt 2.6s
=> [5/5] RUN pip install -r /var/www/requirements.txt 82.3s
=> exporting to image 8.1s
=> => exporting layers 6.0s
=> => writing image sha256:5811f24b498ae784af32935318a5fddba536e2be27233b19bf08cad81438d114 0.2s
=> => naming to docker.io/library/new_image
我們現在可以使用下面的 docker images
命令列出 docker 映象。
~/my-app$ docker images
輸出:
REPOSITORY TAG IMAGE ID CREATED SIZE
new_image latest 5811f24b498a 2 minutes ago 929MB
從 Dockerfile 執行例項
要從這個 docker 映象建立一個可執行的例項,我們將使用 docker run
命令在我們之前建立的映象上建立一個可寫層。
語法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
最後,我們現在可以使用上面的命令建立一個可執行的例項。
~/my-app$ docker run -it new_image
Hello, Developer
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedIn