# Learning Docker, Part2 ###### tags: `Docker` ## Building Custom Images  建立一個檔案名為Dockerfile 在這個檔案內輸入以下程式碼: ``` # Use an existing docker image as a base FROM alpine # Download and install a dependency RUN apk add --update redis # Tell the image what to do when it starts # as a container CMD ["redis-server"] ```      --- ## Docker Cache 機制 當 Docker 構建映像時,它會從 Dockerfile 的頂部開始執行每一行指令。為了提高效率,Docker 會cache每一步的結果。然後,當 Docker 再次構建映像時,如果 Dockerfile 的該行指令以及它上面的所有指令都沒有變化,則 Docker 就會使用cache的結果,而不是重新執行該指令。 然而,如果 Dockerfile 的一行指令變化了,那麼該指令及其後面的所有指令的cache都將失效,Docker 將需要重新執行這些指令。因此,若需要修改 Dockerfile 的某些部分,最好將它們放在 Dockerfile 的底部,這樣可以最大程度地利用 Docker 的cache機制。 ## Docker Tag 在 Docker 中,映像標籤(tagging)是一種標記映像版本的機制,讓你可以更好地管理和識別你的 Docker 映像。每個 Docker 映像可以有一個或多個標籤,而且可以隨時添加、更改或刪除標籤。 一個 Docker 映像標籤通常包含了存儲庫名稱(repository name)、映像名稱(image name)以及標籤(tag)。例如,repository/image:tag。 - **repository**是映像的存儲庫名稱,例如 Docker Hub 的用戶名,或者其他的 Docker 映像存儲服務。 - **image** 是映像的名稱。 - **tag** 是用來標記特定版本的映像。如果沒有明確指定標籤,則默認的標籤是 latest。 舉個例子,對於映像'ubuntu:18.04',ubuntu 是存儲庫名稱,18.04 是標籤,這個標籤表示 Ubuntu 18.04 版本的映像。 可以使用 docker tag 命令來為映像加上或更改標籤。例如,如果要將本地的 my_image 映像標記為 v1.0,可以使用以下命令: ``` docker tag my_image my_image:v1.0 ``` 同時,也可以在構建映像時直接指定標籤,例如: ``` docker build -t my_image:v1.0 . ``` 如此一來,在映像構建完成後,就會自動添加 v1.0 的標籤。使用標籤能夠幫助你管理不同的映像版本,便於分發和部署特定版本的應用。 ## Docker commit docker commit 指令讓我們可以從現有的容器中創建一個新的映像。這個功能可以讓我們保存容器的當前狀態,然後在需要的時候創建新的容器。 以下是使用 docker commit 創建 Docker 映像的基本步驟: 1. 首先,你需要有一個正在運行的容器。假設你有一個名為 my_container 的容器正在運行。 2. 接著可以對這個容器進行各種操作,比如安裝新的軟件,修改文件等。所有的變化都會被 Docker 容器的文件系統記錄下來。 3. 當完成了所有的修改並希望保存當前容器的狀態時,可以使用 docker commit 命令創建一個新的 Docker 映像。以下是一個基本的 docker commit 命令的例子: ``` docker commit my_container my_new_image ``` 在這個命令中,my_container 是你想要創建映像的容器的名稱或ID,而 my_new_image 是你希望創建的新映像的名稱。 4. 現在可以使用 docker images 命令查看新的映像: ``` docker images ``` 你會看到 my_new_image 映像已經在映像列表中。 5. 最後,可以使用 docker run 命令來創建並運行一個新的容器,這個容器會使用剛剛創建的映像: ``` docker run -d my_new_image ``` 注意,雖然 docker commit 可以讓我們快速創建映像,但它不會保留 Dockerfile 中的元數據(比如環境變量、工作目錄、用戶等)。因此,一般情況下還是推薦使用 Dockerfile 來創建 Docker 映像,這樣可以更好地管理和版本控制你的映像。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up