国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Docker 筆記(1):介紹、鏡像、容器及其基本操作

khs1994 / 1179人閱讀

摘要:由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器。鏡像實(shí)際是由多層文件系統(tǒng)聯(lián)合組成。容器可以被創(chuàng)建啟動(dòng)停止刪除暫停等。容器的實(shí)質(zhì)是進(jìn)程,但與直接在宿主執(zhí)行的進(jìn)程不同,容器進(jìn)程運(yùn)行于屬于自己的獨(dú)立的命名空間。

Docker簡介

Docker 使用 Google 公司推出的 Go 語言 進(jìn)行開發(fā)實(shí)現(xiàn),基于 Linux 內(nèi)核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術(shù),對進(jìn)程進(jìn)行封裝隔離,屬于 操作系統(tǒng)層面的虛擬化技術(shù)。由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器。最初實(shí)現(xiàn)是基于 LXC,從 0.7 版本以后開始去除 LXC,轉(zhuǎn)而使用自行開發(fā)的 libcontainer,從 1.11 開始,則進(jìn)一步演進(jìn)為使用 runC 和 containerd。

Docker 在容器的基礎(chǔ)上,進(jìn)行了進(jìn)一步的封裝,從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)到進(jìn)程隔離等等,極大的簡化了容器的創(chuàng)建和維護(hù)。使得 Docker 技術(shù)比虛擬機(jī)技術(shù)更為輕便、快捷。

下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處。傳統(tǒng)虛擬機(jī)技術(shù)是虛擬出一套硬件后,在其上運(yùn)行一個(gè)完整操作系統(tǒng),在該系統(tǒng)上再運(yùn)行所需應(yīng)用進(jìn)程;而容器內(nèi)的應(yīng)用進(jìn)程直接運(yùn)行于宿主的內(nèi)核,容器內(nèi)沒有自己的內(nèi)核,而且也沒有進(jìn)行硬件虛擬。因此容器要比傳統(tǒng)虛擬機(jī)更為輕便。----Docker gitbook




Docker通常用于如下場景:

web應(yīng)用的自動(dòng)化打包和發(fā)布;

自動(dòng)化測試和持續(xù)集成、發(fā)布;

在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺(tái)應(yīng)用;

從頭編譯或者擴(kuò)展現(xiàn)有的OpenShift或Cloud Foundry平臺(tái)來搭建自己的PaaS環(huán)境。

關(guān)于容器、鏡像、倉庫等基本概念見Docker gitbook--基本概念

鏡像

容器是鏡像的運(yùn)行實(shí)例。Docker鏡像是一個(gè)特殊的文件系統(tǒng),除了提供容器運(yùn)行時(shí)所需的程序、庫、資源、配置等文件外,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。 鏡像不包含任何動(dòng)態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會(huì)被改變。---- http://dockone.io/article/6051

鏡像的實(shí)現(xiàn)原理

Docker 鏡像是怎么實(shí)現(xiàn)增量的修改和維護(hù)的?

每個(gè)鏡像都由很多層次構(gòu)成,Docker 使用 Union FS 將這些不同的層結(jié)合到一個(gè)鏡像中去。

通常 Union FS 有兩個(gè)用途, 一方面可以實(shí)現(xiàn)不借助 LVM、RAID 將多個(gè) disk 掛到同一個(gè)目錄下,另一個(gè)更常用的就是將一個(gè)只讀的分支和一個(gè)可寫的分支聯(lián)合在一起,Live CD 正是基于此方法可以允許在鏡像不變的基礎(chǔ)上允許用戶在其上進(jìn)行一些寫操作。

Docker 在 AUFS 上構(gòu)建的容器也是利用了類似的原理。關(guān)于聯(lián)合文件系統(tǒng)UFS可見http://www.dockerinfo.net/175...

Docker設(shè)計(jì)時(shí),就充分利用Union FS的技術(shù),將其設(shè)計(jì)為分層存儲(chǔ)的架構(gòu)。 鏡像實(shí)際是由多層文件系統(tǒng)聯(lián)合組成。

鏡像構(gòu)建時(shí),會(huì)一層層構(gòu)建,前一層是后一層的基礎(chǔ)。每一層構(gòu)建完就不會(huì)再發(fā)生改變,后一層上的任何改變只發(fā)生在自己這一層。比如,刪除前一層文件的操作,實(shí)際不是真的刪除前一層的文件,而是僅在當(dāng)前層標(biāo)記為該文件已刪除。在最終容器運(yùn)行的時(shí)候,雖然不會(huì)看到這個(gè)文件,但是實(shí)際上該文件會(huì)一直跟隨鏡像。因此,在構(gòu)建鏡像的時(shí)候,需要額外小心,每一層盡量只包含該層需要添加的東西,任何額外的東西應(yīng)該在該層構(gòu)建結(jié)束前清理掉。

相關(guān)命令

搜索可用的鏡像

docker search mysql

拉取鏡像

docker pull image_name:tag  // 如 docker pull mysql:5.7

刪除鏡像

docker rmi image_name:tag
docker rmi image_id

刪除空懸鏡像

docker image prune
// or : docker rmi $(docker images -aq -f dangling=true)

導(dǎo)出、導(dǎo)出鏡像

有時(shí)候我們需要將自己構(gòu)造的鏡像分享給別人,但又不想放在倉庫上,那么就可以將鏡像導(dǎo)出為文件,然后copy給別人,再由其導(dǎo)入即可分享給他人使用。

docker save image_name  -o  /home/xxx/tar_name.tar
docker load -i /home/xxx/tar_name.tar  

容器 概念

鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的 類 和 實(shí)例 一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。

容器的實(shí)質(zhì)是進(jìn)程,但與直接在宿主執(zhí)行的進(jìn)程不同,容器進(jìn)程運(yùn)行于屬于自己的獨(dú)立的 命名空間。因此容器可以擁有自己的 root 文件系統(tǒng)、自己的網(wǎng)絡(luò)配置、自己的進(jìn)程空間,甚至自己的用戶 ID 空間。容器內(nèi)的進(jìn)程是運(yùn)行在一個(gè)隔離的環(huán)境里,使用起來,就好像是在一個(gè)獨(dú)立于宿主的系統(tǒng)下操作一樣。這種特性使得容器封裝的應(yīng)用比直接在宿主運(yùn)行更加安全。也因?yàn)檫@種隔離的特性,很多人初學(xué) Docker 時(shí)常常會(huì)混淆容器和虛擬機(jī)。

容器存儲(chǔ)層的生存周期和容器一樣,容器消亡時(shí),容器存儲(chǔ)層也隨之消亡。因此,任何保存于容器存儲(chǔ)層的信息都會(huì)隨容器刪除而丟失。按照 Docker 最佳實(shí)踐的要求,容器不應(yīng)該向其存儲(chǔ)層內(nèi)寫入任何數(shù)據(jù),容器存儲(chǔ)層要保持無狀態(tài)化。所有的文件寫入操作,都應(yīng)該使用 數(shù)據(jù)卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫會(huì)跳過容器存儲(chǔ)層,直接對宿主(或網(wǎng)絡(luò)存儲(chǔ))發(fā)生讀寫,其性能和穩(wěn)定性更高。----《docker gitbook》

相關(guān)命令

run

docker run [options] image [command]

options:
-i: 讓容器的標(biāo)準(zhǔn)輸入保持打開
-t: 讓docker 分配一個(gè)偽終端pseudo-tty
-d: 后臺(tái)運(yùn)行并返回一個(gè)唯一的id。要獲取容器的輸出信息,可以通過 docker [container] logs [container ID or NAMES] 命令。

當(dāng)利用 docker run 來創(chuàng)建容器時(shí),Docker 在后臺(tái)運(yùn)行的標(biāo)準(zhǔn)操作包括:

檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載

利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器

分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫層

從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去

從地址池配置一個(gè) ip 地址給容器

執(zhí)行用戶指定的應(yīng)用程序

執(zhí)行完畢后容器被終止


start

啟動(dòng)已經(jīng)終止的容器

docker start container

容器的核心為所執(zhí)行的應(yīng)用程序,所需要的資源都是應(yīng)用程序運(yùn)行所必需的。除此之外,并沒有其它的資源。可以在偽終端中利用 ps 或 top 來查看進(jìn)程信息


stop

docke r [container] stop contain_id_or_name
// 停止所有的容器
// docker ps -a 的作用是列出所有的容器,-q 的作用是取出容器的id
docker stop $(docker ps -aq)

rm

刪除容器

docker [container] rm container_id

prune

刪除終止的容器

docker rm $(docker ps -aq)

在使用 -d 參數(shù)時(shí),容器啟動(dòng)后會(huì)進(jìn)入后臺(tái)模式運(yùn)行。

某些時(shí)候需要進(jìn)入容器進(jìn)行操作,包括使用 docker attach 命令或 docker exec 命令,推薦大家使用 docker exec 命令,原因會(huì)在下面說明。

attach

docker attach container_id

注意: 如果從這個(gè) stdin 中 exit,會(huì)導(dǎo)致容器的停止。

exec

docker exec [options] container_id command
options:
-i: 輸出
-t: 終端
如:
docker exec -it 69d1 bash

stdin 中 exit,不會(huì)導(dǎo)致容器的停止。這就是為什么推薦大家使用 docker exec 的原因。

更多參數(shù)說明請使用 docker exec --help 查看。


有時(shí)候我們會(huì)需要將自己機(jī)器的容器定期保存下來或者分享給其他人,那么就可以使用導(dǎo)入/導(dǎo)出的功能

export

docker export container_id > your_container_file
example:
    docker export fe3 > ubuntu

這樣將導(dǎo)出容器快照到本地文件。

import

cat you_container_file > docker import - yourlibrary/your_image:tag

可以使用 docker import 從容器快照文件中再導(dǎo)入為鏡像。

此外,也可以通過指定 URL 或者某個(gè)目錄來導(dǎo)入,例如

docker import http://example.com/exampleimage.tgz example/imagerepo

用戶既可以使用 docker load 來導(dǎo)入鏡像存儲(chǔ)文件到本地鏡像庫,也可以使用 docker import 來導(dǎo)入一個(gè)容器快照到本地鏡像庫。這兩者的區(qū)別在于容器快照文件將丟棄所有的歷史記錄和元數(shù)據(jù)信息( 即僅保存容器當(dāng)時(shí)的快照狀態(tài)) ,而鏡像存儲(chǔ)文件將保存完整記錄,體積也要大。此外,從容器快照文件導(dǎo)入時(shí)可以重新指定標(biāo)簽等元數(shù)據(jù)信息

數(shù)據(jù)卷

數(shù)據(jù)卷 是一個(gè)可供一個(gè)或多個(gè)容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:

數(shù)據(jù)卷 可以在容器之間共享和重用

對 數(shù)據(jù)卷 的修改會(huì)立馬生效

對 數(shù)據(jù)卷 的更新,不會(huì)影響鏡像

數(shù)據(jù)卷 默認(rèn)會(huì)一直存在,即使容器被刪除

注意: 數(shù)據(jù)卷 的使用,類似于 Linux 下對目錄或文件進(jìn)行 mount,鏡像中的被指定為掛載點(diǎn)的目錄中的文件會(huì)隱藏掉,能顯示看的是掛載的 數(shù)據(jù)卷 。因此你的容器目錄dir有一個(gè)文件為temp.data,如果你在dir掛載了一個(gè)數(shù)據(jù)卷,那么你就再也不能讀取temp.data,除非你移除該數(shù)據(jù)卷。

創(chuàng)建數(shù)據(jù)卷
docker volume create volume_name
查看數(shù)據(jù)卷
docker volume ls // 列出數(shù)據(jù)卷列表
docker volume inspect volume_name //查看指定的數(shù)據(jù)卷信息
--------------------------------------------------------------
輸出:

[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": {},
        "Scope": "local"
    }
]
掛載數(shù)據(jù)卷
docker run [options] --name container_name
    --mount source=volume_name,targe=path_in_container
    image_name_or_id
    [command]

查看掛載信息,在輸出的信息的Mount字段包含了掛載信息

docker inspect container_name

result:
"Mounts": [
{
    "Type": "volume",
    "Name": "my-vol",
    "Source": "/var/lib/docker/volumes/my-vol/_data",
    "Destination": "/app",
    "Driver": "local",
    "Mode": "",
    "RW": true,
    "Propagation": ""
}
]
刪除數(shù)據(jù)卷
docker volume rm volume_name

刪除無主數(shù)據(jù)卷:即沒有被容器使用的數(shù)據(jù)卷

docker volume prune
掛載主機(jī)目錄作為數(shù)據(jù)卷
docker run [option]
    [--name container_name]
    -- mount type=bind,source=host_path,target=container_path
    image_name
    [command]

上面的命令加載主機(jī)的 /src/webapp 目錄到容器的 /opt/webapp 目錄。這個(gè)功能在進(jìn)行測試的時(shí)候十分方便,比如用戶可以放置一些程序到本地目錄中,來查看容器是否正常工作。本地目錄的路徑必須是絕對路徑,以前使用 -v 參數(shù)時(shí)如果本地目錄不存在 Docker 會(huì)自動(dòng)為你創(chuàng)建一個(gè)文件夾,現(xiàn)在使用 --mount 參數(shù)時(shí)如果本地目錄不存在,Docker 會(huì)報(bào)錯(cuò)。

也可以為docker數(shù)據(jù)卷指定讀寫權(quán)限

-- mount type=bind,source=host_path,target=container_path,readonly

這樣你就不能在容器中寫container_path的目錄了

也可以掛載文件

-- mount type=bind,source=host_path,target=container_path

下一節(jié):Docker 筆記(2):Dockerfile

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27052.html

相關(guān)文章

  • 視頻筆記Docker 特性及其相關(guān)工具 - Tom Verelst

    摘要:年月發(fā)布了內(nèi)核對進(jìn)行了重新設(shè)計(jì)。年發(fā)布了內(nèi)核更加徹底的改造了,稱為,并且認(rèn)可其已經(jīng)穩(wěn)定。集群工具,多宿主管理運(yùn)行。通過的設(shè)置通過設(shè)置將設(shè)置上標(biāo)簽。使用兩種方式傳遞給宿主其的主機(jī)位置,環(huán)境變量和文件。 https://www.youtube.com/watch?v=heBI7oQvHZU http://v.qq.com/page/o/8/j/o03134mlm8j.html 基本介紹 D...

    Code4App 評論0 收藏0
  • Docker 筆記(2):Dockerfile

    摘要:是由一系列命令和參數(shù)構(gòu)成的腳本,這些命令應(yīng)用于基礎(chǔ)鏡像并最終創(chuàng)建一個(gè)新的鏡像。每個(gè)中只能有一個(gè),當(dāng)指定多個(gè)時(shí),只有最后一個(gè)生效。是改變工作目錄,則是改變之后層的執(zhí)行以及這類命令的身份。 Dockerfile是由一系列命令和參數(shù)構(gòu)成的腳本,這些命令應(yīng)用于基礎(chǔ)鏡像并最終創(chuàng)建一個(gè)新的鏡像。 常用的選項(xiàng) 例子: FROM node:latest MAINTAINER my_name ADD ....

    DesGemini 評論0 收藏0
  • Docker實(shí)戰(zhàn)入門學(xué)習(xí)筆記】什么是docker

    摘要:實(shí)現(xiàn)前述目的的方式有兩種在一個(gè)文件中指定一個(gè)基礎(chǔ)鏡像及需要完成的修改或通過運(yùn)行一個(gè)鏡像,對其進(jìn)行修改并提交。容器對外公開服務(wù)是必要的,因此允許公開容器的特定端口。鏡像必須完全可移植,不允許例外。 Docker是一個(gè)相對較新且發(fā)展非常快速的項(xiàng)目,可用來創(chuàng)建非常輕量的虛擬機(jī)。注意,這里的引號非常重要,Docker創(chuàng)建的并非真正的虛擬機(jī),而更像是打了激素的chroot,嗯,是大量的激素。 D...

    seanHai 評論0 收藏0
  • 慕課網(wǎng)_《Docker入門》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。必填用于執(zhí)行命令,當(dāng)執(zhí)行完畢后,將產(chǎn)生一個(gè)新的文件層。可選指定此鏡像啟動(dòng)時(shí)默認(rèn)執(zhí)行命令。可選用于指定需要暴露的網(wǎng)絡(luò)端口號。可選向鏡像中掛載一個(gè)卷組。 時(shí)間:2017年09月16日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無 學(xué)習(xí)源碼:無 第一章:課程簡介 1-1 課程介紹 Docke...

    CoorChice 評論0 收藏0
  • Docker Swarm學(xué)習(xí)筆記

    摘要:拉取鏡像啟動(dòng)發(fā)現(xiàn)后端創(chuàng)建集群創(chuàng)建主管理員操作對象因?yàn)檫@里的既是主管理員又是發(fā)現(xiàn)服務(wù)后臺(tái),所以和的都是。主管理員操作節(jié)點(diǎn)的容器查看集群節(jié)點(diǎn)的容器列表刪除容器啟停容器與直接操作的區(qū)別就是后面加了 搭建基礎(chǔ)環(huán)境 官方文檔中演示時(shí)用到了五臺(tái)主機(jī)/虛擬機(jī); showImg(https://segmentfault.com/img/bVzce2); 這里因?yàn)橘Y源有限,只用三臺(tái); showImg(h...

    JasinYip 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<