docker基礎(chǔ)知識

Docker架構(gòu)

1、什么是docker

? 是一個平臺,是構(gòu)建、測試、部署和發(fā)布容器化應用的平臺。Docker 是一個開 源的應用容器引擎,讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的 容器中,然后發(fā)布到任何流行的linux機器或Windows 機器上,也可以實現(xiàn)虛擬 化,容器是完全使用沙箱機制,相互之間不會有任何接口

2、基本概念

  • 鏡像(Image):Docker 鏡像(Image),就相當于是一個 root 文件系統(tǒng)。Docker 鏡像是用于創(chuàng)建 Docker 容器的模板

  • 容器(Container):容器是獨立運行的一個或一組應用,是鏡像運行時的實體

  • 倉庫(Repository):倉庫可看著一個代碼控制中心,用來保存鏡像。

  • docker客戶端:Docker 客戶端通過命令行或者其他工具使用 Docker SDK 與 Docker 的守護進程通信

  • docker namespace:docker通過命名空間實現(xiàn)資源容器與容器,與宿主機間的隔離。

  • 網(wǎng)絡(luò):docker 提供四種不同的網(wǎng)絡(luò)模式,Host、Container、None 和 Bridge

    • 默認網(wǎng)絡(luò)設(shè)置Bridge.在這種模式下,除了分配隔離的網(wǎng)絡(luò)命名空間之外,Docker 還會為所有的容器設(shè)置 IP 地址。當 Docker 服務(wù)器在主機上啟動之后會創(chuàng)建新的虛擬網(wǎng)橋 docker0,隨后在該主機上啟動的全部服務(wù)在默認情況下都與該網(wǎng)橋相連。在默認情況下,每一個容器在創(chuàng)建時都會創(chuàng)建一對虛擬網(wǎng)卡,兩個虛擬網(wǎng)卡組成了數(shù)據(jù)的通道,其中一個會放在創(chuàng)建的容器中,會加入到名為 docker0 網(wǎng)橋中。查看brctl show


      image.png
  • 掛載點

3、docker工作原理

  • docker使軟件開發(fā)者無需擔心配置和依賴性,在任何地方打包,發(fā)送和運行他們的應用程序。

  • image.png
  • Cgroups(Control Groups): 實現(xiàn)資源限制

  • 工作原理簡單來說就是它的架構(gòu)形式,client -- dockerhost -- docker daemon - registry

4、docker架構(gòu)

  • Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式,使用遠程API來管理和創(chuàng)建Docker容器
  • Docker采用 C/S架構(gòu) Docker daemon 作為服務(wù)端接受來自客戶的請求,并處理這些請求(創(chuàng)建、運行、分發(fā)容器)。 客戶端和服務(wù)端既可以運行在一個機器上,也可通過 socket 或者RESTful API 來進行通信
  • docker daemon 一般在宿主主機后臺運行,等待接收來自客戶端的消息。 Docker 客戶端則為用戶提供一系列可執(zhí)行命令,用戶用這些命令實現(xiàn)跟 Docker daemon 交互。
  • image.png

docker與VMware對比

  • image.png
  • VM(VMware)在宿主機器、宿主機器操作系統(tǒng)的基礎(chǔ)上創(chuàng)建虛擬層、虛擬化的操作系統(tǒng)、虛擬化的倉庫,然后再安裝應用;

    Container(Docker容器),在宿主機器、宿主機器操作系統(tǒng)上創(chuàng)建Docker引擎,在引擎的基礎(chǔ)上再安裝應用。

    Docker在宿主機器的操作系統(tǒng)上創(chuàng)建Docker引擎,直接在宿主主機的操作系統(tǒng)上調(diào)用硬件資源,而不是虛擬化操作系統(tǒng)和硬件資源

docker常用命令

命令 描述 語法 常用選項
docker run 創(chuàng)建一個新的容器并運行一個命令 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -d: 后臺運行容器,并返回容器ID;
-i: 以交互模式運行容器,通常與 -t 同時使用,-t: 為容器重新分配一個偽輸入終端;
-P:隨機端口映射,容器內(nèi)部端口隨機映射到主機的高端口
-p: 指定端口映射,格式為:主機(宿主)端口:容器端口
--name="nginx-lb": 為容器指定一個名稱;
更多選項參考:https://www.runoob.com/docker/docker-run-command.html
docker start
/stop
/restart
啟動/停止/重啟一個容器 docker start/
stop/restart
[OPTIONS] CONTAINER [CONTAINER...]
docker kill 殺掉一個運行中的容器 docker kill [OPTIONS] CONTAINER [CONTAINER...] -s :向容器發(fā)送一個信號
docker rm 刪除一個或多個容器 docker rm [OPTIONS] CONTAINER [CONTAINER...] -f :通過 SIGKILL 信號強制刪除一個運行中的容器。
-v :刪除與容器關(guān)聯(lián)的卷
docker pause/uppause 暫停或恢復容器中所有的進程
docker create 創(chuàng)建一個新的容器但不啟動它 docker create [OPTIONS] IMAGE [COMMAND] [ARG...] 用法同docker run
docker exec 在運行的容器中執(zhí)行命令 docker exec [OPTIONS] CONTAINER COMMAND [ARG...] -i :即使沒有附加也保持STDIN 打開
-t :分配一個偽終端
eg :docker exec -i -t mynginx /bin/bash
docker ps 列出容器 docker ps [OPTIONS] -a :顯示所有的容器,包括未運行的。
-q :靜默模式,只顯示容器編號。
-n :列出最近創(chuàng)建的n個容器。
-l :顯示最近創(chuàng)建的容器。
docker inspect 獲取容器/鏡像的元數(shù)據(jù)。 docker inspect [OPTIONS] NAME|ID [NAME|ID...]
docker top 查看容器中運行的進程信息,支持 ps 命令參數(shù) docker top [OPTIONS] CONTAINER [ps OPTIONS]
docker attach 連接到正在運行中的容器 docker attach [OPTIONS] CONTAINER
docker events 從服務(wù)器獲取實時事件 docker events [OPTIONS]
docekr logs 獲取容器的日志 docker logs [OPTIONS] CONTAINER -f : 跟蹤日志輸出
--since :顯示某個開始時間的所有日志
-t : 顯示時間戳
--tail :僅列出最新N條容器日志
eg: docker logs --since="2016-07-01" --tail=10 mynginx
docker export 將文件系統(tǒng)作為一個tar歸檔文件導出到STDOUT docker export [OPTIONS] CONTAINER -o :將輸入內(nèi)容寫到文件
docker port 列出指定的容器的端口映射,或者查找將PRIVATE_PORT NAT到面向公眾的端口 docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
docker commit 從容器創(chuàng)建一個新的鏡像 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker cp 用于容器與主機之間的數(shù)據(jù)拷貝 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
-L :保持源目標中的鏈接
docker diff 檢查容器里文件結(jié)構(gòu)的更改
docker login/logout 登陸到一個Docker鏡像倉庫
docker pull/push/search
docker images 列出本地鏡像 docker images [OPTIONS] [REPOSITORY[:TAG]] -a :列出本地所有的鏡像
-f :顯示滿足條件的鏡像
-q :只顯示鏡像ID。
docker rmi 刪除本地一個或多少鏡像 docker rmi [OPTIONS] IMAGE [IMAGE...] -f :強制刪除;
docker tag 標記本地鏡像,將其歸入某一倉庫 ocker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
docker build 命令用于使用 Dockerfile 創(chuàng)建鏡像 docker build [OPTIONS] PATH | URL | - -f :指定要使用的Dockerfile路徑
--tag, -t: 鏡像的名字及標簽
其他限制選項參考:https://www.runoob.com/docker/docker-build-command.html
docker history 查看指定鏡像的創(chuàng)建歷史
docker save 將指定鏡像保存成 tar 歸檔文件
docker load 導入使用docker save 命令導出的鏡像 docker load [OPTIONS] -i : 指定導入的文件
docker import 從歸檔文件中創(chuàng)建鏡像 docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] -c :應用docker 指令創(chuàng)建鏡像;
-m :提交時的說明文字;
docker info 顯示 Docker 系統(tǒng)信息,包括鏡像和容器數(shù)
docker version 顯示 Docker 版本信息

Dockerfile

1、什么是dockerfile

  • Dockerfile是一個包含用于組合映像的命令的文本文檔。可以使用在命令行中調(diào)用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。
  • Dockerfile 一般分為四部分:基礎(chǔ)鏡像信息、維護者信息、鏡像操作指令和容器啟動時執(zhí)行指令,’#’ 為 Dockerfile 中的注釋。

2、Dockerfile 常用語法

語法 描述
FROM <IMAGE> 鏡像制作的基鏡像,必須為第一個命令
MAINTAINER 維護者信息
RUN <SHELL COMMAND> 用于在鏡像容器中執(zhí)行命令
ADD <src> <dest> 將本地文件添加到容器中,tar類型文件會自動壓,可訪問網(wǎng)絡(luò)文件,不能用于多階段構(gòu)建中
COPY <src> <dest> 將本地文件添加到容器中,但不會自動解壓文件,也不能訪問網(wǎng)絡(luò)文件,能用于多階段構(gòu)建中mutli-stage
CMD ["","",...] 容器運行時運行的命令
ENV<key>=<value> ... 給容器設(shè)置環(huán)境變量
EXPOSE <PORT> 指定于外界交互的端口
VOLUME <Directory> 用于指定持久化目錄
user <USER>:<GROUP> 指定運行容器時的用戶,組

docker-compos

1、docker-compos是什么

docker compose 是 docker 提供的一個命令行工具,用來定義和運行由多個容器組成的應用,我們可以通過 YAML 文件聲明式的定義應用程序的各個服務(wù),并由單個命令完成應用的創(chuàng)建和啟動。

#linux安裝docker-compos
* curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s`-`uname -m` -o  /usr/local/bin/docker-compose
* chmod +x /usr/local/bin/docker-compose

2、docker-compose與k8s, swarm容器編排工具

swarm
  swarm 是Docker公司自行研發(fā)的一款用來管理多主機上的Docker容器的工具,可以負責啟動容器,監(jiān)控容器狀態(tài),也   提供服務(wù)之間的負載均衡。
  特點: 更快速的運行速度  快速簡單的配置 容器間低耦合  版本控制與組件重用
  缺點: 跨平臺支持效果差  不提供存儲選項 監(jiān)控信息不足
  
#kubernetes
  kubernetes Google 開元容器編排引擎,支持自動化部署,大規(guī)模可伸縮,應用容器化管理,能做到零停機的情況下進行更新。
  優(yōu)點:運行速度快  遵循不可變基礎(chǔ)架構(gòu)的原則(利于回滾)  提供聲明式配置 大規(guī)模部署和更新軟件 處理應用程序的可用性   提供存儲卷管理
  缺點: 進程初始化時間較長 遷移到無狀態(tài)需要很多工作 
  
#docker-compose
  基于Docker的單主機容器編排工具。

3、docker-compose語法

(1)語法格式: yaml 文件

? 使用compose 3個步驟

  • 使用Dockerfile 定義應用程序環(huán)境,以便在任何地方重現(xiàn)該環(huán)境
  • 在docker-compose.yml文件中定義組成應用程序的服務(wù),以便各個服務(wù)在一個隔離環(huán)境中一起運行
  • 運行docker-compose up命令,啟動運行整個應用程序。

(2)docker-compose.yml結(jié)構(gòu):services、networks、volumes

  • services主要用來定義各個容器

    version: '3'
    services:         #services模塊
      euraka:         #指明服務(wù)名稱
        build: .      #指明Dockerfile所在路徑
        ports:            #指明映射的端口
         - "8761:8761"
    

    services模塊下其他命令,與build同級

    • command:覆蓋容器啟動后默認執(zhí)行的命令(Dockerfile定義的CMD)。
    • dns
    • dns_search
    • environment:環(huán)境變量設(shè)置,可使用屬組或字典兩種方式。定義的變量會覆蓋.env文件中定義的重名環(huán)境變量
    • entrypoint:可以覆蓋Dockerfile中定義的entrypoint命令
    • env_file:從文件中獲取環(huán)境變量,可指定一個文件或多個文件路徑列表。
    • expose:暴露端口,只將端口暴露給連接的服務(wù)器。而不是暴露給宿主機
    • external_links:連接到docker-compose.yml外部的容器
    • iamges:指定運行容器使用的鏡像
    • links:連接到其他服務(wù)的容器 SERVICES:ALIAS
  • networks定義需要使用到的network ,與services平級

    • 默認情況下,compose為應用創(chuàng)建一個網(wǎng)絡(luò),服務(wù)的每個容器都會加入該網(wǎng)絡(luò)中。這樣,容器就可被該網(wǎng)絡(luò)中的其他容器訪問,該容器還能以服務(wù)名稱作為hostname被其他容器訪問。
    • networks模塊自定義網(wǎng)絡(luò)
    • 詳細可參考《spring cloud 與docker》一書 p286-p289
  • volumes定義services使用到的volume,與services平級

    volumes:卷掛載路徑設(shè)置(HOST:CONTAINER 或HOST:CONTAINER:ro)

docker 與微服務(wù) --待學習整理

1、什么叫微服務(wù)

...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

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

  • Docker的優(yōu)勢 可以將Docker的產(chǎn)生理解為一種相比虛擬機更加輕量級的虛擬化技術(shù),前有Openstack用來...
    天劍飛心閱讀 739評論 0 0
  • 一、Docker 簡介 Docker 兩個主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,403評論 0 27
  • 容器生命周期管理 run start/stop/restart rm pause/unpause create e...
    Al1i9at0r閱讀 367評論 0 2
  • 業(yè)委會作為小區(qū)業(yè)主自治的重要主體,其職責履行情況直接關(guān)系到小區(qū)環(huán)境的好壞…… 一、業(yè)委會的職責 1)召集業(yè)主大會會...
    點滴共鳴閱讀 4,078評論 0 1
  • 繼泰國13名少年被困洞穴幸運被營救后,美國一名23歲女子也成為奇跡生還的幸運者,這名女子駕車摔下60米高的懸崖,在...
    小右3020閱讀 139評論 0 0