docker基礎知識

Docker架構

1、什么是docker

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

2、基本概念

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

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

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

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

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

  • 網絡:docker 提供四種不同的網絡模式,Host、Container、None 和 Bridge

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


      image.png
  • 掛載點

3、docker工作原理

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

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

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

4、docker架構

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

docker與VMware對比

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

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

    Docker在宿主機器的操作系統上創建Docker引擎,直接在宿主主機的操作系統上調用硬件資源,而不是虛擬化操作系統和硬件資源

docker常用命令

命令 描述 語法 常用選項
docker run 創建一個新的容器并運行一個命令 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -d: 后臺運行容器,并返回容器ID;
-i: 以交互模式運行容器,通常與 -t 同時使用,-t: 為容器重新分配一個偽輸入終端;
-P:隨機端口映射,容器內部端口隨機映射到主機的高端口
-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 :向容器發送一個信號
docker rm 刪除一個或多個容器 docker rm [OPTIONS] CONTAINER [CONTAINER...] -f :通過 SIGKILL 信號強制刪除一個運行中的容器。
-v :刪除與容器關聯的卷
docker pause/uppause 暫停或恢復容器中所有的進程
docker create 創建一個新的容器但不啟動它 docker create [OPTIONS] IMAGE [COMMAND] [ARG...] 用法同docker run
docker exec 在運行的容器中執行命令 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 :列出最近創建的n個容器。
-l :顯示最近創建的容器。
docker inspect 獲取容器/鏡像的元數據。 docker inspect [OPTIONS] NAME|ID [NAME|ID...]
docker top 查看容器中運行的進程信息,支持 ps 命令參數 docker top [OPTIONS] CONTAINER [ps OPTIONS]
docker attach 連接到正在運行中的容器 docker attach [OPTIONS] CONTAINER
docker events 從服務器獲取實時事件 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 將文件系統作為一個tar歸檔文件導出到STDOUT docker export [OPTIONS] CONTAINER -o :將輸入內容寫到文件
docker port 列出指定的容器的端口映射,或者查找將PRIVATE_PORT NAT到面向公眾的端口 docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
docker commit 從容器創建一個新的鏡像 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker cp 用于容器與主機之間的數據拷貝 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
-L :保持源目標中的鏈接
docker diff 檢查容器里文件結構的更改
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 創建鏡像 docker build [OPTIONS] PATH | URL | - -f :指定要使用的Dockerfile路徑
--tag, -t: 鏡像的名字及標簽
其他限制選項參考:https://www.runoob.com/docker/docker-build-command.html
docker history 查看指定鏡像的創建歷史
docker save 將指定鏡像保存成 tar 歸檔文件
docker load 導入使用docker save 命令導出的鏡像 docker load [OPTIONS] -i : 指定導入的文件
docker import 從歸檔文件中創建鏡像 docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] -c :應用docker 指令創建鏡像;
-m :提交時的說明文字;
docker info 顯示 Docker 系統信息,包括鏡像和容器數
docker version 顯示 Docker 版本信息

Dockerfile

1、什么是dockerfile

  • Dockerfile是一個包含用于組合映像的命令的文本文檔??梢允褂迷诿钚兄姓{用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。
  • Dockerfile 一般分為四部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令,’#’ 為 Dockerfile 中的注釋。

2、Dockerfile 常用語法

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

docker-compos

1、docker-compos是什么

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

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

3、docker-compose語法

(1)語法格式: yaml 文件

? 使用compose 3個步驟

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

(2)docker-compose.yml結構:services、networks、volumes

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

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

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

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

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

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

docker 與微服務 --待學習整理

1、什么叫微服務

...

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

推薦閱讀更多精彩內容

  • Docker的優勢 可以將Docker的產生理解為一種相比虛擬機更加輕量級的虛擬化技術,前有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
  • 業委會作為小區業主自治的重要主體,其職責履行情況直接關系到小區環境的好壞…… 一、業委會的職責 1)召集業主大會會...
    點滴共鳴閱讀 4,076評論 0 1
  • 繼泰國13名少年被困洞穴幸運被營救后,美國一名23歲女子也成為奇跡生還的幸運者,這名女子駕車摔下60米高的懸崖,在...
    小右3020閱讀 139評論 0 0