docker(容器)基本介紹和使用

什么是Docker

Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國(guó)期間發(fā)起的一個(gè)公司內(nèi)部項(xiàng)目,

它是基于 dotCloud 公司多年云服務(wù)技術(shù)的一次革新,并于 2013 年 3 月以 Apache 2.0 授權(quán)協(xié)議開源,

主要項(xiàng)目代碼在 GitHub 上進(jìn)行維護(hù)。Docker 項(xiàng)目后來還加入了 Linux 基金會(huì),并成立推動(dòng) 開放容器聯(lián)盟(OCI)。

為什么要使用Docker

1.更高效的利用系統(tǒng)資源

2.更快速的啟動(dòng)時(shí)間

3.一致的運(yùn)行環(huán)境

4.持續(xù)交付和部署

5.更輕松地遷移

6.更輕松的維護(hù)和擴(kuò)展

Docker包括三個(gè)基本概念

鏡像Image

容器Container

倉庫Repository

Docker鏡像

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ì)被改變。

Docker容器

1.鏡像和容器的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類和實(shí)例一樣,鏡像是靜態(tài)的定義,

容器是鏡像運(yùn)行的時(shí)的尸體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。

2.容器的實(shí)質(zhì)是進(jìn)程,但與直接在宿主機(jī)執(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)用比直接在宿主機(jī)上運(yùn)行更加的安全。

3.容器的存儲(chǔ)和鏡像一樣是分層存儲(chǔ),每一個(gè)容器運(yùn)行時(shí)是以鏡像為基礎(chǔ)層

在其上面創(chuàng)建一個(gè)當(dāng)前容器的存儲(chǔ)層,稱這個(gè)為容器運(yùn)行時(shí)讀寫而準(zhǔn)備的存儲(chǔ)曾為

容器存儲(chǔ)層。

4.容器存儲(chǔ)成的生命周期和容器一樣,容器消亡時(shí),容器存儲(chǔ)層也隨之消亡,

任何保存于容器存儲(chǔ)層的信息都會(huì)和容器刪除而丟失。

5.Docker最佳實(shí)踐需求,容器不應(yīng)該向存儲(chǔ)層內(nèi)寫入任何數(shù)據(jù),存儲(chǔ)層要保持無狀態(tài)化。

所有文件的寫入操作,都應(yīng)該使用數(shù)據(jù)卷(Volume)、或者綁定宿主目錄、這些操作會(huì)直接

跳過容器存儲(chǔ)層,直接對(duì)宿主發(fā)生讀寫,性能和穩(wěn)定性更高。

6.數(shù)據(jù)卷的生命周期獨(dú)立于容器,容器消亡,數(shù)據(jù)卷不會(huì)消亡。容器刪除或者重新

運(yùn)行之后,數(shù)據(jù)不會(huì)丟失。

7.獲取鏡像倉庫的命令是 docker pull

8.運(yùn)行容器的命令是 docker run -it --rm \

ubuntu:18.04 \

bash

-it:這是兩個(gè)參數(shù),一個(gè)是

-i:交互式操作,一個(gè)是

-t 終端。

我們這里打算進(jìn)入 bash 執(zhí)行一些命令并查看返回結(jié)果,

因此我們需要交互式終端。

--rm:這個(gè)參數(shù)是說容器退出后隨之將其刪除。

默認(rèn)情況下,為了排障需求,退出的容器并不會(huì)立即刪除,

除非手動(dòng) docker rm。我們這里只是隨便執(zhí)行個(gè)命令,看看結(jié)果,

不需要排障和保留結(jié)果,因此使用 --rm 可以避免浪費(fèi)空間。

ubuntu:18.04:這是指用 ubuntu:18.04 鏡像為基礎(chǔ)來啟動(dòng)容器。

bash:放在鏡像名后的是 命令,這里我們希望有個(gè)交互式 Shell,

因此用的是 bash。

9.列出鏡像 docker images ls(注意:Docker Hub上顯示的鏡像體積是壓縮后的)

10.虛懸鏡像

這個(gè)鏡像既沒有倉庫名字也沒有標(biāo)簽均為<none>,原為mongo:3.2,

因官方鏡像維護(hù)后,docker pull mongo:3.2獲取這個(gè)鏡像的時(shí)候這個(gè)鏡像名字被轉(zhuǎn)移到

新下載的鏡像身上,而舊的鏡像上的這個(gè)名稱則被取消,從而成

為了<none>,docker build 也同樣可以導(dǎo)致這種現(xiàn)象

11.中層鏡像

docker image ls 只會(huì)顯示最上層的鏡像

docker image ls -a顯示中層需要加參數(shù)

12.列出特定的某個(gè)鏡像,也就是指定的倉庫名字和標(biāo)簽

docker image ls --filter(簡(jiǎn)寫:-f 作用:過濾)

docker image ls -f since(before)=mongo:3.2查看在mongo:3.2之后(之前)建立的鏡像

docker image ls -f label=com.example.version=0.1通過標(biāo)簽來過濾

docker image ls -q--filter 配合 -q 產(chǎn)生出指定范圍的 ID 列表

13.刪除本地鏡像

docker image rm [選項(xiàng)] <鏡像1> [<鏡像2> ...]

14.查看鏡像、容器、數(shù)據(jù)卷所占用的空間

docker system df

Docker Registry

作用:集中存儲(chǔ),分發(fā)鏡像服務(wù)

1.Docker Registry可以包含多個(gè)倉庫,每個(gè)倉庫可以包含多個(gè)標(biāo)簽,每個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)鏡像。

2.一個(gè)倉庫會(huì)包含一個(gè)軟件不同版本的鏡像,標(biāo)簽就常用于對(duì)應(yīng)用該軟件的各個(gè)版本

通過<倉庫名>:<標(biāo)簽>的格式來指定具體是這個(gè)軟件那個(gè)版本的鏡像,如果不給出標(biāo)簽

,將以latest為默認(rèn)標(biāo)簽

3.倉庫名經(jīng)常以兩段路徑形式出現(xiàn)

4.Docker Registry 公開服務(wù)開放給用戶使用、允許用戶管理鏡像的 Registry 服務(wù)。

一般這類公開服務(wù)允許用戶免費(fèi)上傳、下載公開的鏡像,并可能提供收費(fèi)服務(wù)供用戶管理私有鏡像。

5.私有 Docker Registry

利用commit理解鏡像的構(gòu)成

不要使用 docker commit 定制鏡像,定制鏡像應(yīng)該使用 Dockerfile 來完成

docker diff webserver 修改了容器的存儲(chǔ)層 可查看具體改動(dòng)

Dockerfile

每一個(gè)命令就是建立一個(gè)鏡像,run也是

運(yùn)行多個(gè)命令僅使用一個(gè)run指令,并使用&&連接起來可表示為一層

容器

守護(hù)態(tài)運(yùn)行(后臺(tái)運(yùn)行)

docker在后臺(tái)運(yùn)行的時(shí)不直接把執(zhí)行命令的結(jié)果輸出在當(dāng)前宿主機(jī)下

使用-d來實(shí)現(xiàn),輸出結(jié)果不會(huì)顯示在宿主機(jī)上 結(jié)果可以用docker logs查看

使用-d啟動(dòng)后會(huì)返回一個(gè)唯一的id,也可以通過docker container ls 查看容器信息

docker container logs [container ID or NAMES]

終止容器

docker container stop 終止容器的運(yùn)行

當(dāng)docker容器中指定的應(yīng)用終結(jié)時(shí),容器也自動(dòng)終止

docker container ls -a查看容器的狀態(tài)

docker container start 將一個(gè)已經(jīng)終止的容器啟動(dòng)運(yùn)行

docker container restart 命令會(huì)將一個(gè)運(yùn)行態(tài)的容器終止,然后再重新啟動(dòng)它

進(jìn)入容器

docker attach 或者 docker exec(推薦使用)

exit或Ctrl+d來退出終端

attach命令

docker attach ubuntu:18.04

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

exec命令(后可跟-i t)

只用-i參數(shù)時(shí),由于沒有分配偽終端,界面沒有我們熟悉的Linux運(yùn)算符,但命令執(zhí)行結(jié)果仍可以返回

當(dāng)-i -t 一起使用的時(shí)候 可看到Linux命令提示符號(hào)

從這個(gè)stdin中exit,不會(huì)導(dǎo)致容器的停止

導(dǎo)出容器

docker export

示例:docker export 7691a814370e > ubuntu.tar這樣將導(dǎo)出快照到本地文件

導(dǎo)入容器快照

docker import 從快照文件中再導(dǎo)入為鏡像

示例:

cat ubuntu.tar | docker import - test/ubuntu:v1.0

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

示例:

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容