轉載:
http://blog.itpub.net/31556785/viewspace-2564295/
https://blog.csdn.net/huangjun0210/article/details/85764357
1. 鏡像管理
(1) 鏡像搜索(docker search)
- 在搭建項目環境的時候我們可以通過檢索docker官方爲我們提供的鏡像雲倉庫,查看是否已經有別人構建好的鏡像,可以拉取下來直接使用。
- 命令格式:docker search [參數] 搜索項
- 常用參數:
-f 根據提供的格式篩選結果
--limit int 展示最大的結果數,默認爲25
(2) 鏡像下載(docker pull)
- 根據項目需求挑選心儀的鏡像,我們就可以把它下載下來。
- 命令格式:docker pull [參數] 鏡像名稱[:版本號]
注意:這裏版本號沒有指定,默認下載最新版本的鏡像,例如 Ubuntu 最新的鏡像版本爲18.04,你想下載16.04的版本就可以使用 docker pull ubuntu:16.04下載指定版本
(3) 鏡像查看(docker images / doker image ls)
- 上一步我們下載了心儀的鏡像,如何確定鏡像下載成功了呢?我們可以使用docker images / doker image ls查看本地鏡像
- 命令格式:
docker images [參數] [倉庫名[版本號]]
docker image ls [參數] [倉庫名[版本號]] - 常用參數:
-a 展示所有的鏡像
-q 只展示鏡像ID
(4) 鏡像刪除(docker rmi / docker image rm)
- 命令格式:
docker rmi [參數] 鏡像名[鏡像名…] – 可以同時刪除一個或多個本地鏡像 - 常用參數:
-f 強制刪除
(5) 鏡像保存備份(docker save)
-
命令格式:
docker save [參數] 鏡像名[鏡像名…] | 鏡像ID[鏡像ID…] – 可以打包一個或多個鏡像保存成本地tar文件 -
常用參數:
- o 指定寫入的文件名和路徑,默認爲STDOUT
注意:導出時建議指定鏡像的名稱最好不要使用鏡像ID,否則備份導入時鏡像名稱與版本號會顯示none
(6) 鏡像備份導入(docker load)
-
命令格式:docker load [參數]
-
常用參數:
- i 指定要導入的文件默認爲STDIN
(7) 鏡像重命名(docker rename)
如果很不幸,你在鏡像導出時選擇的是鏡像ID導出,那麼你可以使用rename重命名那些信息顯示不全的鏡像
- 命令格式:docker rename [源鏡像] [新鏡像]
(8) 鏡像歷史信息(docker history)
這個命令在之後使用Dockerfile創建docker鏡像時會經常用到,我們可以使用這個命令查看鏡像在之前的更改操作。
- 命令格式:docker history [參數] 鏡像
(9) 鏡像詳細信息(docker image inspect)
- 命令格式:
docker image inspect [參數] 鏡像 [鏡像…]
docker inspect [參數] 鏡像 [鏡像…] - 命令參數:
-f 利用特定Go語言的format格式輸出結果
注意:我們不帶參數的使用docker inspect 會打印長串的信息(標準的json格式),所以推薦使用 -f 參數查看指定的信息
-f 參數使用的簡單實例:
2. 構建鏡像
構建Docker鏡像有以下兩種方法:
- 使用docker commit命令。
- 使用Dockerfile 文件。
不推薦使用docker commit來構建鏡像,而應該使用更靈活、更強大的Dockerfile來構建Docker鏡像。
docker commit 構建鏡像可以想象爲是在往版本控制系統裏提交變更。我們先創建一個容器,並在容器裏做出修改,就像修改代碼一樣,最後再將修改提交爲一個鏡像。
(1) docker commit命令創建鏡像
[root@eshop-cache05 ~]# docker run -i -t centos /bin/bash
[root@013c7cd152f0 /]# lsof -i:8080
bash: lsof: command not found
[root@013c7cd152f0 /]# yum install lsof
我們啓動了一個容器,並在裏面安裝了lsof。使用docker commit命令創建鏡像,需要先使用exit命令從容器裏退出,之後再運行docker commit命令:
[root@eshop-cache05 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
013c7cd152f0 centos "/bin/bash" 7 minutes ago Exited (1) 13 seconds ago quizzical_swartz
[root@eshop-cache05 ~]# docker commit 013c7cd152f0 test/centos-lsof
sha256:9b132f56464faad7794451276ef13e0e46a15bc05154ee15ddb170479994de43
[root@eshop-cache05 ~]# docker images test/centos-lsof
REPOSITORY TAG IMAGE ID CREATED SIZE
test/centos-lsof latest 9b132f56464f About a minute ago 272MB
在使用docker commit命令中,指定了要提交的修改過的容器的ID(可以通過docker ps命令得到剛創建的容器ID),以及一個目標鏡像倉庫和鏡像名,這裏是test/centos-lsof。需要注意的是,docker commit提交的只是創建容器的鏡像與容器的當前狀態之間有差異的部分,這使得該更新非常輕量。通過docker images 可以查看新創建的鏡像信息。
(2) Dockerfile 文件創建鏡像
[root@eshop-cache05 opt]# mkdir centos-lsof
[root@eshop-cache05 opt]# cd centos-lsof/
[root@eshop-cache05 centos-lsof]# vim Dockerfile
創建一個名爲centos-lsof的目錄用來保存Dockerfile,這個目錄就是我們的構建環境(build environment),Docker則稱此環境爲上下文(context)或者構建上下文(build context)。Docker會在構建鏡像時將構建上下文和該上下文中的文件和目錄上傳到Docker守護進程。這樣Docker守護進程就能直接訪問你想在鏡像中存儲的任何代碼、文件或者其他數據。這裏我們還創建了一個Dockerfile文件,我們將用它構建一個能作爲Web服務器的Docker鏡像。
Dockerfile文件內容如下:
FROM centos
RUN yum install -y lsof
執行docker build命令時,Dockerfile中的所有指令都會被執行並且提交,並且在該命令成功結束後返回一個新鏡像。
[root@eshop-cache05 centos-lsof]# docker build -t="hj/centos-lsof" .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM centos
---> 1e1148e4cc2c
Step 2/2 : RUN yum install -y lsof
---> Running in 608dfe9f6ee5
...
Successfully built e713f53bf3cf
Successfully tagged hj/centos-lsof:latest
- -t選項爲新鏡像設置了倉庫和名稱,這裏倉庫爲hj,鏡像名爲centos-lsof。
- 命令中最後的“.”告訴Docker到當前目錄中去找Dockerfile文件。也可以指定一個Git倉庫地址來指定Dockerfile的位置,這裏Docker假設在Git倉庫的根目錄下存在Dockerfile文件。
[root@eshop-cache05 centos-lsof]# docker build -t="hj/centos-lsof" [email protected]:hj/centos-lsof
構建成功可以通過docker images查看
[root@eshop-cache05 centos-lsof]# docker images hj/centos-lsof
REPOSITORY TAG IMAGE ID CREATED SIZE
hj/centos-lsof latest e713f53bf3cf 5 minutes ago 272MB
3. 發佈鏡像
具體查看轉載博客:
https://blog.csdn.net/huangjun0210/article/details/85764357