Docker 從入門到上手干事!看這篇就夠了!
大家好,我是 Guide哥!
廢話也不多說,一篇文章帶你上手 Docker!
原創(chuàng)不易,有幫助的話,歡迎點(diǎn)贊分享啊!
Docker 介紹
什么是 Docker?
說實(shí)話關(guān)于 Docker 是什么并太好說,下面我通過四點(diǎn)向你說明 Docker 到底是個(gè)什么東西。
Docker 是世界領(lǐng)先的軟件容器平臺(tái),基于 Go 語言 進(jìn)行開發(fā)實(shí)現(xiàn)。 Docker 能夠自動(dòng)執(zhí)行重復(fù)性任務(wù),例如搭建和配置開發(fā)環(huán)境,從而解放開發(fā)人員。 用戶可以方便地創(chuàng)建和使用容器,把自己的應(yīng)用放入容器。容器還可以進(jìn)行版本管理、復(fù)制、分享、修改,就像管理普通的代碼一樣。 Docker可以對(duì)進(jìn)程進(jìn)行封裝隔離,屬于操作系統(tǒng)層面的虛擬化技術(shù)。 由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器。
官網(wǎng)地址:https://www.docker.com/ 。

為什么要用 Docker?
Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。
容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
傳統(tǒng)的開發(fā)流程中,我們的項(xiàng)目通常需要使用 MySQL、Redis、FastDFS 等等環(huán)境,這些環(huán)境都是需要我們手動(dòng)去進(jìn)行下載并配置的,安裝配置流程極其復(fù)雜,而且不同系統(tǒng)下的操作也不一樣。
Docker 的出現(xiàn)完美地解決了這一問題,我們可以在容器中安裝 MySQL、Redis 等軟件環(huán)境,使得應(yīng)用和環(huán)境架構(gòu)分開,它的優(yōu)勢在于:
一致的運(yùn)行環(huán)境,能夠更輕松地遷移 對(duì)進(jìn)程進(jìn)行封裝隔離,容器與容器之間互不影響,更高效地利用系統(tǒng)資源 可以通過鏡像復(fù)制多個(gè)一致的容器
另外,《Docker 從入門到實(shí)踐》[1] 這本開源書籍中也已經(jīng)給出了使用 Docker 的原因。

Docker 的安裝
Windows
接下來對(duì) Docker 進(jìn)行安裝,以 Windows 系統(tǒng)為例,訪問 Docker 的官網(wǎng):

然后點(diǎn)擊Get Started:

在此處點(diǎn)擊Download for Windows即可進(jìn)行下載。
如果你的電腦是Windows 10 64位專業(yè)版的操作系統(tǒng),則在安裝 Docker 之前需要開啟一下Hyper-V,開啟方式如下。打開控制面板,選擇程序:

點(diǎn)擊啟用或關(guān)閉Windows功能:

勾選上Hyper-V,點(diǎn)擊確定即可:

完成更改后需要重啟一下計(jì)算機(jī)。
開啟了Hyper-V后,我們就可以對(duì) Docker 進(jìn)行安裝了,打開安裝程序后,等待片刻點(diǎn)擊Ok即可:

安裝完成后,我們?nèi)匀恍枰貑⒂?jì)算機(jī),重啟后,若提示如下內(nèi)容:

它的意思是詢問我們是否使用 WSL2,這是基于 Windows 的一個(gè) Linux 子系統(tǒng),這里我們?nèi)∠纯桑蜁?huì)使用我們之前勾選的Hyper-V虛擬機(jī)。
因?yàn)槭菆D形界面的操作,這里就不介紹 Docker Desktop 的具體用法了。
Mac
直接使用 Homebrew 安裝即可
brew install --cask docker
Linux
下面來看看 Linux 中如何安裝 Docker,這里以 CentOS7 為例。
在測試或開發(fā)環(huán)境中,Docker 官方為了簡化安裝流程,提供了一套便捷的安裝腳本,執(zhí)行這個(gè)腳本后就會(huì)自動(dòng)地將一切準(zhǔn)備工作做好,并且把 Docker 的穩(wěn)定版本安裝在系統(tǒng)中。
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
安裝完成后直接啟動(dòng)服務(wù):
systemctl start docker
推薦設(shè)置開機(jī)自啟,執(zhí)行指令:
systemctl enable docker
Docker 中的幾個(gè)概念
在正式學(xué)習(xí) Docker 之前,我們需要了解 Docker 中的幾個(gè)核心概念:
鏡像
鏡像就是一個(gè)只讀的模板,鏡像可以用來創(chuàng)建 Docker 容器,一個(gè)鏡像可以創(chuàng)建多個(gè)容器
容器
容器是用鏡像創(chuàng)建的運(yùn)行實(shí)例,Docker 利用容器獨(dú)立運(yùn)行一個(gè)或一組應(yīng)用。它可以被啟動(dòng)、開始、停止、刪除,每個(gè)容器都是相互隔離的、保證安全的平臺(tái)。可以把容器看作是一個(gè)簡易的 Linux 環(huán)境和運(yùn)行在其中的應(yīng)用程序。容器的定義和鏡像幾乎一模一樣,也是一堆層的統(tǒng)一視角,唯一區(qū)別在于容器的最上面那一層是可讀可寫的
倉庫
倉庫是集中存放鏡像文件的場所。倉庫和倉庫注冊服務(wù)器是有區(qū)別的,倉庫注冊服務(wù)器上往往存放著多個(gè)倉庫,每個(gè)倉庫中又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽。倉庫分為公開倉庫和私有倉庫兩種形式,最大的公開倉庫是 DockerHub,存放了數(shù)量龐大的鏡像供用戶下載,國內(nèi)的公開倉庫有阿里云、網(wǎng)易云等
總結(jié)
通俗點(diǎn)說,一個(gè)鏡像就代表一個(gè)軟件;而基于某個(gè)鏡像運(yùn)行就是生成一個(gè)程序?qū)嵗@個(gè)程序?qū)嵗褪侨萜鳎欢鴤}庫是用來存儲(chǔ) Docker 中所有鏡像的。
其中倉庫又分為遠(yuǎn)程倉庫和本地倉庫,和 Maven 類似,倘若每次都從遠(yuǎn)程下載依賴,則會(huì)大大降低效率,為此,Maven 的策略是第一次訪問依賴時(shí),將其下載到本地倉庫,第二次、第三次使用時(shí)直接用本地倉庫的依賴即可,Docker 的遠(yuǎn)程倉庫和本地倉庫的作用也是類似的。
Docker 初體驗(yàn)
下面我們來對(duì) Docker 進(jìn)行一個(gè)初步的使用,這里以下載一個(gè) MySQL 的鏡像為例(在CentOS7下進(jìn)行)。
和 GitHub 一樣,Docker 也提供了一個(gè) DockerHub 用于查詢各種鏡像的地址和安裝教程,為此,我們先訪問 DockerHub:https://hub.docker.com/[2]

在左上角的搜索框中輸入MySQL并回車:

可以看到相關(guān) MySQL 的鏡像非常多,若右上角有OFFICIAL IMAGE標(biāo)識(shí),則說明是官方鏡像,所以我們點(diǎn)擊第一個(gè) MySQL 鏡像:

右邊提供了下載 MySQL 鏡像的指令為docker pull MySQL,但該指令始終會(huì)下載 MySQL 鏡像的最新版本。
若是想下載指定版本的鏡像,則點(diǎn)擊下面的View Available Tags:

這里就可以看到各種版本的鏡像,右邊有下載的指令,所以若是想下載 5.7.32 版本的 MySQL 鏡像,則執(zhí)行:
docker pull MySQL:5.7.32
然而下載鏡像的過程是非常慢的,所以我們需要配置一下鏡像源加速下載,訪問阿里云官網(wǎng):

點(diǎn)擊控制臺(tái):

然后點(diǎn)擊左上角的菜單,在彈窗的窗口中,將鼠標(biāo)懸停在產(chǎn)品與服務(wù)上,并在右側(cè)搜索容器鏡像服務(wù),最后點(diǎn)擊容器鏡像服務(wù):

點(diǎn)擊左側(cè)的鏡像加速器,并依次執(zhí)行右側(cè)的配置指令即可。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://679xpnpz.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker 鏡像指令
Docker 需要頻繁地操作相關(guān)的鏡像,所以我們先來了解一下 Docker 中的鏡像指令。
若想查看 Docker 中當(dāng)前擁有哪些鏡像,則可以使用 docker images 命令。
[root@izrcf5u3j3q8xaz ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
MySQL 5.7.32 f07dfa83b528 11 days ago 448MB
tomcat latest feba8d001e3f 2 weeks ago 649MB
nginx latest ae2feff98a0c 2 weeks ago 133MB
hello-world latest bf756fb1ae65 12 months ago 13.3kB
其中REPOSITORY為鏡像名,TAG為版本標(biāo)志,IMAGE ID為鏡像 id(唯一的),CREATED為創(chuàng)建時(shí)間,注意這個(gè)時(shí)間并不是我們將鏡像下載到 Docker 中的時(shí)間,而是鏡像創(chuàng)建者創(chuàng)建的時(shí)間,SIZE為鏡像大小。
該指令能夠查詢指定鏡像名:
docker image MySQL
若如此做,則會(huì)查詢出 Docker 中的所有 MySQL 鏡像:
[root@izrcf5u3j3q8xaz ~]# docker images MySQL
REPOSITORY TAG IMAGE ID CREATED SIZE
MySQL 5.6 0ebb5600241d 11 days ago 302MB
MySQL 5.7.32 f07dfa83b528 11 days ago 448MB
MySQL 5.5 d404d78aa797 20 months ago 205MB
該指令還能夠攜帶-p參數(shù):docker images -q , -q表示僅顯示鏡像的 id:
[root@izrcf5u3j3q8xaz ~]# docker images -q
0ebb5600241d
f07dfa83b528
feba8d001e3f
d404d78aa797
若是要下載鏡像,則使用:
docker pull MySQL:5.7
docker pull是固定的,后面寫上需要下載的鏡像名及版本標(biāo)志;若是不寫版本標(biāo)志,而是直接執(zhí)行docker pull MySQL,則會(huì)下載鏡像的最新版本。
一般在下載鏡像前我們需要搜索一下鏡像有哪些版本才能對(duì)指定版本進(jìn)行下載,使用指令:
docker search MySQL

不過該指令只能查看 MySQL 相關(guān)的鏡像信息,而不能知道有哪些版本,若想知道版本,則只能這樣查詢:
docker search MySQL:5.5

若是查詢的版本不存在,則結(jié)果為空:

刪除鏡像使用指令:
docker image rm MySQL:5.5
若是不指定版本,則默認(rèn)刪除的也是最新版本。
還可以通過指定鏡像 id 進(jìn)行刪除:
docker image rm bf756fb1ae65
然而此時(shí)報(bào)錯(cuò)了:
[root@izrcf5u3j3q8xaz ~]# docker image rm bf756fb1ae65
Error response from daemon: conflict: unable to delete bf756fb1ae65 (must be forced) - image is being used by stopped container d5b6c177c151
這是因?yàn)橐獎(jiǎng)h除的hello-world鏡像正在運(yùn)行中,所以無法刪除鏡像,此時(shí)需要強(qiáng)制執(zhí)行刪除:
docker image rm -f bf756fb1ae65
該指令會(huì)將鏡像和通過該鏡像執(zhí)行的容器全部刪除,謹(jǐn)慎使用。
Docker 還提供了刪除鏡像的簡化版本:docker rmi 鏡像名:版本標(biāo)志 。
此時(shí)我們即可借助rmi和-p進(jìn)行一些聯(lián)合操作,比如現(xiàn)在想刪除所有的 MySQL 鏡像,那么你需要查詢出 MySQL 鏡像的 id,并根據(jù)這些 id 一個(gè)一個(gè)地執(zhí)行docker rmi進(jìn)行刪除,但是現(xiàn)在,我們可以這樣:
docker rmi -f $(docker images MySQL -q)
首先通過docker images MySQL -q查詢出 MySQL 的所有鏡像 id,-q表示僅查詢 id,并將這些 id 作為參數(shù)傳遞給docker rmi -f指令,這樣所有的 MySQL 鏡像就都被刪除了。
Docker 容器指令
掌握了鏡像的相關(guān)指令之后,我們需要了解一下容器的指令,容器是基于鏡像的。
若需要通過鏡像運(yùn)行一個(gè)容器,則使用:
docker run tomcat:8.0-jre8
當(dāng)然了,運(yùn)行的前提是你擁有這個(gè)鏡像,所以先下載鏡像:
docker pull tomcat:8.0-jre8
下載完成后就可以運(yùn)行了,運(yùn)行后查看一下當(dāng)前運(yùn)行的容器:docker ps 。

其中CONTAINER_ID為容器的 id,IMAGE為鏡像名,COMMAND為容器內(nèi)執(zhí)行的命令,CREATED為容器的創(chuàng)建時(shí)間,STATUS為容器的狀態(tài),PORTS為容器內(nèi)服務(wù)監(jiān)聽的端口,NAMES為容器的名稱。
通過該方式運(yùn)行的 tomcat 是不能直接被外部訪問的,因?yàn)槿萜骶哂懈綦x性,若是想直接通過 8080 端口訪問容器內(nèi)部的 tomcat,則需要對(duì)宿主機(jī)端口與容器內(nèi)的端口進(jìn)行映射:
docker run -p 8080:8080 tomcat:8.0-jre8
解釋一下這兩個(gè)端口的作用(8080:8080),第一個(gè) 8080 為宿主機(jī)端口,第二個(gè) 8080 為容器內(nèi)的端口,外部訪問 8080 端口就會(huì)通過映射訪問容器內(nèi)的 8080 端口。
此時(shí)外部就可以訪問 Tomcat 了:

若是這樣進(jìn)行映射:
docker run -p 8088:8080 tomcat:8.0-jre8
則外部需訪問 8088 端口才能訪問 tomcat,需要注意的是,每次運(yùn)行的容器都是相互獨(dú)立的,所以同時(shí)運(yùn)行多個(gè) tomcat 容器并不會(huì)產(chǎn)生端口的沖突。
容器還能夠以后臺(tái)的方式運(yùn)行,這樣就不會(huì)占用終端:
docker run -d -p 8080:8080 tomcat:8.0-jre8
啟動(dòng)容器時(shí)默認(rèn)會(huì)給容器一個(gè)名稱,但這個(gè)名稱其實(shí)是可以設(shè)置的,使用指令:
docker run -d -p 8080:8080 --name tomcat01 tomcat:8.0-jre8
此時(shí)的容器名稱即為 tomcat01,容器名稱必須是唯一的。
再來引申一下docker ps中的幾個(gè)指令參數(shù),比如-a:
docker ps -a
該參數(shù)會(huì)將運(yùn)行和非運(yùn)行的容器全部列舉出來:

-q參數(shù)將只查詢正在運(yùn)行的容器 id:docker ps -q 。
[root@izrcf5u3j3q8xaz ~]# docker ps -q
f3aac8ee94a3
074bf575249b
1d557472a708
4421848ba294
若是組合使用,則查詢運(yùn)行和非運(yùn)行的所有容器 id:docker ps -qa 。
[root@izrcf5u3j3q8xaz ~]# docker ps -aq
f3aac8ee94a3
7f7b0e80c841
074bf575249b
a1e830bddc4c
1d557472a708
4421848ba294
b0440c0a219a
c2f5d78c5d1a
5831d1bab2a6
d5b6c177c151
接下來是容器的停止、重啟指令,因?yàn)榉浅:唵危筒贿^多介紹了。
docker start c2f5d78c5d1a
通過該指令能夠?qū)⒁呀?jīng)停止運(yùn)行的容器運(yùn)行起來,可以通過容器的 id 啟動(dòng),也可以通過容器的名稱啟動(dòng)。
docker restart c2f5d78c5d1a
該指令能夠重啟指定的容器。
docker stop c2f5d78c5d1a
該指令能夠停止指定的容器。
docker kill c2f5d78c5d1a
該指令能夠直接殺死指定的容器。
以上指令都能夠通過容器的 id 和容器名稱兩種方式配合使用。
當(dāng)容器被停止之后,容器雖然不再運(yùn)行了,但仍然是存在的,若是想刪除它,則使用指令:
docker rm d5b6c177c151
需要注意的是容器的 id 無需全部寫出來,只需唯一標(biāo)識(shí)即可。
若是想刪除正在運(yùn)行的容器,則需要添加-f參數(shù)強(qiáng)制刪除:
docker rm -f d5b6c177c151
若是想刪除所有容器,則可以使用組合指令:
docker rm -f $(docker ps -qa)
先通過docker ps -qa查詢出所有容器的 id,然后通過docker rm -f進(jìn)行刪除。
當(dāng)容器以后臺(tái)的方式運(yùn)行時(shí),我們無法知曉容器的運(yùn)行狀態(tài),若此時(shí)需要查看容器的運(yùn)行日志,則使用指令:
docker logs 289cc00dc5ed
這樣的方式顯示的日志并不是實(shí)時(shí)的,若是想實(shí)時(shí)顯示,需要使用-f參數(shù):
docker logs -f 289cc00dc5ed
通過-t參數(shù)還能夠顯示日志的時(shí)間戳,通常與-f參數(shù)聯(lián)合使用:
docker logs -ft 289cc00dc5ed
查看容器內(nèi)運(yùn)行了哪些進(jìn)程,可以使用指令:
docker top 289cc00dc5ed

若是想與容器進(jìn)行交互,則使用指令:
docker exec -it 289cc00dc5ed bash

此時(shí)終端將會(huì)進(jìn)入容器內(nèi)部,執(zhí)行的指令都將在容器中生效,在容器內(nèi)只能執(zhí)行一些比較簡單的指令,如:ls、cd 等,若是想退出容器終端,重新回到 CentOS 中,則執(zhí)行exit即可。
現(xiàn)在我們已經(jīng)能夠進(jìn)入容器終端執(zhí)行相關(guān)操作了,那么該如何向 tomcat 容器中部署一個(gè)項(xiàng)目呢?
docker cp ./test.html 289cc00dc5ed:/usr/local/tomcat/webapps
通過docker cp指令能夠?qū)⑽募?CentOS 復(fù)制到容器中,./test.html為 CentOS 中的資源路徑,289cc00dc5ed為容器 id,/usr/local/tomcat/webapps為容器的資源路徑,此時(shí)test.html文件將會(huì)被復(fù)制到該路徑下。
[root@izrcf5u3j3q8xaz ~]# docker exec -it 289cc00dc5ed bash
root@289cc00dc5ed:/usr/local/tomcat# cd webapps
root@289cc00dc5ed:/usr/local/tomcat/webapps# ls
test.html
root@289cc00dc5ed:/usr/local/tomcat/webapps#
若是想將容器內(nèi)的文件復(fù)制到 CentOS 中,則反過來寫即可:
docker cp 289cc00dc5ed:/usr/local/tomcat/webapps/test.html ./
所以現(xiàn)在若是想要部署項(xiàng)目,則先將項(xiàng)目上傳到 CentOS,然后將項(xiàng)目從 CentOS 復(fù)制到容器內(nèi),此時(shí)啟動(dòng)容器即可。
雖然使用 Docker 啟動(dòng)軟件環(huán)境非常簡單,但同時(shí)也面臨著一個(gè)問題,我們無法知曉容器內(nèi)部具體的細(xì)節(jié),比如監(jiān)聽的端口、綁定的 ip 地址等等,好在這些 Docker 都幫我們想到了,只需使用指令:
docker inspect 923c969b0d91

Docker 數(shù)據(jù)卷
學(xué)習(xí)了容器的相關(guān)指令之后,我們來了解一下 Docker 中的數(shù)據(jù)卷,它能夠?qū)崿F(xiàn)宿主機(jī)與容器之間的文件共享,它的好處在于我們對(duì)宿主機(jī)的文件進(jìn)行修改將直接影響容器,而無需再將宿主機(jī)的文件再復(fù)制到容器中。
現(xiàn)在若是想將宿主機(jī)中/opt/apps目錄與容器中webapps目錄做一個(gè)數(shù)據(jù)卷,則應(yīng)該這樣編寫指令:
docker run -d -p 8080:8080 --name tomcat01 -v /opt/apps:/usr/local/tomcat/webapps tomcat:8.0-jre8
然而此時(shí)訪問 tomcat 會(huì)發(fā)現(xiàn)無法訪問:

這就說明我們的數(shù)據(jù)卷設(shè)置成功了,Docker 會(huì)將容器內(nèi)的webapps目錄與/opt/apps目錄進(jìn)行同步,而此時(shí)/opt/apps目錄是空的,導(dǎo)致webapps目錄也會(huì)變成空目錄,所以就訪問不到了。
此時(shí)我們只需向/opt/apps目錄下添加文件,就會(huì)使得webapps目錄也會(huì)擁有相同的文件,達(dá)到文件共享,測試一下:
[root@centos-7 opt]# cd apps/
[root@centos-7 apps]# vim test.html
[root@centos-7 apps]# ls
test.html
[root@centos-7 apps]# cat test.html
<h1>This is a test html!</h1>
在/opt/apps目錄下創(chuàng)建了一個(gè) test.html 文件,那么容器內(nèi)的webapps目錄是否會(huì)有該文件呢?進(jìn)入容器的終端:
[root@centos-7 apps]# docker exec -it tomcat01 bash
root@115155c08687:/usr/local/tomcat# cd webapps/
root@115155c08687:/usr/local/tomcat/webapps# ls
test.html
容器內(nèi)確實(shí)已經(jīng)有了該文件,那接下來我們編寫一個(gè)簡單的 Web 應(yīng)用:
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("Hello World!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
這是一個(gè)非常簡單的 Servlet,我們將其打包上傳到/opt/apps中,那么容器內(nèi)肯定就會(huì)同步到該文件,此時(shí)進(jìn)行訪問:

這種方式設(shè)置的數(shù)據(jù)卷稱為自定義數(shù)據(jù)卷,因?yàn)閿?shù)據(jù)卷的目錄是由我們自己設(shè)置的,Docker 還為我們提供了另外一種設(shè)置數(shù)據(jù)卷的方式:
docker run -d -p 8080:8080 --name tomcat01 -v aa:/usr/local/tomcat/webapps tomcat:8.0-jre8
此時(shí)的aa并不是數(shù)據(jù)卷的目錄,而是數(shù)據(jù)卷的別名,Docker 會(huì)為我們自動(dòng)創(chuàng)建一個(gè)名為aa的數(shù)據(jù)卷,并且會(huì)將容器內(nèi)webapps目錄下的所有內(nèi)容復(fù)制到數(shù)據(jù)卷中,該數(shù)據(jù)卷的位置在/var/lib/docker/volumes目錄下:
[root@centos-7 volumes]# pwd
/var/lib/docker/volumes
[root@centos-7 volumes]# cd aa/
[root@centos-7 aa]# ls
_data
[root@centos-7 aa]# cd _data/
[root@centos-7 _data]# ls
docs examples host-manager manager ROOT
此時(shí)我們只需修改該目錄的內(nèi)容就能能夠影響到容器。
最后再介紹幾個(gè)容器和鏡像相關(guān)的指令:
docker commit -m "描述信息" -a "鏡像作者" tomcat01 my_tomcat:1.0
該指令能夠?qū)⑷萜鞔虬梢粋€(gè)鏡像,此時(shí)查詢鏡像:
[root@centos-7 _data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_tomcat 1.0 79ab047fade5 2 seconds ago 463MB
tomcat 8 a041be4a5ba5 2 weeks ago 533MB
MySQL latest db2b37ec6181 2 months ago 545MB
若是想將鏡像備份出來,則可以使用指令:
docker save my_tomcat:1.0 -o my-tomcat-1.0.tar
[root@centos-7 ~]# docker save my_tomcat:1.0 -o my-tomcat-1.0.tar
[root@centos-7 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg 公共 視頻 文檔 音樂
get-docker.sh my-tomcat-1.0.tar 模板 圖片 下載 桌面
若是擁有.tar格式的鏡像,該如何將其加載到 Docker 中呢?執(zhí)行指令:
docker load -i my-tomcat-1.0.tar
root@centos-7 ~]# docker load -i my-tomcat-1.0.tar
b28ef0b6fef8: Loading layer [==================================================>] 105.5MB/105.5MB
0b703c74a09c: Loading layer [==================================================>] 23.99MB/23.99MB
......
Loaded image: my_tomcat:1.0
[root@centos-7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_tomcat 1.0 79ab047fade5 7 minutes ago 463MB
參考資料
《Docker 從入門到實(shí)踐》: https://yeasy.gitbook.io/docker_practice/introduction/why
[2]https://hub.docker.com/: https://hub.docker.com/
歡迎加入我的星球,一個(gè)純 Java 面試交流圈子 !Ready!。目前星球已經(jīng)更新 3 個(gè)原創(chuàng)小冊:《Java面試進(jìn)階指北》、《從零開始寫一個(gè) RPC 框架》 、《程序員副業(yè)賺錢之路》。累計(jì)幫助 520+ 位球友提供了免費(fèi)的簡歷修改服務(wù),回答了 500+ 個(gè)問題,產(chǎn)出了 1300+ 個(gè)主題。
推薦?? :1049天,100K!簡單復(fù)盤!
推薦?? :Github掘金計(jì)劃:Github上的一些優(yōu)質(zhì)項(xiàng)目搜羅
