Docker架構(gòu)
1、什么是docker
? 是一個平臺辐啄,是構(gòu)建采章、測試、部署和發(fā)布容器化應(yīng)用的平臺壶辜。Docker 是一個開 源的應(yīng)用容器引擎悯舟,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的 容器中,然后發(fā)布到任何流行的linux機器或Windows 機器上,也可以實現(xiàn)虛擬 化,容器是完全使用沙箱機制,相互之間不會有任何接口
2、基本概念
鏡像(Image):Docker 鏡像(Image)砸民,就相當(dāng)于是一個 root 文件系統(tǒng)抵怎。Docker 鏡像是用于創(chuàng)建 Docker 容器的模板
容器(Container):容器是獨立運行的一個或一組應(yīng)用,是鏡像運行時的實體
倉庫(Repository):倉庫可看著一個代碼控制中心岭参,用來保存鏡像反惕。
docker客戶端:Docker 客戶端通過命令行或者其他工具使用 Docker SDK 與 Docker 的守護(hù)進(jìn)程通信
docker namespace:docker通過命名空間實現(xiàn)資源容器與容器,與宿主機間的隔離演侯。
-
網(wǎng)絡(luò):docker 提供四種不同的網(wǎng)絡(luò)模式姿染,Host、Container秒际、None 和 Bridge
-
默認(rèn)網(wǎng)絡(luò)設(shè)置Bridge.在這種模式下悬赏,除了分配隔離的網(wǎng)絡(luò)命名空間之外狡汉,Docker 還會為所有的容器設(shè)置 IP 地址。當(dāng) Docker 服務(wù)器在主機上啟動之后會創(chuàng)建新的虛擬網(wǎng)橋 docker0闽颇,隨后在該主機上啟動的全部服務(wù)在默認(rèn)情況下都與該網(wǎng)橋相連盾戴。在默認(rèn)情況下,每一個容器在創(chuàng)建時都會創(chuàng)建一對虛擬網(wǎng)卡进萄,兩個虛擬網(wǎng)卡組成了數(shù)據(jù)的通道捻脖,其中一個會放在創(chuàng)建的容器中,會加入到名為 docker0 網(wǎng)橋中中鼠。查看brctl show
-
- 掛載點
3可婶、docker工作原理
docker使軟件開發(fā)者無需擔(dān)心配置和依賴性,在任何地方打包援雇,發(fā)送和運行他們的應(yīng)用程序矛渴。
Cgroups(Control Groups): 實現(xiàn)資源限制
工作原理簡單來說就是它的架構(gòu)形式,client -- dockerhost -- docker daemon - registry
4惫搏、docker架構(gòu)
- Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式具温,使用遠(yuǎn)程API來管理和創(chuàng)建Docker容器
- Docker采用 C/S架構(gòu) Docker daemon 作為服務(wù)端接受來自客戶的請求,并處理這些請求(創(chuàng)建筐赔、運行铣猩、分發(fā)容器)。 客戶端和服務(wù)端既可以運行在一個機器上茴丰,也可通過 socket 或者RESTful API 來進(jìn)行通信
- docker daemon 一般在宿主主機后臺運行达皿,等待接收來自客戶端的消息。 Docker 客戶端則為用戶提供一系列可執(zhí)行命令贿肩,用戶用這些命令實現(xiàn)跟 Docker daemon 交互峦椰。
docker與VMware對比
-
VM(VMware)在宿主機器、宿主機器操作系統(tǒng)的基礎(chǔ)上創(chuàng)建虛擬層汰规、虛擬化的操作系統(tǒng)汤功、虛擬化的倉庫,然后再安裝應(yīng)用溜哮;
Container(Docker容器)滔金,在宿主機器、宿主機器操作系統(tǒng)上創(chuàng)建Docker引擎茬射,在引擎的基礎(chǔ)上再安裝應(yīng)用鹦蠕。
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 | 暫驮胍粒或恢復(fù)容器中所有的進(jìn)程 | ||
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 | 查看容器中運行的進(jìn)程信息,支持 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歸檔文件導(dǎo)出到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 :保持源目標(biāo)中的鏈接 |
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 | 標(biāo)記本地鏡像嫩痰,將其歸入某一倉庫 | ocker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] | |
docker build | 命令用于使用 Dockerfile 創(chuàng)建鏡像 | docker build [OPTIONS] PATH | URL | - |
-f :指定要使用的Dockerfile路徑 --tag, -t: 鏡像的名字及標(biāo)簽 其他限制選項參考:https://www.runoob.com/docker/docker-build-command.html |
docker history | 查看指定鏡像的創(chuàng)建歷史 | ||
docker save | 將指定鏡像保存成 tar 歸檔文件 | ||
docker load | 導(dǎo)入使用docker save 命令導(dǎo)出的鏡像 | docker load [OPTIONS] | -i : 指定導(dǎo)入的文件 |
docker import | 從歸檔文件中創(chuàng)建鏡像 | docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] |
-c :應(yīng)用docker 指令創(chuàng)建鏡像剿吻; -m :提交時的說明文字; |
docker info | 顯示 Docker 系統(tǒng)信息串纺,包括鏡像和容器數(shù) | ||
docker version | 顯示 Docker 版本信息 |
Dockerfile
1和橙、什么是dockerfile
- Dockerfile是一個包含用于組合映像的命令的文本文檔≡於猓可以使用在命令行中調(diào)用任何命令。 Docker通過讀取
Dockerfile
中的指令自動生成映像晰搀。 - Dockerfile 一般分為四部分:基礎(chǔ)鏡像信息五辽、維護(hù)者信息、鏡像操作指令和容器啟動時執(zhí)行指令外恕,’#’ 為 Dockerfile 中的注釋杆逗。
2、Dockerfile 常用語法
語法 | 描述 |
---|---|
FROM <IMAGE> | 鏡像制作的基鏡像鳞疲,必須為第一個命令 |
MAINTAINER | 維護(hù)者信息 |
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 提供的一個命令行工具,用來定義和運行由多個容器組成的應(yīng)用睛挚,我們可以通過 YAML 文件聲明式的定義應(yīng)用程序的各個服務(wù)邪蛔,并由單個命令完成應(yīng)用的創(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容器的工具侧到,可以負(fù)責(zé)啟動容器,監(jiān)控容器狀態(tài)淤击,也 提供服務(wù)之間的負(fù)載均衡匠抗。
特點: 更快速的運行速度 快速簡單的配置 容器間低耦合 版本控制與組件重用
缺點: 跨平臺支持效果差 不提供存儲選項 監(jiān)控信息不足
#kubernetes
kubernetes Google 開元容器編排引擎,支持自動化部署遭贸,大規(guī)母昕龋可伸縮,應(yīng)用容器化管理壕吹,能做到零停機的情況下進(jìn)行更新著蛙。
優(yōu)點:運行速度快 遵循不可變基礎(chǔ)架構(gòu)的原則(利于回滾) 提供聲明式配置 大規(guī)模部署和更新軟件 處理應(yīng)用程序的可用性 提供存儲卷管理
缺點: 進(jìn)程初始化時間較長 遷移到無狀態(tài)需要很多工作
#docker-compose
基于Docker的單主機容器編排工具。
3耳贬、docker-compose語法
(1)語法格式: yaml 文件
? 使用compose 3個步驟
- 使用Dockerfile 定義應(yīng)用程序環(huán)境踏堡,以便在任何地方重現(xiàn)該環(huán)境
- 在docker-compose.yml文件中定義組成應(yīng)用程序的服務(wù),以便各個服務(wù)在一個隔離環(huán)境中一起運行
- 運行docker-compose up命令咒劲,啟動運行整個應(yīng)用程序顷蟆。
(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:覆蓋容器啟動后默認(rèn)執(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平級
- 默認(rèn)情況下育叁,compose為應(yīng)用創(chuàng)建一個網(wǎng)絡(luò)迅脐,服務(wù)的每個容器都會加入該網(wǎng)絡(luò)中。這樣豪嗽,容器就可被該網(wǎng)絡(luò)中的其他容器訪問谴蔑,該容器還能以服務(wù)名稱作為hostname被其他容器訪問豌骏。
- networks模塊自定義網(wǎng)絡(luò)
- 詳細(xì)可參考《spring cloud 與docker》一書 p286-p289
-
volumes定義services使用到的volume树碱,與services平級
volumes:卷掛載路徑設(shè)置(HOST:CONTAINER 或HOST:CONTAINER:ro)
docker 與微服務(wù) --待學(xué)習(xí)整理
1肯适、什么叫微服務(wù)
...