主頁(yè) > 知識(shí)庫(kù) > 十分鐘學(xué)會(huì)用docker部署微服務(wù)

十分鐘學(xué)會(huì)用docker部署微服務(wù)

熱門標(biāo)簽:外呼系統(tǒng)打哪顯哪 AI電銷機(jī)器人 源碼 江西外呼系統(tǒng) 湖北ai智能電銷機(jī)器人 新邵電銷機(jī)器人企業(yè) 新科美甲店地圖標(biāo)注 高德地圖標(biāo)注論壇 北海市地圖標(biāo)注app 蘭州ai電銷機(jī)器人招商

2013年發(fā)布至今, Docker 一直廣受矚目,被認(rèn)為可能會(huì)改變軟件行業(yè)。

但是,許多人并不清楚 Docker 到底是什么,要解決什么問(wèn)題,好處又在哪里?今天就來(lái)詳細(xì)解釋,幫助大家理解它,還帶有簡(jiǎn)單易懂的實(shí)例,教你如何將它用于日常開發(fā)并用其部署微服務(wù)。

一. Docker簡(jiǎn)介

Docker是一個(gè)開源的容器引擎,它有助于更快地交付應(yīng)用。 Docker可將應(yīng)用程序和基礎(chǔ)設(shè)施層隔離,并且能將基礎(chǔ)設(shè)施當(dāng)作程序一樣進(jìn)行管理。使用 Docker可更快地打包、測(cè)試以及部署應(yīng)用程序,并可以縮短從編寫到部署運(yùn)行代碼的周期。

Docker的優(yōu)點(diǎn)如下:

1. 簡(jiǎn)化程序

Docker 讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,便可以實(shí)現(xiàn)虛擬化。Docker改變了虛擬化的方式,使開發(fā)者可以直接將自己的成果放入Docker中進(jìn)行管理。方便快捷已經(jīng)是 Docker的最大優(yōu)勢(shì),過(guò)去需要用數(shù)天乃至數(shù)周的 任務(wù),在Docker容器的處理下,只需要數(shù)秒就能完成。

2. 避免選擇恐懼癥

如果你有選擇恐懼癥,還是資深患者。Docker 幫你 打包你的糾結(jié)!比如 Docker 鏡像;Docker 鏡像中包含了運(yùn)行環(huán)境和配置,所以 Docker 可以簡(jiǎn)化部署多種應(yīng)用實(shí)例工作。比如 Web 應(yīng)用、后臺(tái)應(yīng)用、數(shù)據(jù)庫(kù)應(yīng)用、大數(shù)據(jù)應(yīng)用比如 Hadoop 集群、消息隊(duì)列等等都可以打包成一個(gè)鏡像部署。

3. 節(jié)省開支

一方面,云計(jì)算時(shí)代到來(lái),使開發(fā)者不必為了追求效果而配置高額的硬件,Docker 改變了高性能必然高價(jià)格的思維定勢(shì)。Docker 與云的結(jié)合,讓云空間得到更充分的利用。不僅解決了硬件管理的問(wèn)題,也改變了虛擬化的方式。

二. Docker架構(gòu)

 

Docker daemon( Docker守護(hù)進(jìn)程)

Docker daemon是一個(gè)運(yùn)行在宿主機(jī)( DOCKER-HOST)的后臺(tái)進(jìn)程??赏ㄟ^(guò) Docker客戶端與之通信。

Client( Docker客戶端)

Docker客戶端是 Docker的用戶界面,它可以接受用戶命令和配置標(biāo)識(shí),并與 Docker daemon通信。圖中, docker build等都是 Docker的相關(guān)命令。

Images( Docker鏡像)

Docker鏡像是一個(gè)只讀模板,它包含創(chuàng)建 Docker容器的說(shuō)明。它和系統(tǒng)安裝光盤有點(diǎn)像,使用系統(tǒng)安裝光盤可以安裝系統(tǒng),同理,使用Docker鏡像可以運(yùn)行 Docker鏡像中的程序。

Container(容器)

容器是鏡像的可運(yùn)行實(shí)例。鏡像和容器的關(guān)系有點(diǎn)類似于面向?qū)ο笾?,類和?duì)象的關(guān)系??赏ㄟ^(guò) Docker API或者 CLI命令來(lái)啟停、移動(dòng)、刪除容器。

Registry

Docker Registry是一個(gè)集中存儲(chǔ)與分發(fā)鏡像的服務(wù)。構(gòu)建完 Docker鏡像后,就可在當(dāng)前宿主機(jī)上運(yùn)行。但如果想要在其他機(jī)器上運(yùn)行這個(gè)鏡像,就需要手動(dòng)復(fù)制。此時(shí)可借助 Docker Registry來(lái)避免鏡像的手動(dòng)復(fù)制。

一個(gè) Docker Registry可包含多個(gè) Docker倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)可包含多個(gè)鏡像標(biāo)簽,每個(gè)標(biāo)簽對(duì)應(yīng)一個(gè) Docker鏡像。這跟 Maven的倉(cāng)庫(kù)有點(diǎn)類似,如果把 Docker Registry比作 Maven倉(cāng)庫(kù)的話,那么 Docker倉(cāng)庫(kù)就可理解為某jar包的路徑,而鏡像標(biāo)簽則可理解為jar包的版本號(hào)。

三. Docker安裝

Docker 是一個(gè)開源的商業(yè)產(chǎn)品,有兩個(gè)版本:社區(qū)版(Community Edition,縮寫為 CE)和企業(yè)版(Enterprise Edition,縮寫為 EE)。企業(yè)版包含了一些收費(fèi)服務(wù),個(gè)人開發(fā)者一般用不到。下面的介紹都針對(duì)社區(qū)版。

Docker CE 的安裝請(qǐng)參考官方文檔。以下列出不同操作系統(tǒng)的安裝方法

  • Mac
  • indows
  • Ubuntu
  • Debian
  • CentOS
  • Fedora
  • 其他 Linux 發(fā)行版

我們這里以CentOS為例:

1、Docker 要求 CentOS 系統(tǒng)的內(nèi)核版本高于 3.10 ,查看本頁(yè)面的前提條件來(lái)驗(yàn)證你的CentOS 版本是否支持 Docker 。

通過(guò) uname -r 命令查看你當(dāng)前的內(nèi)核版本

# uname -r

2、使用 root 權(quán)限登錄 Centos。確保 yum 包更新到最新。

# yum -y update

3、卸載舊版本(如果安裝過(guò)舊版本的話)

# yum remove docker docker-common docker-selinux docker-engine

4、安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個(gè)是devicemapper驅(qū)動(dòng)依賴的

# yum install -y yum-utils device-mapper-persistent-data lvm2

5、設(shè)置yum源

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6、可以查看所有倉(cāng)庫(kù)中所有docker版本,并選擇特定版本安裝

# yum list docker-ce --showduplicates | sort -r

7、安裝docker

# sudo yum install -y docker-ce #由于repo中默認(rèn)只開啟stable倉(cāng)庫(kù),故這里安裝的是最新穩(wěn)定版18.03.1

8、啟動(dòng)并加入開機(jī)啟動(dòng)

# systemctl start docker

# systemctl enable docker

9、驗(yàn)證安裝是否成功(有client和service兩部分表示docker安裝啟動(dòng)都成功了)

# docker version

10、卸載docker

# yum -y remove docker-engine

四. Docker常用命令

(一) .鏡像相關(guān)命令

1、搜索鏡像

可使用 docker search命令搜索存放在 Docker Hub(這是docker官方提供的存放所有docker鏡像軟件的地方,類似maven的中央倉(cāng)庫(kù))中的鏡像。執(zhí)行該命令后, Docker就會(huì)在Docker Hub中搜索含有 java這個(gè)關(guān)鍵詞的鏡像倉(cāng)庫(kù)。

# docker search java

以上列表包含五列,含義如下:

  • NAME:鏡像倉(cāng)庫(kù)名稱。
  • DESCRIPTION:鏡像倉(cāng)庫(kù)描述。
  • STARS:鏡像倉(cāng)庫(kù)收藏?cái)?shù),表示該鏡像倉(cāng)庫(kù)的受歡迎程度,類似于 GitHub的 stars0
  • OFFICAL:表示是否為官方倉(cāng)庫(kù),該列標(biāo)記為[0K]的鏡像均由各軟件的官方項(xiàng)目組創(chuàng)建和維護(hù)。
  • AUTOMATED:表示是否是自動(dòng)構(gòu)建的鏡像倉(cāng)庫(kù)。

注意:使用docker查找或下載鏡像可能會(huì)超時(shí),所以我們需要為docker配置國(guó)內(nèi)的鏡像加速器

我們可以借助阿里云的鏡像加速器,登錄阿里云(https://cr.console.aliyun.com/#/accelerator )

可以看到鏡像加速地址如下圖:

# cd /etc/docker

查看有沒(méi)有 daemon.json。這是docker默認(rèn)的配置文件。

如果沒(méi)有新建,如果有,則修改。

# vim daemon.json 
{
  "registry-mirrors": ["https://m9r2r2uj.mirror.aliyuncs.com"]
}

保存退出并重啟docker服務(wù)

# service docker restart

2、下載鏡像

使用命令docker pull命令即可從 Docker Registry上下載鏡像,執(zhí)行該命令后,Docker會(huì)從 Docker Hub中的 java倉(cāng)庫(kù)下載最新版本的 Java鏡像。如果要下載指定版本則在java后面加冒號(hào)指定版本,例如:docker pull java:8

# docker pull java:8

 

3、列出鏡像

使用 docker images命令即可列出已下載的鏡像

# docker images

以上列表含義如下

  • REPOSITORY:鏡像所屬倉(cāng)庫(kù)名稱。
  • TAG:鏡像標(biāo)簽。默認(rèn)是 latest,表示最新。
  • IMAGE ID:鏡像 ID,表示鏡像唯一標(biāo)識(shí)。
  • CREATED:鏡像創(chuàng)建時(shí)間。
  • SIZE: 鏡像大小。

4、刪除本地鏡像

使用 docker rmi命令即可刪除指定鏡像

# docker rmi java

(二) .容器相關(guān)命令

1、新建并啟動(dòng)容器

使用以下docker run <鏡像名>命令即可新建并啟動(dòng)一個(gè)容器,該命令是最常用的命令,它有很多選項(xiàng),下面將列舉一些常用的選項(xiàng)。

# docker run -d -p 91:80 nginx

這樣就能啟動(dòng)一個(gè) Nginx容器。在本例中,為 docker run添加了兩個(gè)參數(shù),含義如下:

  • -d 后臺(tái)運(yùn)行
  • -p 宿主機(jī)端口:容器端口 #開放容器端口到宿主機(jī)端口

訪問(wèn)http://Docker宿主機(jī) IP:91/,將會(huì)看到nginx的主界面如下:

需要注意的是,使用 docker run命令創(chuàng)建容器時(shí),會(huì)先檢查本地是否存在指定鏡像。如果本地不存在該名稱的鏡像, Docker就會(huì)自動(dòng)從 Docker Hub下載鏡像并啟動(dòng)一個(gè) Docker容器。

該命令還有一個(gè)網(wǎng)絡(luò)配置參數(shù),如下所示

  • --net選項(xiàng):指定網(wǎng)絡(luò)模式,該選項(xiàng)有以下可選參數(shù):
  • --net=bridge:默認(rèn)選項(xiàng),表示連接到默認(rèn)的網(wǎng)橋。
  • --net=host:容器使用宿主機(jī)的網(wǎng)絡(luò)。
  • --net=container:NAME-or-ID:告訴 Docker讓新建的容器使用已有容器的網(wǎng)絡(luò)配置。
  • --net=none:不配置該容器的網(wǎng)絡(luò),用戶可自定義網(wǎng)絡(luò)配置。

2、列出容器

用 docker ps命令即可列出運(yùn)行中的容器

# docker ps

如需列出所有容器(包括已停止的容器),可使用-a參數(shù)。該列表包含了7列,含義如下

  • CONTAINER_ID:表示容器 ID。
  • IMAGE:表示鏡像名稱。
  • COMMAND:表示啟動(dòng)容器時(shí)運(yùn)行的命令。
  • CREATED:表示容器的創(chuàng)建時(shí)間。
  • STATUS:表示容器運(yùn)行的狀態(tài)。UP表示運(yùn)行中, Exited表示已停止。
  • PORTS:表示容器對(duì)外的端口號(hào)。
  • NAMES:表示容器名稱。該名稱默認(rèn)由 Docker自動(dòng)生成,也可使用 docker run命令的--name選項(xiàng)自行指定。

3、停止容器

使用 docker stop <容器id>命令,即可停止容器

# docker stop f0b1c8ab3633

其中f0b1c8ab3633是容器 ID,當(dāng)然也可使用 docker stop容器名稱來(lái)停止指定容器

4、強(qiáng)制停止容器

可使用 docker kill <容器id>命令發(fā)送 SIGKILL信號(hào)來(lái)強(qiáng)制停止容器

# docker kill f0b1c8ab3633

5、啟動(dòng)已停止的容器

使用docker run命令,即可新建并啟動(dòng)一個(gè)容器。對(duì)于已停止的容器,可使用 docker start <容器id>命令來(lái)啟動(dòng)

# docker start f0b1c8ab3633

6、查看容器所有信息

使用命令docker inspect <容器id>

# docker inspect f0b1c8ab3633

7、查看容器日志

使用命令docker container logs <容器id>

# docker container logs f0b1c8ab3633

8、查看容器里的進(jìn)程

使用命令docker top <容器id>

# docker top f0b1c8ab3633

9、進(jìn)入容器

使用docker container exec -it <容器id> /bin/bash命令用于進(jìn)入一個(gè)正在運(yùn)行的docker容器。如果docker run命令運(yùn)行容器的時(shí)候,沒(méi)有使用-it參數(shù),就要用這個(gè)命令進(jìn)入容器。一旦進(jìn)入了容器,就可以在容器的 Shell 執(zhí)行命令了

# docker container exec -it f0b1c8ab3633 /bin/bash

10、刪除容器

使用 docker rm命令即可刪除指定容器

# docker rm f0b1c8ab3633

該命令只能刪除已停止的容器,如需刪除正在運(yùn)行的容器,可使用-f參數(shù)

(三) .構(gòu)建自己的docker鏡像

使用Dockerfile構(gòu)建自己的Docker鏡像

Dockerfile是一個(gè)文本文件,其中包含了若干條指令,指令描述了構(gòu)建鏡像的細(xì)節(jié)

先來(lái)編寫一個(gè)最簡(jiǎn)單的Dockerfile,以前文下載的Nginx鏡像為例,來(lái)編寫一個(gè)Dockerfile修改該Nginx鏡像的首頁(yè)

1、新建文件夾/app,在app目錄下新建一個(gè)名為Dockerfile的文件,在里面增加如下內(nèi)容:

FROM nginx #從本地的鏡像倉(cāng)庫(kù)里拉取ngxin的docker鏡像 
RUN echo 'This is QingFeng Nginx!!!' > /usr/share/nginx/html/index.html #修改ngxin的docker鏡像的首頁(yè)內(nèi)容

該Dockerfile非常簡(jiǎn)單,其中的 FORM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基礎(chǔ)鏡像, RUN指令用于執(zhí)行命令。

2、在Dockerfile所在路徑執(zhí)行以下命令構(gòu)建我們自己的ngxin鏡像,構(gòu)建完可用docker images命令查看是否已生成鏡像ngxin:tuling:

# docker build -t nginx:qingfeng .

其中,-t指定鏡像名字,命令最后的點(diǎn)(.)表示Dockerfile文件所在路徑

3、執(zhí)行以下命令,即可使用該鏡像啟動(dòng)一個(gè) Docker容器

# docker run -d -p 92:80 nginx:qingfeng

4、訪問(wèn)http://Docker宿主機(jī)IP:92/,可看到下圖所示界面,

Dockerfile的文件編寫還有如下常用指令

注意:RUN命令在 image 文件的構(gòu)建階段執(zhí)行,執(zhí)行結(jié)果都會(huì)打包進(jìn)入 image 文件;CMD命令則是在容器啟動(dòng)后執(zhí)行。另外,一個(gè) Dockerfile 可以包含多個(gè)RUN命令,但是只能有一個(gè)CMD命令。

注意:指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否則它會(huì)覆蓋CMD命令。

(四) .使用Dockerfile構(gòu)建微服務(wù)鏡像

以spring boot項(xiàng)目ms-eureka-server(源碼在最后)為例,該項(xiàng)目就是一個(gè)spring cloud eureka的微服務(wù)項(xiàng)目,該項(xiàng)目可通過(guò)spring boot的maven插件打包成可執(zhí)行的jar包運(yùn)行,如下圖所示

將該項(xiàng)目的可執(zhí)行jar包構(gòu)建成docker鏡像:

1、將jar包上傳linux服務(wù)器/app/eureka目錄,在jar包所在目錄創(chuàng)建名為Dockerfile的文件

2、在Dockerfile中添加以下內(nèi)容

# 基于哪個(gè)鏡像

From java:8

# 復(fù)制文件到容器

ADD microservice-eureka-server-0.0.1-SNAPSHOT.jar /app.jar

# 聲明需要暴露的端口

EXPOSE 8761 # 微服務(wù)項(xiàng)目的啟動(dòng)端口

# 配置容器啟動(dòng)后執(zhí)行的命令

ENTRYPOINT ["java","-jar","/app.jar"]

3、使用docker build命令構(gòu)建鏡像

# docker build -t microservice-eureka-server:0.0.1 .

# 格式: docker build -t 鏡像名稱:標(biāo)簽 Dockerfile的相對(duì)位置

在這里,使用-t選項(xiàng)指定了鏡像的標(biāo)簽。執(zhí)行該命令后,終端將會(huì)輸出如下的內(nèi)容

4、啟動(dòng)鏡像,加-d可在后臺(tái)啟動(dòng)

# docker run -p 8761:8761 microservice-eureka-server:0.0.1

5、訪問(wèn)http://Docker宿主機(jī)IP:8761/,可正常顯示微服務(wù)Eureka Server的首頁(yè)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:池州 海南 大理 阿克蘇 南陽(yáng) 黔東 黃石 自貢

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《十分鐘學(xué)會(huì)用docker部署微服務(wù)》,本文關(guān)鍵詞  十分鐘,學(xué),會(huì)用,docker,部署,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《十分鐘學(xué)會(huì)用docker部署微服務(wù)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于十分鐘學(xué)會(huì)用docker部署微服務(wù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章