<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker 從入門到上手干事!看這篇就夠了!

          共 15822字,需瀏覽 32分鐘

           ·

          2021-04-13 17:09

          大家好,我是 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?

          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)勢在于:

          1. 一致的運(yùn)行環(huán)境,能夠更輕松地遷移
          2. 對(duì)進(jìn)程進(jìn)行封裝隔離,容器與容器之間互不影響,更高效地利用系統(tǒng)資源
          3. 可以通過鏡像復(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

          參考資料

          [1]

          《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)目搜羅

          我是 Guide哥,擁抱開源,喜歡烹飪。Github 接近 10w 點(diǎn)贊的開源項(xiàng)目 JavaGuide 的作者。未來幾年,希望持續(xù)完善 JavaGuide,爭取能夠幫助更多學(xué)習(xí) Java 的小伙伴!共勉!凎!點(diǎn)擊查看我的2020年工作匯報(bào)!
          原創(chuàng)不易,歡迎點(diǎn)贊分享。咱們下期再會(huì)!
          瀏覽 72
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲色大成网站www | 91精品综合久久久久久五月丁香 | 亚洲成人热区 | 小骚逼网址 | 日日干,夜夜操 |