Docker基礎(chǔ)

一、軟件部署的發(fā)展

1.1 直接部署

在物理服務(wù)器上直接安裝系統(tǒng),部署應(yīng)用
缺點(diǎn)

  • 部署慢
  • 成本高
  • 資源浪費(fèi)
  • 可移植性、擴(kuò)展性差

1.2 虛擬機(jī)部署

在主機(jī)上部署虛擬機(jī),在虛擬機(jī)中部署應(yīng)用或颊。


image.png

虛擬機(jī)架構(gòu)(從下到上)

  • 服務(wù)器:可以是PC、服務(wù)器、云主機(jī)
  • 主操作系統(tǒng):例如windows、linux痘昌、macos
  • 虛擬機(jī)管理系統(tǒng):允許多個(gè)操作系統(tǒng)和應(yīng)用共享一套基礎(chǔ)物理硬件
  • 從操作系統(tǒng):虛擬機(jī)
  • 各種依賴:每個(gè)從操作系統(tǒng)都需要按照許多依賴
  • 應(yīng)用

優(yōu)點(diǎn)

  • 資源池:一個(gè)物理機(jī)可運(yùn)行多個(gè)虛擬機(jī)钥勋,資源也能充分分配
  • 易擴(kuò)展:方便添加物理主機(jī)或虛擬機(jī)

缺點(diǎn)

  • 資源占用多:虛擬機(jī)很耗費(fèi)資源炬转,因?yàn)樘摂M機(jī)有完整的操作系統(tǒng)
  • 冗余步驟多:虛擬機(jī)有完整的操作系統(tǒng)
  • 啟動(dòng)慢:?jiǎn)?dòng)操作系統(tǒng)要多久,啟動(dòng)虛擬機(jī)就要多久

1.3 容器化部署

什么是容器

  • 對(duì)應(yīng)用軟件和其依賴的包進(jìn)行標(biāo)準(zhǔn)化打包
  • 應(yīng)用之間相互隔離
  • 共享OSKernel
  • 可以運(yùn)行在多種主流OS上
  • 標(biāo)準(zhǔn)化軟件單元
容器 虛擬機(jī)
應(yīng)用程序?qū)拥某橄笏憔模瑢⒋a和依賴項(xiàng)一起打包 物理硬件的抽象
多個(gè)容器共享OS內(nèi)核 需要啟動(dòng)單獨(dú)的VMOS
僅有一個(gè)物理機(jī)的OS扼劈,共享資源 多個(gè)OS,獨(dú)享資源
可運(yùn)行數(shù)百個(gè)容器 最多幾十個(gè)VM
輕量 包含OS菲驴、二進(jìn)制文件荐吵,最少幾個(gè)GB
啟動(dòng)快(秒級(jí)) 啟動(dòng)慢
啟動(dòng)應(yīng)用程序更多,消耗資源更少
每個(gè)容器在用戶空間中進(jìn)程隔離

二、Docker

  • Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎
  • 可以將應(yīng)用和依賴包打包到一個(gè)輕量級(jí)先煎、可移植的容器中
  • 使用沙箱機(jī)制贼涩,容器相互間沒(méi)有接口
  • 容器性能開(kāi)銷低

2.1 使用Docker進(jìn)行部署

image.png
  • 服務(wù)器
  • 主操作系統(tǒng)
  • Docker引擎:Docker引擎替代了Hypervisor,是運(yùn)行在操作系統(tǒng)之上的后臺(tái)進(jìn)程薯蝎,負(fù)責(zé)運(yùn)行和管理容器
  • 各種依賴:Docker應(yīng)用的所有依賴都打包在Docker鏡像中
  • 應(yīng)用:應(yīng)用的源代碼與其依賴都打包在Docker鏡像中遥倦。不同應(yīng)用運(yùn)行在不同的容器中,互相隔離

2.2 Docker架構(gòu)

image.png

Docker使用C/S架構(gòu)占锯。用戶在客戶端輸入docker命令袒哥,客戶端將命令發(fā)送到docker daemon,完成docker的各種操作消略。

2.2.1 Docker Client

docker客戶端通過(guò)docker api或其他方式與docker daemon進(jìn)行通信堡称,進(jìn)而操作docker。

2.2.2 Docker Daemon

docker守護(hù)程序可以監(jiān)聽(tīng)docker客戶端的命令艺演,以及管理docker對(duì)象却紧,例如鏡像、容器钞艇、網(wǎng)絡(luò)等等啄寡。

2.2.3 Docker Registry

docker倉(cāng)庫(kù)存儲(chǔ)docker鏡像,docker hub是所有人都可訪問(wèn)的公共倉(cāng)庫(kù)哩照,用戶可從倉(cāng)庫(kù)中拉取鏡像或推送鏡像到倉(cāng)庫(kù)挺物。

2.2.4 Docker對(duì)象

鏡像
Docker鏡像是創(chuàng)建容器的模板,可通過(guò)Dockerfile創(chuàng)建鏡像飘弧。同一個(gè)軟件可有不同版本的鏡像识藤,用tag表示鏡像版本。

容器
容器是運(yùn)行中的鏡像次伶。容器可以被創(chuàng)建痴昧、啟動(dòng)、停止冠王、刪除赶撰、暫停等。用戶還可以使用docker compose來(lái)定義柱彻、運(yùn)行管理多個(gè)容器豪娜。

三、Docker的基本操作

3.1安裝Docker

# centos
yum install docker-ce-18.03.1.ce
# 啟動(dòng)docker
systemctl start docker
# 加入開(kāi)機(jī)啟動(dòng)
systemctl enable docker

3.2鏡像

鏡像常用操作命令:

操作 說(shuō)明
docker search 查詢鏡像
docker pull 從倉(cāng)庫(kù)獲取所需鏡像
docker images 顯示本地已有鏡像
docker save -o XXX.tar img_name 導(dǎo)出鏡像到本地文件
docker rmi img_name 刪除本地鏡像
docker builid 創(chuàng)建鏡像

創(chuàng)建鏡像

創(chuàng)建鏡像時(shí)需要用到dockerfile文件哟楷,該文件按照步驟列下了創(chuàng)建鏡像時(shí)的所有命令瘤载。例:

# syntax=docker/dockerfile:1
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
  • from指定使用的鏡像源
  • copy復(fù)制文件或目錄到指定的容器路徑
  • run要執(zhí)行的命令行命令。有shell格式和exec格式
  • cmd指定在容器中執(zhí)行的命令
    配置好dockerfile文件后卖擅,在該文件目錄下執(zhí)行命令docker build -t 鏡像 名:tag .創(chuàng)建鏡像鸣奔,或使用命令docker build --no-cache -t helloapp:v2 -f dockerfiles/Dockerfile context指定文件和上下文目錄創(chuàng)建鏡像墨技。

3.3容器

鏡像生成的運(yùn)行實(shí)例,docker中每個(gè)容器之間是互相隔離的挎狸,它可以被啟用扣汪、開(kāi)始、停止锨匆、刪除

容器的生命周期

參考文章《Docker容器的生命周期管理》私痹。

狀態(tài) 說(shuō)明 操作
created 已創(chuàng)建但未啟動(dòng) docker create
running 運(yùn)行中 docker run/docker start/docker restart/docker unpause
stopped 停止?fàn)顟B(tài) docker kill/ docker stop
paused 暫停狀態(tài) docker pause
deleted 刪除狀態(tài) docker rm

常用命令

操作 說(shuō)明
docker run img_name 創(chuàng)建并啟動(dòng)容器(-d 后臺(tái)運(yùn)行 -v 目錄映射 -p 端口映射 )
docker start 啟動(dòng)已終止的容器
docker ps 查看容器信息(-a:查看所有容器)
docker stop 終止容器
docker exec -it con_name bash 進(jìn)入容器
docker rm 刪除容器

docker compose

一個(gè)系統(tǒng)通常含有多個(gè)服務(wù),使用docker compose可以一次性管理多個(gè)容器统刮。

安裝docker compose

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 檢查是否安裝成功
docker-compose --version

編寫(xiě)docker-compose.yml文件
根據(jù)容器的運(yùn)行命令編寫(xiě)其docker-compose.yml文件紊遵。例如,我們要部署兩個(gè)服務(wù)侥蒙,一個(gè)是應(yīng)用程序暗膜,其運(yùn)行命令為:

docker run -dp 3000:3000 \
  -w /app -v "$(pwd):/app" \
  --network todo-app \
  -e MYSQL_HOST=mysql \
  -e MYSQL_USER=root \
  -e MYSQL_PASSWORD=secret \
  -e MYSQL_DB=todos \
  node:12-alpine \
  sh -c "yarn install && yarn run dev"

另一個(gè)是mysql,其運(yùn)行命令為:

docker run -d \
  --network todo-app --network-alias mysql \
  -v todo-mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=todos \
  mysql:5.7

根據(jù)運(yùn)行命令編寫(xiě)docker-compose.yml文件鞭衩。

version: "3.7"

services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:
  • app/mysql:自定義的容器別名学搜,對(duì)應(yīng)--name命令
    *image:使用該鏡像創(chuàng)建容器
  • command:在容器內(nèi)執(zhí)行的命令
  • ports:端口映射
  • working_dir:指定工作目錄,對(duì)應(yīng)-w命令
  • volumes:指定數(shù)據(jù)持久化的目錄映射论衍,對(duì)應(yīng)-v命令
  • environment:定義環(huán)境變量瑞佩,對(duì)應(yīng)-e命令

啟動(dòng)多容器
docker-compose up -d

其他操作
停止docker-compose -f docker-compose.yml stop 服務(wù)名

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坯台,隨后出現(xiàn)的幾起案子炬丸,更是在濱河造成了極大的恐慌,老刑警劉巖蜒蕾,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稠炬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡咪啡,警方通過(guò)查閱死者的電腦和手機(jī)首启,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)撤摸,“玉大人毅桃,你說(shuō)我怎么就攤上這事∽家模” “怎么了钥飞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)冕象。 經(jīng)常有香客問(wèn)我代承,道長(zhǎng)汁蝶,這世上最難降的妖魔是什么渐扮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任论悴,我火速辦了婚禮,結(jié)果婚禮上墓律,老公的妹妹穿的比我還像新娘膀估。我一直安慰自己,他們只是感情好耻讽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布察纯。 她就那樣靜靜地躺著,像睡著了一般针肥。 火紅的嫁衣襯著肌膚如雪饼记。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天慰枕,我揣著相機(jī)與錄音具则,去河邊找鬼。 笑死具帮,一個(gè)胖子當(dāng)著我的面吹牛博肋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜂厅,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼匪凡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了掘猿?” 一聲冷哼從身側(cè)響起病游,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稠通,沒(méi)想到半個(gè)月后礁遵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡采记,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年佣耐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唧龄。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兼砖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出既棺,到底是詐尸還是另有隱情讽挟,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布丸冕,位于F島的核電站耽梅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胖烛。R本人自食惡果不足惜眼姐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一诅迷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧众旗,春花似錦罢杉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至利朵,卻和暖如春律想,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绍弟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工蜘欲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晌柬。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓姥份,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親年碘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子澈歉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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

  • 一、什么是Docker? ??提到容器化技術(shù)屿衅,就必須提到docker埃难,下面從歷史來(lái)源、功能作用涤久、技術(shù)本質(zhì)幾方面談?wù)?..
    小胡_鴨閱讀 568評(píng)論 0 0
  • 一涡尘、Docker簡(jiǎn)介 1、為什么要學(xué)Docker响迂? 一款產(chǎn)品從開(kāi)發(fā)到上線考抄,從操作系統(tǒng),到運(yùn)行環(huán)境蔗彤,再到應(yīng)用配置川梅。作...
    Minority閱讀 491評(píng)論 0 1
  • 1 Docker簡(jiǎn)介 1.1 什么是虛擬化 ? 在計(jì)算機(jī)中,虛擬化(英語(yǔ):Virtualization)是一種...
    吻中求勝閱讀 313評(píng)論 0 1
  • 1 Docker簡(jiǎn)介 1.1 什么是虛擬化 虛擬化概念:簡(jiǎn)單理解是一種資源管理技術(shù)然遏; 在計(jì)算機(jī)中贫途,虛擬化(英語(yǔ):V...
    滌新_24ed閱讀 372評(píng)論 0 0
  • **了解Docker的前生LXC** LXC為L(zhǎng)inux Container的簡(jiǎn)寫(xiě)〈郑可以提供輕量級(jí)的虛擬化丢早,以便隔...
    媛_416c閱讀 123評(píng)論 0 0