創建鏡像有很多方法,用戶可以從 Docker Hub 獲取已有鏡像並更新,也可以利用本地文件系統創建一個。
修改已有的鏡像
查看已有的鏡像:
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 2a4cca5ac898 9 days ago 111MB
下面進入到ubuntu容器中:
$ sudo docker run -t -i ubuntu /bin/bash
root@543a324ea841:/#
注意: 記住容器的 ID,稍后還會用到。
在容器中添加 添加 Python3
開發環境。
root@543a324ea841:/# apt update // 更新軟件源 root@543a324ea841:/# apt install python3 // 安裝 python3 root@543a324ea841:/# exit // 退出 Ubuntu 容器 exit
當結束后,我們使用 exit
來退出,現在我們的容器已經被我們改變了,使用 docker commit
命令來提交更新后的副本。
$ sudo docker commit -m "Add python3" -a "Docker Newbee" 543a324ea841 ubuntu sha256:7c0cf1cc5ef36a86252e94eea39c645f53be7dfda87bdcded6d2999917190ffd
-
-m 來指定提交的說明信息,跟我們使用的版本控制工具一樣;
-
-a 可以指定更新的用戶信息;
之后是用來創建鏡像的容器的 ID;最后指定目標鏡像的倉庫名。 創建成功后會返回這個鏡像的ID信息。
查看鏡像:
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7c0cf1cc5ef3 About a minute ago 111MB
ubuntu <none> 2a4cca5ac898 9 days ago 111MB
之后,可以使用新的鏡像來啟動容器
$ sudo docker run -t -i ubuntu:latest /bin/bash root@8e40ef590fb1:/#
利用 Dockerfile 來創建鏡像
使用 docker commit
來擴展一個鏡像比較簡單,但是不方便在一個團隊中分享。我們可以使用 docker build
來創建一個新的鏡像。為此,首先需要創建一個Dockerfile,包含一些如何創建鏡像的指令。
新建一個目錄和一個 Dockerfile
$ mkdir py
$ cd py
py$ touch Dockerfile
Dockerfile 中每一條指令都創建鏡像的一層,例如:
$ vim Dockerfile
# this is a comment FROM ubuntu:16.04 MAINTAINER Docker py <pyuser@docker.com> RUN apt-get install -y python3 RUN apt-get install -y python3-pip RUN python3 -m pip install selenium
Dockerfile 基本的語法是
- 使用
#
來注釋 - FROM 指令告訴 Docker 使用哪個鏡像作為基礎
- 接着是維護者的信息
- RUN 開頭的指令會在創建中運行,比如安裝一個軟件包,在這里使用
apt
來安裝了一些軟件
編寫完成 Dockerfile 后可以使用 docker build
來生成鏡像。
sudo docker build -f Dockerfile -t ubuntu-py:v1 .
-
-t標記來添加 tag,指定新的鏡像的用戶信息。
-
“.” 是 Dockerfile 所在的路徑(當前目錄),也可以替換為一個具體的 Dockerfile 的路徑
可以看到build 進程在執行操作。它要做的第一件事情就是上傳這個 Dockerfile 內容,因為所有的操作都要依據 Dockerfile 來進行。 然后, Dockfile 中的指令被一條一條的執行。每一步都創建了一個新的容器,在容器中執行指令並提交修改(就跟之前介紹過的docker commit
一樣)。當所有的指令都執行完畢之后,返回了最終的鏡像 id。所有的中間步驟所產生的容器都被刪除和清理了。