當我們以指定的 Docker 映像(Image)創建了一個 Docker 容器(Container)後,可以在容器中進行若干操作,但是如果此時刪掉容器再重啟時,一切又會回溯到映像中的原始內容。那要如何保存我們對容器進行的操作呢?
打包容器
如果要保存我們對容器進行的操作,我們可以在對容器進行了若干操作後,透過 docker commit
命令將容器打包為映像。具體的操作如下:
Bash
# 列出容器
$ docker ps
# 打包指定容器為映像
$ docker commit --author "Sean <[email protected]>" \
--message "COMMIT MESSAGE" \
--pause=false \
--change "ENV DEBUG=true" \
--change "ENTRYPOINT [\"/bin/bash\"]" \
[CONTAINER_ID] [REPOSITORY:TAG]
# 列出映像
$ docker images
Bash其中各個參數的說明如下:
--author
:指定作者資訊--message
:添加提交訊息--pause
:是否在提交期間暫停容器(預設值為true
)--change
:提交過程中套用 Dockerfile 指令。可以用來設置新的環境變數(ENV),或是入口(ENTRYPOINT)
載入映像
打包完後的映像會存在宿主機當中,其實這時候就可以透過 docker run
命令映像創建容器了。為了讓宿主機以外的機器也能夠使用映像,一般有兩種方式:
- 託管服務:將映像上傳到具備容器映像託管服務的儲存庫如 Docker Hub、Google Container Registry (GCR)、Amazon Elastic Container Registry (ECR) 或 Azure Container Registry (ACR) 上。
- 檔案共享:將映像打包為
.tar
壓縮檔案,可以在不同機器上轉移、備份與共享。
有鑑於並不是所有打包的映像都希望上傳到託管服務上,因此在這裡我們主要說明第二種方式。
Bash
# 打包映像
$ docker save --output my_image.tar [IMAGE]:[TAG]
# 載入映像
$ docker load --input my_image.tar
# 運行容器
$ docker run --detach [IMAGE]
Bash