Docker基礎(chǔ)知識(shí)梳理

原文:Docker基礎(chǔ)知識(shí)梳理 - 9ong


架構(gòu)

http://study.p2hp.com/wp-content/uploads/2016/04/576507-docker1.png

概念

  • Docker 是一個(gè)開源的應(yīng)用容器引擎

  • docker客戶端

    docker客戶端是用戶與docker服務(wù)交互的窗口温艇,也就是我們通常操作各種docker命令的終端捍歪。

  • docker服務(wù)

    docker daemon的守護(hù)進(jìn)程

    docker deamon監(jiān)聽著客戶端的請(qǐng)求,并且管理著docker的鏡像、容器炼吴、網(wǎng)絡(luò)味滞、磁盤(圖中只列出了鏡像與容器)等對(duì)象

  • 倉庫

    類似于代碼倉庫github,但這個(gè)是docker鏡像的倉庫

  • 鏡像

    docker鏡像是一個(gè)只讀模板疙挺,可以用來創(chuàng)建docker容器扛邑。鏡像是一種輕量級(jí)的、可執(zhí)行的獨(dú)立軟件包衔统,用來打包軟件運(yùn)行環(huán)境和基于運(yùn)行環(huán)境開發(fā)的軟件鹿榜。

    鏡像是一層套一層。

  • 容器

    鏡像的一份運(yùn)行實(shí)例

  • 容器數(shù)據(jù)卷

    容器內(nèi)的數(shù)據(jù)需要持久化到宿主機(jī)上是很有必要的锦爵,這就需要用到數(shù)據(jù)卷

    容器數(shù)據(jù)卷的設(shè)計(jì)目的就是做數(shù)據(jù)的持久化和容器間的數(shù)據(jù)共享舱殿,數(shù)據(jù)卷完全獨(dú)立于容器的生命周期,也就是說就算容器關(guān)閉或者刪除险掀,數(shù)據(jù)也不會(huì)丟失沪袭。簡(jiǎn)單點(diǎn)說就將宿主機(jī)的目錄掛在到容器,應(yīng)用在容器內(nèi)的數(shù)據(jù)可以同步到宿主機(jī)磁盤上樟氢,這樣容器內(nèi)產(chǎn)生的數(shù)據(jù)就可以持久化了冈绊。關(guān)于容器卷的命令我們后面會(huì)有操作實(shí)例!

安裝

Docker安裝(Ubuntu) - 9ong

常用命令

本地鏡像命令

  • docker images

    查看本地主機(jī)上所有的鏡像埠啃。

    還可以通過docker images nginx指定某個(gè)具體的鏡像查看對(duì)應(yīng)信息死宣。

    注意:鏡像名是會(huì)重復(fù)的,只有image id才是唯一的標(biāo)識(shí)碴开。

  • docker rmi

    刪除本地的鏡像

  • docker tag

    標(biāo)記本地鏡像毅该,將其歸入某一倉庫。

    docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
    
    docker tag ubuntu:15.10 runoob/ubuntu:v3
    
  • docker history

    docker history runoob/ubuntu:v3
    
  • docker build

    命令用于使用 Dockerfile 創(chuàng)建鏡像潦牛。

    docker build [OPTIONS] PATH | URL | -
    

    options詳見:Docker build 命令 | 高手教程

  • docker save

    將指定鏡像保存成 tar 歸檔文件眶掌。

    docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
    
  • docker import

    從歸檔文件中創(chuàng)建鏡像。

    docker import  my_ubuntu_v3.tar runoob/ubuntu:v4 
    

鏡像倉庫

  • docker login

    登陸到Docker Hub

    docker login -u 用戶名 -p 密碼
    

    登出Docker Hub

    docker logout
    
  • docker search

    根據(jù)鏡像名稱搜索遠(yuǎn)程倉庫中的鏡像

  • docker pull

    搜索到某個(gè)鏡像之后就可以從遠(yuǎn)程拉取鏡像啦巴碗,類似git中的pull命令朴爬,對(duì)應(yīng)的還有個(gè)docker push的命令。

  • docker push

    將本地的鏡像上傳到鏡像倉庫橡淆,要先登陸到鏡像倉庫召噩。

    docker push myapache:v1
    

容器生命周期命令

  • docker run

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 可以基于某個(gè)鏡像運(yùn)行一個(gè)容器母赵,如果本地有指定的鏡像則使用本地鏡像,如果沒有則從遠(yuǎn)程拉取對(duì)應(yīng)的鏡像然后啟動(dòng)蚣常。

使用鏡像 nginx:latest市咽,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的 80 端口映射到主機(jī)的 80 端口,主機(jī)的目錄 /data 映射到容器的 /data。
```
docker run -p 80:80 -v /data:/data -d nginx:latest
```

使用鏡像nginx:latest以交互模式啟動(dòng)一個(gè)容器,在容器內(nèi)執(zhí)行/bin/bash命令抵蚊。
```
docker run -it nginx:latest /bin/bash
```

```
-d:啟動(dòng)容器施绎,并且后臺(tái)運(yùn)行(docker容器后臺(tái)運(yùn)行,就必須要有一個(gè)前臺(tái)進(jìn)程贞绳,容器運(yùn)行的命令如果不是一直掛起的命令谷醉,容器啟動(dòng)后就會(huì)自動(dòng)退出);啟動(dòng)后沒有進(jìn)入到容器內(nèi)部冈闭,還是在宿主機(jī)俱尼。
-i:以交互模式運(yùn)行容器,通常與-t同時(shí)使用萎攒;
-t:為容器重新分配一個(gè)偽輸入終端遇八,通常與-i同時(shí)使用(容器啟動(dòng)后進(jìn)入到容器內(nèi)部的命令窗口);
-P:隨機(jī)端口映射耍休,容器內(nèi)部端口隨機(jī)映射到主機(jī)的高端口刃永;
-p:指定端口映射,格式為:主機(jī)(宿主)端口:容器端口羊精;
-v:建立宿主機(jī)與容器目錄的同步斯够;注意的是這里的同步是雙向的。
--name="myTomcat": 為容器指定一個(gè)名稱(如果不指定喧锦,則有個(gè)隨機(jī)的名字)读规;

```

更多options詳見[Docker run 命令 | 高手教程](http://study.p2hp.com/docker/docker-run-command.html)
  • docker create

    創(chuàng)建一個(gè)新的容器但不啟動(dòng)它

  • 退出容器

    進(jìn)入到容器后可以通過exit命令退出容器,也可以通過ctrl+P+Q快捷鍵退出容器燃少,這兩種方式的不同之處是exit會(huì)退出并且關(guān)閉容器束亏,而ctrl+P+Q快捷鍵只是單純的退出,容器還在運(yùn)行阵具,并且還能再次進(jìn)入碍遍。

  • docker start

    啟動(dòng)一個(gè)或多個(gè)已經(jīng)被停止的容器

  • docker stop

    停止一個(gè)運(yùn)行中的容器

  • docker restart

    重啟容器

  • docker pause

    暫停容器中所有的進(jìn)程。

  • docker unpause

    恢復(fù)容器中所有的進(jìn)程怔昨。

  • docker exec

    在運(yùn)行的容器中執(zhí)行命令

    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    

    OPTIONS說明:

    -d :分離模式: 在后臺(tái)運(yùn)行

    -i :即使沒有附加也保持STDIN 打開

    -t :分配一個(gè)偽終端

    在容器mynginx中以交互模式執(zhí)行容器內(nèi)/root/runoob.sh腳本

    runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
    

    在容器mynginx中開啟一個(gè)交互模式的終端

    runoob@runoob:~$ docker exec -i -t  mynginx /bin/bash
    root@b1a0703e41e7:/#
    
  • docker rm

    刪除一個(gè)或多少容器

  • docker kill

    殺掉一個(gè)運(yùn)行中的容器

容器操作

  • docker ps

    列出容器雀久,沒有加options宿稀,默認(rèn)展示正在運(yùn)行的容器趁舀。

    options:

    -a :顯示所有的容器,包括未運(yùn)行的祝沸。
    
    -f :根據(jù)條件過濾顯示的內(nèi)容矮烹。
    
    --format :指定返回值的模板文件越庇。
    
    -l :顯示最近創(chuàng)建的容器。
    
    -n :列出最近創(chuàng)建的n個(gè)容器奉狈。
    
    --no-trunc :不截?cái)噍敵觥?
    -q :靜默模式卤唉,只顯示容器編號(hào)。
    
    -s :顯示總的文件大小仁期。
    
    
  • docker top

    查看容器中運(yùn)行的進(jìn)程信息桑驱,支持 ps 命令參數(shù)

  • docker attach

    連接到正在運(yùn)行中的容器。attach是可以帶上--sig-proxy=false來確保CTRL-D或CTRL-C不會(huì)關(guān)閉容器跛蛋。

  • docker inspect

    獲取容器/鏡像的元數(shù)據(jù)熬的,關(guān)于容器/鏡像配置信息。

  • docker events

    從服務(wù)器獲取實(shí)時(shí)事件

    顯示docker 2019年11月2日后的所有事件:

    docker events  --since="1572624000"
    
  • docker logs

    獲取容器的日志

    -f : 跟蹤日志輸出
    
    --since :顯示某個(gè)開始時(shí)間的所有日志
    
    -t : 顯示時(shí)間戳
    
    --tail :僅列出最新N條容器日志
    
    
```
sudo docker logs -f jm-php7-2-php-fpm
```
  • docker port

    列出指定的容器的端口映射赊级,或者查找將PRIVATE_PORT NAT到面向公眾的端口押框。

容器其他命令

  • docker commit :從容器創(chuàng)建一個(gè)新的鏡像。

    -a :提交的鏡像作者理逊;
    
    -c :使用Dockerfile指令來創(chuàng)建鏡像橡伞;
    
    -m :提交時(shí)的說明文字;
    
    -p :在commit時(shí)晋被,將容器暫停兑徘。
    
    

    將容器 jm-php-7-2-php-fpm 保存為新的鏡像 php72web并打上tag為v1,添加提交人信息和說明信息墨微。

    docker commit -a "tsingchan" -m "new php7.2 webserver" jm-php-7-2-php-fpm  php72web:v1
    
  • docker cp

    用于容器與主機(jī)之間的數(shù)據(jù)拷貝道媚。

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

    options:

    -L :保持源目標(biāo)中的鏈接
    
    

    注意:docker cp支持直接復(fù)制目錄;

    注意:docker cp支持重命名翘县;

    將主機(jī)/www/runoob目錄拷貝到容器jm-php-7-2-php-fpm的/www目錄下最域。
    
    docker cp /www/runoob jm-php-7-2-php-fpm:/www/
    將主機(jī)/www/runoob目錄拷貝到容器jm-php-7-2-php-fpm中,目錄重命名為www锈麸。
    
    docker cp /www/runoob jm-php-7-2-php-fpm:/www
    將容器jm-php-7-2-php-fpm的/www目錄拷貝到主機(jī)的/tmp目錄中镀脂。
    
    docker cp jm-php-7-2-php-fpm:/www /tmp/
    
  • docker diff

    檢查容器里文件結(jié)構(gòu)的更改

    sudo docker diff jm-php7-2-php-fpm
    
    C /run
    A /run/php-fpm.pid
    C /etc
    C /etc/php
    C /etc/php/7.2
    C /etc/php/7.2/fpm
    C /etc/php/7.2/fpm/conf.d
    A /etc/php/7.2/fpm/conf.d/99-overrides.ini
    
    

其他命令

  • docker info : 顯示 Docker 系統(tǒng)信息,包括鏡像和容器數(shù)忘伞。
  • docker version :顯示 Docker 版本信息

Dockerfile

我們可以從遠(yuǎn)程pull一個(gè)鏡像薄翅,那遠(yuǎn)程的鏡像是怎么來的呢?

如果我們想自己創(chuàng)建一個(gè)鏡像又該怎么做呢氓奈?

這就涉及到Dockerfile了翘魄,Dockerfile是一個(gè)包含用戶能夠構(gòu)建鏡像的所有命令的文本文檔,它有自己的語法以及命令舀奶,docker能夠從dockerfile中讀取指令自動(dòng)的構(gòu)建鏡像暑竟。

我們要想編寫自己的Dockerfiler并構(gòu)建鏡像,那對(duì)Dockerfile的語法和命令的了解就是必須的育勺。

Dockerfile 是一個(gè)用來構(gòu)建鏡像的文本文件但荤,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說明罗岖。

注意:Dockerfile 的指令每執(zhí)行一次都會(huì)在 docker 上新建一層。所以過多無意義的層腹躁,會(huì)造成鏡像膨脹過大

更多關(guān)于dockerfile指令詳解:Dockerfile基礎(chǔ)知識(shí)梳理-9ong

docker-compose

Docker-compose基礎(chǔ)知識(shí)梳理-9ong

Docker Machine

Docker Machine 是一種可以讓您在虛擬主機(jī)上安裝 Docker 的工具桑包,并可以使用 docker-machine 命令來管理主機(jī)。

Docker Machine 也可以集中管理所有的 docker 主機(jī)纺非,比如快速的給 100 臺(tái)服務(wù)器安裝上 docker哑了。

Swarm

Docker Swarm 是 Docker 的集群管理工具。它將 Docker 主機(jī)池轉(zhuǎn)變?yōu)閱蝹€(gè)虛擬 Docker 主機(jī)烧颖。 Docker Swarm 提供了標(biāo)準(zhǔn)的 Docker API垒手,所有任何已經(jīng)與 Docker 守護(hù)程序通信的工具都可以使用 Swarm 輕松地?cái)U(kuò)展到多個(gè)主機(jī)。

原文:Docker基礎(chǔ)知識(shí)梳理 - 9ong

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末倒信,一起剝皮案震驚了整個(gè)濱河市科贬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鳖悠,老刑警劉巖榜掌,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異乘综,居然都是意外死亡憎账,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門卡辰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胞皱,“玉大人,你說我怎么就攤上這事九妈》雌觯” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵萌朱,是天一觀的道長(zhǎng)宴树。 經(jīng)常有香客問我,道長(zhǎng)晶疼,這世上最難降的妖魔是什么酒贬? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮翠霍,結(jié)果婚禮上锭吨,老公的妹妹穿的比我還像新娘。我一直安慰自己寒匙,他們只是感情好零如,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般埠况。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棵癣,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天辕翰,我揣著相機(jī)與錄音,去河邊找鬼狈谊。 笑死喜命,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的河劝。 我是一名探鬼主播壁榕,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼赎瞎!你這毒婦竟也來了牌里?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤务甥,失蹤者是張志新(化名)和其女友劉穎牡辽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敞临,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡态辛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挺尿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奏黑。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖编矾,靈堂內(nèi)的尸體忽然破棺而出熟史,到底是詐尸還是另有隱情,我是刑警寧澤窄俏,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布以故,位于F島的核電站,受9級(jí)特大地震影響裆操,放射性物質(zhì)發(fā)生泄漏怒详。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一踪区、第九天 我趴在偏房一處隱蔽的房頂上張望昆烁。 院中可真熱鬧,春花似錦缎岗、人聲如沸静尼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鼠渺。三九已至鸭巴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拦盹,已是汗流浹背鹃祖。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留普舆,地道東北人恬口。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沼侣,于是被迫代替她去往敵國和親祖能。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容