<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

          共 14599字,需瀏覽 30分鐘

           ·

          2020-09-26 04:08

          很多新手面對 docker 一臉茫然,于是我想按照自己的理解幫助新手快速入門 docker,便有了下文。
          如果你了解虛擬機(jī),那么可以對比著理解,計算機(jī)的世界里,死記硬背是行不通的,必須理解,只有深刻理解了的工具才能更好的使用它。docker 就是一個進(jìn)化后的虛擬機(jī),比虛擬機(jī)更輕巧,更靈活,更節(jié)約系統(tǒng)資源。
          如果不了解虛擬機(jī),可以把它比作程序的集裝箱,把程序及運行環(huán)境都放在集裝箱里面,無需拆卸集裝箱程序就可以運行,把這個集裝箱遷移到任何地方,程序都可以運行,無需額外的環(huán)境配置(不需要拆箱)。有了docker,所有的程序都只要是以 docker 形式發(fā)布,就都是完全跨平臺的了。
          所有說 docker 才是 IT 系統(tǒng)的基礎(chǔ)設(shè)施,值得每個程序員去學(xué)習(xí)和使用。
          虛擬機(jī)有個軟件叫 vmware workstation,對應(yīng)的,docker 有個軟件叫 docker desktop(社區(qū)版),這兩個軟件都是提供虛擬化的基石。對于個人電腦,必須安裝 docker desktop 才能使用 docker,在搜索引擎一搜,從官網(wǎng)下載即可,目前 windows,mac,linux 都可以安裝 docker desktop。

          步驟 0: linux 非 root 用戶使用 docker

          如果是 linux,可執(zhí)行下述命令自動下載和安裝,安裝成功后已默認(rèn)設(shè)置開機(jī)啟動并自動啟動。
          $?wget?-qO-?https://get.docker.com/?|?sh
          執(zhí)行后,會有一個提示,意思是非 root 用戶如果想直接運行 docker,需要將該用戶添加到 docker 用戶組中,然后重新登陸。
          $?sudo?usermod?-aG?docker?aaron??#這里的aaron是用戶名
          $?#然后重新登陸
          mac 和 windows 直接從官網(wǎng)下載安裝即可。
          假定現(xiàn)在你已經(jīng)安裝了 docker desktop。
          安裝完后,打開終端,輸入 docker 命令回車,你會看到 docker 所支持的命令及簡潔的幫助文檔,如果英文好一點,幫助文檔就可以帶你入門,具體的命令可以執(zhí)行 docker help 命令 的形式查看其幫助信息,這個技能必須會,比用的時候再去網(wǎng)上找樣例要高效的多。請牢記這一點,現(xiàn)在如果看不懂沒關(guān)系,假以時日,你自然能看懂幫助信息。
          接下來干什么?先明確用 docker 干什么,假如,你想安裝一個 docker 版的 ubuntu 玩一玩。

          步驟 1:下載鏡像文件

          如果你用虛擬機(jī)的話,你需要下載 ubuntu 的 iso 文件,然后再用虛擬機(jī)安裝這個 iso,最后啟動 ubuntu。這個 iso 文件,我們叫它操作系統(tǒng)的鏡像,就是鏡像文件。
          同理,如果用 docker 的話,也需要下下載 docker 版的 ubuntu 鏡像(英文叫 image),這個鏡像文件比虛擬機(jī)的 iso 文件要小的多,而且下載后不需要安裝,直接啟動就行了,憑這一點,我就已經(jīng)拋棄虛擬機(jī)了。
          那么接下來我去哪里找 docker 版的 ubuntu 鏡像呢?很簡單,docker 已經(jīng)為你想好了,那就是 search 命令,執(zhí)行 docker search ubuntu 看看,一般情況下選擇第一個即可,或者根據(jù) star 的數(shù)量、官方標(biāo)志來選擇,記住選擇的鏡像名字,這里是 ubuntu。
          docker search ubuntu
          確定后我們執(zhí)行 docker pull ubuntu 即可下載此 ubuntu 鏡像:
          下載過程如下:
          (py38env)????~?docker?pull?ubuntu
          Using?default?tag:?latest
          latest:?Pulling?from?library/ubuntu
          e6ca3592b144:?Pull?complete
          534a5505201d:?Pull?complete
          990916bd23bb:?Pull?complete
          Digest:?sha256:cbcf86d7781dbb3a6aa2bcea25403f6b0b443e20b9959165cf52d2cc9608e4b9
          Status:?Downloaded?newer?image?for?ubuntu:latest
          docker.io/library/ubuntu:latest
          下載過程中,你可以再開個窗口,執(zhí)行 docker help pull 看看此命令的幫助文檔,看看描述能否理解:
          (py38env)????~?docker?help?pull

          Usage:????docker?pull?[OPTIONS]?NAME[:TAG|@DIGEST]

          Pull?an?image?or?a?repository?from?a?registry

          Options:
          ??-a,?--all-tags????????????????Download?all?tagged?images?in?the?repository
          ??????--disable-content-trust???Skip?image?verification?(default?true)
          ??????--platform?string?????????Set?platform?if?server?is?multi-platform
          ????????????????????????????????capable
          ??-q,?--quiet???????????????????Suppress?verbose?output
          (py38env)????~
          比如這里的 Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST],可以看到中括號包起來的是可選的,沒有包起來的都是必輸?shù)模Q后面可以加個冒號和標(biāo)簽,就可以下載該名稱下某個具體標(biāo)簽的鏡像,如果不寫 tag,那就默認(rèn)下載最新的。
          至此,鏡像文件已經(jīng)下載完成。

          步驟 2:查看鏡像文件,修改鏡像存放位置

          查看自己下載了哪些鏡像呢,執(zhí)行 docker images
          docker images
          從上圖看到,鏡像文件有的還挺大,但仍然比完整的操作系統(tǒng)鏡像要小,他們存儲在磁盤的什么位置呢?默認(rèn)情況下:
          如果是 mac,鏡像文件保存在 ~/Library/Containers/com.docker.docker 路徑下,
          如果是 linux,可通過 docker info 命令查看 Docker 默認(rèn)的存儲路徑,通常位于:/var/lib/docker:
          sudo?docker?info?|?grep?"Docker?Root?Dir"
          #?Docker?Root?Dir:?/var/lib/docker
          docker info 還可以查看容器的池、已用數(shù)據(jù)大小、總數(shù)據(jù)大小,基本容器大小、當(dāng)前運行容器數(shù)量等。
          隨著鏡像文件越來越多,占有空間越來越大,你可能會產(chǎn)生想把鏡像文件存放在其他位置的想法:
          如果是 mac 第一種方法是通過修改 docker 的配置來實現(xiàn):點擊頂部菜單欄中的 docker 圖標(biāo) -> Preferences -> Resources -> ADVANCED 拖到最后,Disk image location,如下圖,然后點擊 browse 來將 imgae 保存到新的位置。
          mac配置image路徑
          上圖中還可以看到 docker 其它的一些資源使用信息如cpu、內(nèi)存、磁盤也是在此配置的。
          第二種方法是建立軟鏈接:就是先把這個文件夾移動到其他(你的其他硬盤或分區(qū))位置,然后再將新位置創(chuàng)建一個軟鏈接到這里來。具體來說:
          第一步:將 docker 文件夾復(fù)制到新位置,由于 socket 文件是不允許直接復(fù)制的,可以用快速增量備份工具 rsync 來復(fù)制,并將原來文件夾重命名為 com.docker.docker.old:
          rsync?-a?~/Library/Containers/com.docker.docker/?/Volumes/path/xxx
          mv?com.docker.docker?com.docker.docker.old
          第二步:將新路徑軟鏈接過來:
          cd?~/Library/Containers
          ln?-s?/Volumes/path/xxxx?com.docker.docker
          第三步:啟動docker,如果正常啟動,就刪除掉原來的 docker 文件夾 com.docker.docker.old。
          如果是 linux 第一種方法就是通過修改 docker 的配置文件來指定鏡像的存放位置:
          #?停止?docker
          sudo?service?docker?stop

          #?編輯文件?docker-overlay.conf
          cd?/etc/systemd/system/docker.service.d?#?如果沒有docker.service.d?則創(chuàng)建該路徑
          sudo?vim?docker-overlay.conf??#?如果沒有則創(chuàng)建該文件
          #?在文件中添加如下內(nèi)容:
          #??[Service]
          #??ExecStart=
          #??ExecStart=/usr/bin/dockerd?--graph="新的存儲路徑"?--storage-driver=overlay

          #?啟動?docker
          sudo?service?docker?start
          第二種方法和 mac 的類似,不再贅述。

          步驟 3:運行容器

          如果說容器是一個水杯,那鏡像就是水,但這個水不會因倒入水杯而減少。運行容器的過程可以比作將水倒入水杯,做各種加工后對外提供服務(wù)的過程。
          現(xiàn)在我們將前述 ubuntu 鏡像裝入一個新的容器:
          docker?run?ubuntu
          命令里的 ubuntu 即執(zhí)行 docker images 中對應(yīng)的 REPOSITORY 名稱。
          使用 docker ps -a ?查看已運行的容器信息
          docker ps -a
          可以看到容器的id,所屬鏡像,執(zhí)行的命令、創(chuàng)建的時間、狀態(tài)、端口、名稱等信息,這里的狀態(tài)為退出,是因為我們啟動容器時沒有指定持續(xù)運行的進(jìn)程,因此容器會很快自動退出。
          運行容器時可以指定容器的名稱,端口映射,路徑映射,MAC地址等信息。
          比如以交互的方式運行一個新 ubuntu 容器,并指定它的名稱為 my-ubuntu,主機(jī)名為 ubuntu:
          docker?run?-it?--hostname=ubuntu?--name=my-ubuntu?ubuntu?/bin/bash
          執(zhí)行后,你將以 root 身份進(jìn)入容器內(nèi)部,現(xiàn)在你已經(jīng)進(jìn)入了 ubuntu 的環(huán)境,除了沒有圖形界面,其他操作沒有區(qū)別,如下所示:
          (py38env)????~?docker?run?-it?--hostname=ubuntu?--name=my-ubuntu?ubuntu?/bin/bash
          root@ubuntu:/#?whoami
          root
          root@ubuntu:/#?uname?-a
          Linux?ubuntu?4.19.76-linuxkit?#1?SMP?Tue?May?26?11:42:35?UTC?2020?x86_64?x86_64?x86_64?GNU/Linux
          root@ubuntu:/#?ls
          bin??boot??dev??etc??home??lib??lib32??lib64??libx32??media??mnt??opt??proc??root??run??sbin??srv??sys??tmp??usr??var
          root@ubuntu:/#?apt?update
          Get:1?http://security.ubuntu.com/ubuntu?focal-security?InRelease?[107?kB]
          Get:2?http://archive.ubuntu.com/ubuntu?focal?InRelease?[265?kB]
          Get:3?http://security.ubuntu.com/ubuntu?focal-security/multiverse?amd64?Packages?[1078?B]
          Get:4?http://archive.ubuntu.com/ubuntu?focal-updates?InRelease?[111?kB]
          Get:5?http://security.ubuntu.com/ubuntu?focal-security/main?amd64?Packages?[245?kB]
          Get:6?http://archive.ubuntu.com/ubuntu?focal-backports?InRelease?[98.3?kB]
          ......
          Fetched?14.6?MB?in?32s?(452?kB/s)
          Reading?package?lists...?Done
          Building?dependency?tree
          Reading?state?information...?Done
          2?packages?can?be?upgraded.?Run?'apt?list?--upgradable'?to?see?them.
          root@ubuntu:/#
          輸入exit 退出容器,如果想再次進(jìn)入該容器,先使用 docker ps -a 查看容器狀態(tài),如果容器狀態(tài)為退出,則需要先使用 docker start 啟動容器,再使用 exec 命令進(jìn)入一個正在運行的容器。
          root@ubuntu:/#?exit
          exit
          (py38env)????~?docker?ps?-a
          CONTAINER?ID????????IMAGE???????????????????????????COMMAND??????????????????CREATED?????????????STATUS??????????????????????PORTS????????????????????NAMES
          8a289fba83f7????????ubuntu??????????????????????????"/bin/bash"??????????????6?minutes?ago???????Exited?(0)?5?seconds?ago?????????????????????????????my-ubuntu
          9ff5f71f2327????????ubuntu??????????????????????????"/bin/bash"??????????????16?minutes?ago??????Exited?(0)?16?minutes?ago????????????????????????????kind_merkle
          b3aa5185fa53????????wingszzy/redisall???????????????"/bin/sh?-c?/start.sh"???29?hours?ago????????Up?29?hours?????????????????0.0.0.0:6379->6379/tcp???romantic_nobel
          9da7144ffe20????????kali????????????????????????????"/bin/bash"??????????????32?hours?ago????????Up?30?hours?????????????????0.0.0.0:8888->8888/tcp???agitated_darwin
          (py38env)????~?docker?exec?-it?8a289fba83f7?/bin/bash
          Error?response?from?daemon:?Container?8a289fba83f7bc4e777947e3dc429d871aa3bce67c1418698f9bb04c96f00403?is?not?running
          (py38env)????~?docker?start?my-ubuntu
          my-ubuntu
          (py38env)????~?docker?exec?-it?8a289fba83f7?/bin/bash
          root@ubuntu:/#
          上述最后的命令中容器id也可以替換為容器名稱,方便記憶,如:
          docker?exec?-it?my-ubuntu?/bin/bash

          步驟 4:復(fù)制文件,路徑映射

          docker 提供了 cp 命令來實現(xiàn)容器與本機(jī)操作系統(tǒng)間的文件或文件夾傳輸,非常便捷,如:
          (py38env)????~?docker?cp?key.txt?my-ubuntu:/root
          (py38env)????~?docker?exec?-it?my-ubuntu?/bin/bash
          root@ubuntu:/#?ls?/root
          key.txt
          root@ubuntu:/#?ll?/root
          total?24
          drwx------?1?root?root????4096?Sep?23?11:30?./
          drwxr-xr-x?1?root?root????4096?Sep?23?11:30?../
          -rw-------?1?root?root??????55?Sep?23?11:25?.bash_history
          -rw-r--r--?1?root?root????3106?Dec??5??2019?.bashrc
          -rw-r--r--?1?root?root?????161?Dec??5??2019?.profile
          -rw-r--r--?1??501?dialout??353?Sep?20?09:49?key.txt
          反過來也是一樣的,命令的格式如下:
          (py38env)????~?docker?help?cp

          Usage:????docker?cp?[OPTIONS]?CONTAINER:SRC_PATH?DEST_PATH|-
          ????docker?cp?[OPTIONS]?SRC_PATH|-?CONTAINER:DEST_PATH

          Copy?files/folders?between?a?container?and?the?local?filesystem
          你也許會想拷貝來拷貝去真麻煩,有沒有更簡單的方法,當(dāng)然有,那就是路徑映射,比如將本地的 /Users/aaron/xxx 映射至 docker 的 /root/path/yyy ,那么本質(zhì)上 /Users/aaron/xxx 和 /root/path/yyy 就是同一個文件夾,就省去了來回復(fù)制的麻煩。具體操作就是第一次啟動容器時指定,注意也就是 docker run 命令時指定。
          比如
          docker run -it --hostname=ubuntu2 --name=my-ubuntu2 -v /Users/aaron/:/root/ ubuntu /bin/bash
          會啟動一個新的容器,如下圖所示:
          路徑映射

          步驟 5:網(wǎng)絡(luò)配置、端口映射

          默認(rèn)情況下,容器可以訪問宿主機(jī)(安裝 docker 的電腦)及宿主機(jī)外部的網(wǎng)絡(luò)上的服務(wù),但宿主機(jī)及外部網(wǎng)絡(luò)無法訪問容器內(nèi)部的服務(wù),這是為什么呢?
          回答這個問題需要先了解 docker 的網(wǎng)絡(luò),如果你了解虛擬機(jī)的網(wǎng)絡(luò),那么對比著理解即可。
          創(chuàng)建 docker 容器時,可以用 --network string 參數(shù)來指定四種網(wǎng)絡(luò)模式:bridge(默認(rèn))、host、none、container。執(zhí)行 docker network ls 可以看出(其中 container 未列出):
          (py38env)????~?docker?network?ls
          NETWORK?ID??????????NAME????????????????DRIVER??????????????SCOPE
          a3b7e595cd4e????????bridge??????????????bridge??????????????local
          b49f580dfd98????????host????????????????host????????????????local
          63ce10ba830f????????none????????????????null????????????????local
          (py38env)????~
          1、bridge,即橋接模式,docker run 的默認(rèn)模式。
          此模式會為容器分配network namespace、設(shè)置 IP 等, 并將容器橋接到一個虛擬網(wǎng)橋 docker0 (docker0 只是個名字,后續(xù)版本就叫 bridge0) 上,可以和同一宿主機(jī)上橋接模式的其他容器進(jìn)行通信。docker0 是 docker 在啟動時在宿主機(jī)器上創(chuàng)建的虛擬網(wǎng)絡(luò)接口,它會從 RFC 1918 定義的私有地址中隨機(jī)選擇一個主機(jī)不用的地址和子網(wǎng)掩碼,并將它分配給 docker0,默認(rèn)選擇 172.18.0.1/16,一個 16 位的子網(wǎng)掩碼給容器提供了 65534 個 IP 地址。docker0 并不是正常的網(wǎng)絡(luò)接口,只是一個在綁定到這上面的其他網(wǎng)卡間自動轉(zhuǎn)發(fā)數(shù)據(jù)包的虛擬以太網(wǎng)橋,可以使容器與主機(jī)相互通信、容器與容器間相互通信。
          此模式可以理解為 docker 自己有個內(nèi)部局域網(wǎng)環(huán)境,如果說 docker0 是個 wifi 信號的話,那這些容器就是連接這個熱點的電腦。因此,容器可以訪問宿主機(jī)(安裝 docker 的電腦)及宿主機(jī)外部的網(wǎng)絡(luò)上的服務(wù),但宿主機(jī)及外部網(wǎng)絡(luò)無法訪問容器內(nèi)部的服務(wù)。
          但是,可以通過端口映射的方式,讓外網(wǎng)訪問容器某些端口。比如運行容器
          docker run -it -p 38022:22 --name='my-ubuntu-3' ubuntu /bin/bash 之后,容器 my-ubuntu-3 的 22 端口被映射在了宿主機(jī)的 38022 端口,我們可以直接 ssh root@localhost -p 38022 來進(jìn)入容器。如果要登陸成功,這里有個前提, ubuntu 容器已經(jīng)開啟 ssh 服務(wù),允許 root ssh 遠(yuǎn)程登陸,且你知道 root 密碼。
          在其他服務(wù)器上通過訪問宿主機(jī) ip 地址加端口即可訪問容器,還可以一次映射多個端口。運行容器 docker run -it -p 38022:22 -p 38080:80 --name='my-ubuntu-4' ubuntu /bin/bash
          端口映射還可使用-P來實現(xiàn)將容器內(nèi)部開放的網(wǎng)絡(luò)端口隨機(jī)映射到宿主機(jī)的一個端口上
          命令 docker port container_ID 可以查看容器的端口映射情況:
          (py38env)????~?docker?port?805d8ef4b504
          22/tcp?->?0.0.0.0:38022
          (py38env)????~
          2、host,主機(jī)模式。
          主機(jī)模式下,docker 共享主機(jī)的網(wǎng)絡(luò)命名空間,也就是說--network host 表示容器與宿主機(jī)共用網(wǎng)卡、路由等。并且該容器不會分配自己的 IP 地址。如果在容器中運行一個監(jiān)聽端口 80 的應(yīng)用,則該容器的應(yīng)用在宿主機(jī)主機(jī) IP 地址上的端口 80 上可用。
          例如,我們在 10.10.101.105/24 的機(jī)器上用 host 模式啟動一個含有 web 應(yīng)用的docker 容器,監(jiān)聽 tcp80 端口。當(dāng)我們在容器中執(zhí)行任何類似 ifconfig 命令查看網(wǎng)絡(luò)環(huán)境時,看到的都是宿主機(jī)上的信息。而外界訪問容器中的應(yīng)用,則直接使用 10.10.101.105:80 即可,不用任何 NAT 轉(zhuǎn)換,就如直接跑在宿主機(jī)中一樣。但是,容器的其他方面,如文件系統(tǒng)、進(jìn)程列表等還是和宿主機(jī)隔離的。
          如果您host對容器使用網(wǎng)絡(luò)模式,則該容器的網(wǎng)絡(luò)堆棧不會與Docker主機(jī)隔離(該容器共享主機(jī)的網(wǎng)絡(luò)名稱空間),并且該容器不會分配自己的IP地址。例如,如果您運行一個綁定到端口80 host 的容器并使用網(wǎng)絡(luò),則該容器的應(yīng)用程序在主機(jī)IP地址上的端口80上可用。
          host 模式下,容器不擁有自己的 IP 地址 端口映射不生效,并且 -p,--publish,-P,和 --publish-all 選項都將被忽略
          主機(jī)模式網(wǎng)絡(luò)對于優(yōu)化性能以及在容器需要處理大量端口的情況下很有用,因為它不需要網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT),并且不會為每個端口創(chuàng)建“ userland-proxy”。
          主機(jī)模式僅適用于Linux主機(jī),而 Mac 的 Docker Desktop,Windows 的 DockerDesktop 或 Windows Server 的 Docker EE 不支持。
          3、container,容器模式。
          跟 host 模式類似,只不過其網(wǎng)絡(luò)命名空間共享的對象為一個容器而非宿主機(jī)。
          4、none。
          none 表示容器默認(rèn)有自己的 network namespace,但不為 docker 容器進(jìn)行任何網(wǎng)絡(luò)配置, 這將所有網(wǎng)絡(luò)創(chuàng)建操作完全自定義,實現(xiàn)更加靈活復(fù)雜的網(wǎng)絡(luò)。

          步驟 6:自定義鏡像:保存修改后的容器至新的鏡像

          命令:docker commit 容器id 鏡像名稱
          只要我們不執(zhí)行 docker rm 來刪除容器,那么對該容器的修改一直有效,但通常情況下,我們對容器作出一些修改,是為了給別人用,比如將自己的程序部署在容器中打包成鏡像,目的是為了發(fā)布出去方便別人直接使用。那么就需要將對容器的修改保存為新的鏡像。
          例如本例子中:
          (py38env)????~?docker?exec?-it?my_host?/bin/bash
          root@docker-desktop:/#?ls
          bin??boot??dev??etc??home??lib??lib32??lib64??libx32??media??mnt??opt??proc??root??run??sbin??srv??sys??tmp??usr??var
          root@docker-desktop:/#?cd?root
          root@docker-desktop:~#?ls
          root@docker-desktop:~#?touch?saved.txt
          root@docker-desktop:~#?ls
          saved.txt
          root@docker-desktop:~#?exit
          exit
          (py38env)????~?docker?commit?my_host?my_ubuntu_image
          sha256:3ae070a40b8da2411a0b212e8e78a7f02a19820fd45f67288b436c427316e34e
          (py38env)????~?docker?images
          REPOSITORY???????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
          my_ubuntu_image??????????latest??????????????3ae070a40b8d????????4?seconds?ago???????171MB
          kali?????????????????????latest??????????????c9c07bf9ce32????????2?days?ago??????????1.74GB
          ubuntu???????????????????latest??????????????bb0eaf4eee00????????7?days?ago??????????72.9MB
          (py38env)????~?docker?run?-it?my_ubuntu_image?/bin/bash
          root@114112c6194d:/#?ll?/root/
          total?24
          drwx------?1?root?root?4096?Sep?24?07:20?./
          drwxr-xr-x?1?root?root?4096?Sep?24?07:20?../
          -rw-------?1?root?root???38?Sep?24?07:20?.bash_history
          -rw-r--r--?1?root?root?3106?Dec??5??2019?.bashrc
          -rw-r--r--?1?root?root??161?Dec??5??2019?.profile
          -rw-r--r--?1?root?root????0?Sep?24?07:19?saved.txt
          root@114112c6194d:/#

          步驟 7:發(fā)布鏡像

          1、先在 https://hub.docker.com/ 上注冊一個賬號,并創(chuàng)建一個倉庫,比如長這樣:
          創(chuàng)建一個docker倉庫
          2、使用第 1 步的賬號密碼在 Docker Desktop 上登陸。
          3、注意,我們創(chuàng)建的倉庫是 somenzz/my-kali,因此先執(zhí)行 docker tag my-kali somenzz/my-kali 給已存在的鏡像打個標(biāo)簽,然后執(zhí)行 docker push somenzz/my-kali 上傳本地鏡像。
          4、如果是公開的倉庫,其他人執(zhí)行docker pull somenzz/my-kali 即可下載你上傳的鏡像來使用。
          執(zhí)行細(xì)節(jié)如下:
          (py38env)????~?docker?tag?my-kali?somenzz/my-kali
          (py38env)????~?docker?images
          REPOSITORY???????????????TAG?????????????????IMAGE?ID????????????CREATED?????????????SIZE
          my-kali??????????????????latest??????????????975cbe3a4619????????14?minutes?ago??????1.83GB
          somenzz/my-kali??????????latest??????????????975cbe3a4619????????14?minutes?ago??????1.83GB
          my_ubuntu_image??????????latest??????????????3ae070a40b8d????????24?minutes?ago??????171MB
          kali?????????????????????latest??????????????c9c07bf9ce32????????2?days?ago??????????1.74GB
          ubuntu???????????????????latest??????????????bb0eaf4eee00????????7?days?ago??????????72.9MB
          (py38env)????~?docker?push?somenzz/my-kali
          The?push?refers?to?repository?[docker.io/somenzz/my-kali]
          4ed57b65cfb6:?Pushed
          8baabf99a4c6:?Pushing??1.629GB/1.629GB
          8e0f65c626fe:?Pushing??102.7MB/113.8MB
          ......

          步驟 8:管理本地鏡像和容器

          將指定鏡像保存成 tar 歸檔文件,用于持久化鏡像
          docker?save?-o?my_ubuntu.tar?ubuntu
          從歸檔文件中創(chuàng)建鏡像
          docker?import?my_ubuntu.tar?my-ubuntu
          將指定容器的文件系統(tǒng)保存成 tar 歸檔文件,用于持久化容器
          docker?export?containerID/containerName?>?/home/export.tar
          列出所有的容器
          docker?ps?-a
          列出最近一次啟動的容器
          docker?ps?-l
          檢查鏡像
          docker?inspect?image-name
          檢查容器
          docker?inspect?container-name/containerID
          獲取容器的相關(guān)信息:
          獲取容器CID
          docker?inspect?-f?'{{.Id}}'?container-name/containerID
          獲取容器PID
          docker?inspect?-f?'{{.State.Pid}}'?container-name/containerID
          獲取容器IP
          docker?inspect?-f?'{{.NetworkSettings.IPAddress}}'?container-name/containerID
          獲取容器網(wǎng)關(guān)
          docker?inspect?-f?'{{.NetworkSettings.Gateway}}'?container-name/containerID
          獲取容器 MAC
          docker?inspect?-f?'{{.NetworkSettings.MacAddress}}'?container-name/containerID
          停止容器
          docker?stop?containerID/container-name
          停止所有容器
          docker?kill?$(docker?ps?-a?-q)
          啟動容器
          docker?start?containerID/container-name
          刪除單個正在運行的容器,刪除容器之前要先停止該容器的運行
          docker?stop?containerID/container-name
          docker?rm?containerID/container-name
          刪除所有容器
          docker?kill?$(docker?ps?-a?-q)?docker?rm?$(docker?ps?-a?-q)
          刪除鏡像
          docker?rmi?image-name

          系統(tǒng)性的 docker 學(xué)習(xí)資料

          分享一些可以系統(tǒng)學(xué)習(xí) Docker 的地方,對于新手來說很有幫助。這些都是權(quán)威科學(xué)的學(xué)習(xí)教程,不必記錄網(wǎng)址,記錄中文名稱,搜索引擎搜索即可。
          1. docker 官方文檔: https://docs.docker.com/

          2. docker 官方博客: https://www.docker.com/blog/

          3. docker 中文社區(qū): https://www.docker.org.cn/

          4. 動手玩docker:網(wǎng)易云免費課堂

          容器比虛擬機(jī)的優(yōu)勢

          由于容器是進(jìn)程級別的,相比虛擬機(jī)有很多優(yōu)勢。(1)啟動快:容器里面的應(yīng)用,直接就是底層系統(tǒng)的一個進(jìn)程,而不是虛擬機(jī)內(nèi)部的進(jìn)程。所以,啟動容器相當(dāng)于啟動本機(jī)的一個進(jìn)程,而不是啟動一個操作系統(tǒng),速度就快很多。(2)資源占用少 :容器只占用需要的資源,不占用那些沒有用到的資源;虛擬機(jī)由于是完整的操作系統(tǒng),不可避免要占用所有資源。另外,多個容器可以共享資源,虛擬機(jī)都是獨享資源。(3)體積小:容器只要包含用到的組件即可,而虛擬機(jī)是整個操作系統(tǒng)的打包,所以容器文件比虛擬機(jī)文件要小很多。總之,容器有點像輕量級的虛擬機(jī),能夠提供虛擬化的環(huán)境,但是成本開銷小得多

          小結(jié)

          本文從使用 docker 的整個生命周期的順序進(jìn)行講述,方便理解和記憶:從安裝 docker 軟件,下載鏡像,啟動容器,文件傳輸,網(wǎng)絡(luò)設(shè)置,端口映射,保存容器到鏡像,發(fā)布鏡像等應(yīng)有僅有,值得入門學(xué)習(xí)和收藏。
          (完)
          寫到這里感覺身體被掏空,覺得有用請點贊、再看、轉(zhuǎn)發(fā),感謝老鐵支持。
          瀏覽 51
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  夏夏粉嫩黑鲍鱼大胆尤物P | 无码区免费看一级毛片A片 | 大香蕉东京热 | 超碰乱仑 | 在线白浆|