Docker 技術(shù):Docker 容器化應(yīng)用部署實(shí)踐

前言

Docker 代表的容器技術(shù)是近兩年的大熱技術(shù)圾亏,和人工智能、區(qū)塊鏈等熱點(diǎn)不同碗誉,容器技術(shù)的門檻并不高,每一個(gè)開(kāi)發(fā)父晶、測(cè)試哮缺、運(yùn)維人員都能在日常工作中掌握和使用,是當(dāng)今 IT 從業(yè)人員的必備技能之一甲喝。

本文主要講解 Docker 技術(shù)棧及其應(yīng)用實(shí)踐尝苇,從環(huán)境安裝到容器、鏡像操作以及生產(chǎn)環(huán)境如何部署開(kāi)發(fā)的微服務(wù)應(yīng)用埠胖,希望本文對(duì)大家學(xué)習(xí) Docker 技術(shù)有所幫助糠溜。

什么是容器

為什么需要容器?虛擬化不是已經(jīng)夠了么直撤?

對(duì)于還沒(méi)有接觸到容器技術(shù)的小伙伴們而言非竿,可能覺(jué)得我們并沒(méi)有必要花費(fèi)大量的時(shí)間和經(jīng)歷去學(xué)習(xí)容器技術(shù)。也可能有很多小伙伴會(huì)覺(jué)得容器技術(shù)就是“新瓶裝舊酒”谋竖,沒(méi)啥學(xué)習(xí)的必要红柱。

在 IT 技術(shù)中承匣,KVM、VMware 等虛擬化技術(shù)已經(jīng)做得很好了锤悄。為什么還要學(xué)習(xí)容器技術(shù)呢韧骗?這就要聊一下虛擬化技術(shù)在實(shí)際業(yè)務(wù)中存在的問(wèn)題了:

虛擬化技術(shù)的確可以讓我們更好的利用服務(wù)器資源,也可以在宿主機(jī)上安裝多個(gè)不同的操作系統(tǒng)如 CentOS零聚、Ubuntu 以及 Windows 等等袍暴,運(yùn)行多套不同的應(yīng)用。但可能我們就是為了運(yùn)行一個(gè)簡(jiǎn)單的應(yīng)用如 Nginx隶症,卻還要在虛擬機(jī)里運(yùn)行一個(gè)完整的操作系統(tǒng)政模,內(nèi)核和其它無(wú)關(guān)程序,這種做法資源利用不高沿腰。

所以我們希望更多的關(guān)注應(yīng)用程序本身览徒,而不再分精力去關(guān)注操作系統(tǒng)與無(wú)關(guān)程序,操作系統(tǒng)內(nèi)核直接與宿主機(jī)共享颂龙。

為了實(shí)現(xiàn)上面的方案习蓬,我們就需要一種更加輕量級(jí)的虛擬化技術(shù)——容器技術(shù)。

什么是容器措嵌?

在生活中躲叼,瓶子、罐子企巢、盆枫慷、試管、箱子等用來(lái)裝東西的都是容器浪规。

而在 IT 行業(yè)中或听,容器技術(shù)是一種輕量級(jí)的虛擬化技術(shù)。主要特點(diǎn)有:

  • 輕量:只打包了需要的 bins/libs(也就是命令和庫(kù)文件)笋婿。與宿主機(jī)共享操作系統(tǒng)誉裆,直接使用宿主機(jī)的內(nèi)核。
  • 部署快:容器的鏡像相對(duì)虛擬機(jī)的鏡像小缸濒。部署速度非匙愣快,秒級(jí)部署庇配,
  • 移植性好:Build once,Run anywhere(一次構(gòu)建斩跌,隨處部署運(yùn)行)。
  • 資源利用率更高:相對(duì)于虛擬機(jī)捞慌,不需要安裝操作系統(tǒng)耀鸦,所以幾乎沒(méi)有額外的 CPU、內(nèi)存消耗啸澡。
在這里插入圖片描述

Docker 容器技術(shù)介紹

Docker 技術(shù)是目前最火熱的能實(shí)現(xiàn)容器技術(shù)的軟件揭糕,使用 Go(Golang)語(yǔ)言開(kāi)發(fā)萝快。其官方地址:

https://www.docker.com/

Docker 版本

2017 之前版本:

1.7、 1.8著角、1.9揪漩、1.10、1.11吏口、1.12奄容、1.13

2017 年的 3 月 1 號(hào)之后,Docker 的版本命名開(kāi)始發(fā)生變化产徊,同時(shí)將 CE 版本和 EE 版本進(jìn)行分開(kāi)昂勒。

Docker 社區(qū)版(CE):為了開(kāi)發(fā)人員或小團(tuán)隊(duì)創(chuàng)建基于容器的應(yīng)用,與團(tuán)隊(duì)成員分享和自動(dòng)化的開(kāi)發(fā)管道。docker-ce 提供了簡(jiǎn)單的安裝和快速的安裝舟铜,以便可以立即開(kāi)始開(kāi)發(fā)戈盈。docker-ce 集成和優(yōu)化,基礎(chǔ)設(shè)施谆刨。

  • 17-03-ce
  • 17-06-ce
  • 18-03-ce
  • 18-06-ce
  • 18-09-ce

Docker 企業(yè)版(EE):專為企業(yè)的發(fā)展和 IT 團(tuán)隊(duì)建立塘娶。docker-ee 為企業(yè)提供最安全的容器平臺(tái),以應(yīng)用為中心的平臺(tái)痊夭。

PS:所以我們安裝的時(shí)候刁岸,要安裝 docker-ce,千萬(wàn)不要搞錯(cuò)了哦她我!

Docker 底層內(nèi)核相關(guān)技術(shù)

Docker 容器本質(zhì)上是宿主機(jī)的進(jìn)程虹曙。可以把 Docker 容器內(nèi)部跑的進(jìn)程看作是宿主機(jī)的線程番舆。

Docker 通過(guò) NameSpace 實(shí)現(xiàn)了資源隔離酝碳,通過(guò) CGroups 實(shí)現(xiàn)了資源限制。

NameSpace

Linux 內(nèi)核實(shí)現(xiàn) NameSpace 的一個(gè)主要目的就是實(shí)現(xiàn)輕量級(jí)虛擬化(容器)服務(wù)恨狈。在同一個(gè) NameSpace 下的進(jìn)程可以感知彼此的變化疏哗,而對(duì)外界的進(jìn)程一無(wú)所知。

Control Group

控制組(CGroups)是 Linux 內(nèi)核的一個(gè)特性拴事,主要用來(lái)對(duì)共享資源進(jìn)行隔離沃斤、限制圣蝎、審計(jì)等刃宵。

只有能控制分配到容器的資源,才能避免多個(gè)容器同時(shí)運(yùn)行時(shí)對(duì)宿主機(jī)系統(tǒng)的資源競(jìng)爭(zhēng)徘公。

控制組可以提供對(duì)容器的內(nèi)存牲证、CPU、磁盤 IO 等資源進(jìn)行限制和計(jì)費(fèi)管理关面。

LXC 與 Docker 區(qū)別

LXC 為 Linux Container 的簡(jiǎn)寫坦袍,可以提供輕量級(jí)的虛擬化十厢。

Docker 的底層就是使用了 LXC 來(lái)實(shí)現(xiàn)的。Docker 以 LXC 為基礎(chǔ)捂齐,實(shí)現(xiàn)了更多更強(qiáng)的功能蛮放。

Docker 內(nèi)容小結(jié)

容器屬于操作系統(tǒng)虛擬化,屬于 Paas奠宜,容器可看作是一種輕量級(jí)包颁,進(jìn)程級(jí)的虛擬機(jī)。

相比于 KVM 虛擬機(jī)的優(yōu)勢(shì):

  • 不需要安裝 OS压真,和宿主機(jī)共享
  • 鏡像存儲(chǔ)空間小
  • 啟動(dòng)速度快(容器為秒級(jí)娩嚼,虛擬機(jī)一般需要 10 秒左右)
  • 移植性更好,更輕便
  • 性能更好

Docker 是一個(gè)實(shí)現(xiàn)容器的軟件滴肿,底層使用 LXC岳悟。Docker 主要使用 NameSpace 命名空間技術(shù)實(shí)現(xiàn)資源隔離,使用 CGroup 實(shí)現(xiàn)資源限制泼差。

Docker 容器化部署以及 Docker 加速器配置

環(huán)境要求

  • 建議直接在 Linux 宿主機(jī)上跑 Docker(當(dāng)然也可以在虛擬機(jī)里跑 Docker)
  • 不能直接在 Windows 上跑 Docker(因?yàn)?NameSpace贵少,CGroup 是 Linux 內(nèi)核特性,Windows 沒(méi)有)
  • Windows 上可以先跑 Linux 虛擬機(jī),再在 Linux 虛擬機(jī)上跑 Docker

Docker 安裝

默認(rèn)情況下拴驮,我們使用 yum 安裝時(shí)春瞬,官方源比較慢,所以建議大家使用國(guó)內(nèi) yum 源套啤。

### wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
### yum install docker-ce -y 

注意:要安裝 docker-ce 版宽气,不要安裝 Docker(否則可能安裝 1.13 老版本)。

修改 docker.service

### vim /usr/lib/systemd/system/docker.service

14 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
15 ExecStartPost=/sbin/iptables -P FORWARD ACCEPT  添加此行內(nèi)容

啟動(dòng)服務(wù)

### systemctl start docker
### systemctl enable docker

查看版本信息

### docker -v
Docker version 19.03.8, build afacb8b

一個(gè)故事帶你了解容器生態(tài)圈

Docker 技術(shù)的三大核心概念潜沦,分別是:

  • 鏡像(image): 鏡像就是打包好的環(huán)境與應(yīng)用萄涯。
  • 容器(contanier): 容器就是運(yùn)行鏡像的實(shí)例。 鏡像看作是靜態(tài)的唆鸡,容器是動(dòng)態(tài)的涝影。
  • 倉(cāng)庫(kù)(repository): 存放多個(gè)鏡像的一個(gè)倉(cāng)庫(kù)。

我們通過(guò)一個(gè)小故事(案例)來(lái)引入鏡像争占、容器和倉(cāng)庫(kù)的概念燃逻,看下圖:

在這里插入圖片描述

假設(shè)我們有一天需要快速構(gòu)建一個(gè)基于 Nginx/MySQL 等應(yīng)用的項(xiàng)目:咱們第一件事是干嘛,按照以往的構(gòu)建思路臂痕,肯定是一個(gè)軟件一個(gè)軟件安裝伯襟,安裝完成后,在進(jìn)行關(guān)聯(lián)配置握童∧饭郑可能我們需要花費(fèi)一天的時(shí)間來(lái)安裝和準(zhǔn)備我們所需的應(yīng)用環(huán)境,是不是特別麻煩。

那現(xiàn)在我教你一種法術(shù)叫做 Docker 技術(shù)稽揭,其擁有 Docker 客戶端俺附、Docker 服務(wù)器端(Docker daemon)、Docker Hub 官方倉(cāng)庫(kù)溪掀。

Docker Hub 被稱之為倉(cāng)庫(kù)事镣,你所要的所有應(yīng)用都在這里哦(要啥有啥)。你安裝完 Docker 后揪胃,我們可以通過(guò)專門的 Docker 命令去倉(cāng)庫(kù)拉取鏡像到服務(wù)器端蛮浑,然后 Docker 會(huì)將鏡像構(gòu)建成容器,讓其跑起來(lái)只嚣。以后你需要啥應(yīng)用沮稚,只需要通過(guò) Docker 這個(gè)法術(shù)就能輕松構(gòu)建你想要的任何應(yīng)用啦,這就是容器技術(shù)册舞!

鏡像管理與 Docker Hub 鏡像倉(cāng)庫(kù)

鏡像主要分為兩類:

  • 操作系統(tǒng)類(如 CentOS蕴掏、Ubuntu)
  • 應(yīng)用程序類

查看鏡像列表

通過(guò) docker images 命令查看本地當(dāng)前鏡像列表,默認(rèn)為空调鲸;使用 man docker-images 得到參數(shù)說(shuō)明:

### docker images

搜索鏡像

通過(guò) docker search 查找官方鏡像盛杰,使用 man docker-search 得到參數(shù)說(shuō)明。

官方倉(cāng)庫(kù)地址:https://hub.docker.com/藐石。

### docker search centos

在這里插入圖片描述

拉取鏡像

通過(guò) docker pull 拉燃垂(下載)鏡像,使用 man docker-pull 得到參數(shù)說(shuō)明:

### docker pull centos

### docker images
REPOSITORY           TAG            IMAGE ID          CREATED         SIZE
centos               latest         470671670cac     3 months ago     237MB

說(shuō)明:

  • 鏡像下載默認(rèn)是去找 Docker 官方倉(cāng)庫(kù)下載于微,它在國(guó)外網(wǎng)絡(luò)逗嫡,所以網(wǎng)速慢(有時(shí)甚至?xí)L問(wèn)不到)
  • 鏡像下載時(shí)顯示的大小與最終 docker images 顯示的大小不一致(因?yàn)橛袎嚎s算法,解壓后就變大了)

問(wèn)題:如果鏡像 pull 非常慢株依,怎么解決驱证?

  • Docker 鏡像加速器(國(guó)內(nèi)有公司將官方倉(cāng)庫(kù)下載放到國(guó)內(nèi)網(wǎng)絡(luò),我們指定從國(guó)內(nèi)網(wǎng)絡(luò)下載)
  • 可以從網(wǎng)速好的宿主機(jī)上 pull 下來(lái),然后導(dǎo)出給網(wǎng)速慢的宿主機(jī)導(dǎo)入

鏡像加速器

### vim /etc/docker/daemon.json
{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

### systemctl daemon-reload
### systemctl restart docker

刪除鏡像

通過(guò) docker rmi 刪除鏡像恋腕,man docker-rmi 查看參數(shù)幫助:

### docker rmi centos

補(bǔ)充:還可以通過(guò) docker rmi 鏡像 ID 刪除抹锄。

Docker Hub 鏡像倉(cāng)庫(kù)

思考一個(gè)問(wèn)題:剛才我們拉取的鏡像都來(lái)自哪里?

答:Docker Hub荠藤。

Docker Hub 為最大的公開(kāi)倉(cāng)庫(kù)伙单,也就是官方倉(cāng)庫(kù):

https://hub.docker.com/

在這里插入圖片描述

搜索你想要的鏡像,然后進(jìn)去看看都有點(diǎn)啥:

在這里插入圖片描述

這個(gè)還涉及到一個(gè)問(wèn)題哈肖,CentOS 有多個(gè)版本吻育,能不能指定我們下載的版本呢?當(dāng)前可以啦牡彻,看下圖:

在這里插入圖片描述
在這里插入圖片描述

看到這里你會(huì)發(fā)現(xiàn)扫沼,Docker 從 Hub 上拉取鏡像是非常容易的,學(xué)會(huì)了吧庄吼。那接下來(lái)我們來(lái)聊聊鏡像下載本地后缎除,如何讓它跑起來(lái)。

容器常見(jiàn)操作

查看容器列表

列表所有狀態(tài)的容器总寻,現(xiàn)在為空列表器罐。使用 man docker-ps 得到參數(shù)說(shuō)明:

### docker ps -a

運(yùn)行容器

### docker run -it --name=c1 centos /bin/bash
[root@5a17b9560f33 /]### cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)

[root@5a17b9560f33 /]### exit
exit

### docker start c1
c1

### docker attach c1
[root@5a17b9560f33 /]#

說(shuō)明:

  • -i 等同于 --interactive,表示交互; -t 等同于 --tty渐行,表示給一個(gè)終端用于交互轰坊。
  • --name=c1 用于指定容器名。
  • /bin/bash 指定 CentOS 鏡像啟動(dòng)為容器時(shí)的啟動(dòng)命令祟印,不指也可以肴沫,因?yàn)?CentOS 鏡像的默認(rèn)啟動(dòng)命令就是它。
  • cat /etc/redhat-release 看到 CentOS 8.1蕴忆,而 uname -r 查看的內(nèi)核是 CentOS 7.6 的, 證明了容器使用的是 Docker host 的內(nèi)核颤芬。
  • exit 退出容器后,容器會(huì)變?yōu)?exit 狀態(tài)套鹅。如果同時(shí)按下 ctrl+p+q 三個(gè)按鍵退出后站蝠,容器仍為 UP 狀態(tài)。
  • docker attach 可連接進(jìn)入容器內(nèi)部交互, 但需要容器為啟動(dòng)狀態(tài)卓鹿。

或者用下面的命令連接上去交互式操作(連上去后菱魔,直接用 exit 退出,容器仍然為 UP 狀態(tài)):

### docker exec -it c1 /bin/bash

如果需要獲取容器的輸出信息(如日志)吟孙,我們可以通過(guò) docker logs 容器名稱或容器 ID澜倦。

與容器交互拷貝文件

將本地 /etc/fstab 拷貝到 c1 容器的 /root/ 目錄下:

還有 40% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
支付 ¥7.99 繼續(xù)閱讀
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市杰妓,隨后出現(xiàn)的幾起案子肥隆,更是在濱河造成了極大的恐慌,老刑警劉巖稚失,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栋艳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡句各,警方通過(guò)查閱死者的電腦和手機(jī)吸占,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凿宾,“玉大人矾屯,你說(shuō)我怎么就攤上這事〕鹾瘢” “怎么了件蚕?”我有些...
    開(kāi)封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵孙技,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我排作,道長(zhǎng)牵啦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任妄痪,我火速辦了婚禮哈雏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衫生。我一直安慰自己裳瘪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布罪针。 她就那樣靜靜地躺著彭羹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泪酱。 梳的紋絲不亂的頭發(fā)上皆怕,一...
    開(kāi)封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音西篓,去河邊找鬼愈腾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛岂津,可吹牛的內(nèi)容都是我干的虱黄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吮成,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼橱乱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起粱甫,我...
    開(kāi)封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泳叠,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后茶宵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體危纫,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年乌庶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了种蝶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞒大,死狀恐怖螃征,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情透敌,我是刑警寧澤盯滚,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布踢械,位于F島的核電站,受9級(jí)特大地震影響魄藕,放射性物質(zhì)發(fā)生泄漏内列。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一泼疑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荷荤,春花似錦退渗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至古毛,卻和暖如春翻翩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稻薇。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工嫂冻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塞椎。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓桨仿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親案狠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子服傍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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