日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker部署微服务详解

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker部署微服务详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

2013年發布至今,Docker一直廣受矚目,被認為可能會改變軟件行業。

但是,許多人并不清楚Docker 到底是什么,要解決什么問題,好處又在哪里?今天就來詳細解釋,幫助大家理解它,還帶有簡單易懂的實例,教你如何將它用于日常開發。

?01 Docker簡介

Docker是一個開源的容器引擎,它有助于更快地交付應用。Docker可將應用程序和基礎設施層隔離,并且能將基礎設施當作程序一樣進行管理。

使用Docker可更快地打包、測試以及部署應用程序,并可以縮短從編寫到部署運行代碼的周期。

Docker的優點如下:

1、簡化程序

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

2、避免選擇恐懼癥

如果你有選擇恐懼癥,還是資深患者。Docker幫你打包你的糾結!比如Docker鏡像;Docker鏡像中包含了運行環境和配置,所以Docker可以簡化部署多種應用實例工作。比如Web應用、后臺應用、數據庫應用、大數據應用比如Hadoop集群、消息隊列等等都可以打包成一個鏡像部署。

3、節省開支

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

02 Docker的架構

Docker daemon(Docker守護進程)

Docker daemon是一個運行在宿主機(DOCKER-HOST)的后臺進程。可通過 Docker客戶端與之通信。

Client( Docker客戶端)

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

Images(Docker鏡像)

Docker鏡像是一個只讀模板,它包含創建 Docker容器的說明。它和系統安裝光盤有點像,使用系統安裝光盤可以安裝系統,同理,使用Docker鏡像可以運行Docker鏡像中的程序。

Container(容器)

容器是鏡像的可運行實例。鏡像和容器的關系有點類似于面向對象中,類和對象的關系。可通過Docker API或者CLI命令來啟停、移動、刪除容器。

Registry

Docker Registry是一個集中存儲與分發鏡像的服務。構建完 Docker鏡像后,就可在當前宿主機上運行。但如果想要在其他機器上運行這個鏡像,就需要手動復制。此時可借助Docker Registry來避免鏡像的手動復制。

一個Docker Registry可包含多個Docker倉庫,每個倉庫可包含多個鏡像標簽,每個標簽對應一個Docker鏡像。這跟Maven的倉庫有點類似,如果把Docker Registry比作Maven倉庫的話,那么Docker倉庫就可理解為某jar包的路徑,而鏡像標簽則可理解為jar包的版本號。

Docker Registry可分為公有Docker Registry和私有Docker Registry。最常用的Docker Registry莫過于官方的Docker Hub,這也是默認的Docker Registry。Docker Hub上存放著大量優秀的鏡像,我們可使用Docker命令下載并使用。

?03 Docker 的安裝

Docker是一個開源的商業產品,有兩個版本:社區版(Community Edition,縮寫為 CE)和企業版(Enterprise Edition,縮寫為 EE)。企業版包含了一些收費服務,個人開發者一般用不到。下面的介紹都針對社區版。

Docker CE的安裝請參考官方文檔,我們這里以CentOS為例:

1、Docker要求 CentOS 系統的內核版本高于3.10

通過uname -r 命令查看你當前的內核版本

?#uname -r

2、使用 root 權限登錄 Centos。確保 yum 包更新到最新。

?#yum -y update

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

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

4、安裝需要的軟件包,yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的

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

5、設置yum源,并更新 yum 的包索引

` # yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ??????# yum makecache fast`

6、可以查看所有倉庫中所有docker版本,并選擇特定版本安裝

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

7、安裝docker

```

# yum install docker-ce ?#由于repo中默認只開啟stable倉庫,故這里安裝的是最新穩定版18.03.1

# yum install<FQPN> ?# 例如:yum -y install docker-ce-18.03.1.ce

```

8、啟動并加入開機啟動

```

# systemctl start docker?

# systemctl enable docker

```

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

`# docker version`

10、卸載docker

`# yum -y remove docker-engine`

?04 Docker常用命令

鏡像相關命令

1、搜索鏡像

可使用docker search命令搜索存放在Docker Hub中的鏡像。執行該命令后,Docker就會在Docker Hub中搜索含有 java這個關鍵詞的鏡像倉庫。

`# docker search java`

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

- NAME:鏡像倉庫名稱。

- DESCRIPTION:鏡像倉庫描述。

- STARS:鏡像倉庫收藏數,表示該鏡像倉庫的受歡迎程度,類似于 GitHub的 stars0

- OFFICAL:表示是否為官方倉庫,該列標記為[0K]的鏡像均由各軟件的官方項目組創建和維護。

- AUTOMATED:表示是否是自動構建的鏡像倉庫。

注意:需要配置鏡像加速器

`# docker search java`

Error response from daemon: Get https://index.docker.io/v1/search?q=java: read tcp 52.200.132.201:443: i/o timeout

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

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

`# ?cd /etc/docker`

查看有沒有 daemon.json。這是docker默認的配置文件。

如果沒有新建,如果有,則修改。

```

# vim daemon.json

{

?"registry-mirrors": ["https://m9r2r2uj.mirror.aliyuncs.com"]

}

```

保存退出

重啟docker服務

```

# service docker restart

```

成功!

2、下載鏡像

使用命令docker pull命令即可從Docker Registry上下載鏡像,執行該命令后,Docker會從 Docker Hub中的 java倉庫下載最新版本的 Java鏡像。如果要下載指定版本則在java后面加冒號指定版本,例如:docker pull java:8

`# docker pull java:8`

3、列出鏡像

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

`# docker images`

以上列表含義如下

- REPOSITORY:鏡像所屬倉庫名稱。

- TAG:鏡像標簽。默認是 latest,表示最新。

- IMAGE ID:鏡像 ID,表示鏡像唯一標識。

- CREATED:鏡像創建時間。

- SIZE: 鏡像大小。

4、刪除本地鏡像

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

`# docker rmi java`

## 05、容器相關命令

1、新建并啟動容器

使用以下docker run命令即可新建并啟動一個容器,該命令是最常用的命令,它有很多選項,下面將列舉一些常用的選項。

-d選項:表示后臺運行

-P選項:隨機端口映射

-p選項:指定端口映射,有以下四種格式。

-- ip:hostPort:containerPort

-- ip::containerPort

-- hostPort:containerPort

-- containerPort

--net選項:指定網絡模式,該選項有以下可選參數:

--net=bridge:默認選項,表示連接到默認的網橋。

--net=host:容器使用宿主機的網絡。

--net=container:NAME-or-ID:告訴 Docker讓新建的容器使用已有容器的網絡配置。

--net=none:不配置該容器的網絡,用戶可自定義網絡配置。

`# docker run -d -p 91:80 nginx`

這樣就能啟動一個Nginx容器。在本例中,為docker run添加了兩個參數,含義如下:

-d 后臺運行

-p 宿主機端口:容器端口 #開放容器端口到宿主機端口

訪問http://Docker宿主機 IP:91/,將會看到nginx的主界面如下:

需要注意的是,使用docker run命令創建容器時,會先檢查本地是否存在指定鏡像。如果本地不存在該名稱的鏡像, Docker就會自動從Docker Hub下載鏡像并啟動一個 Docker容器。

2、列出容器

用docker ps命令即可列出運行中的容器

`# docker ps`

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

- CONTAINER_ID:表示容器 ID。

- IMAGE:表示鏡像名稱。

- COMMAND:表示啟動容器時運行的命令。

- CREATED:表示容器的創建時間。

- STATUS:表示容器運行的狀態。UP表示運行中, Exited表示已停止。

- PORTS:表示容器對外的端口號。

- NAMES:表示容器名稱。該名稱默認由 Docker自動生成,也可使用 docker run命令的--name選項自行指定。

3、停止容器

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

`# docker stop f0b1c8ab3633`

其中f0b1c8ab3633是容器 ID,當然也可使用 docker stop容器名稱來停止指定容器

4、強制停止容器

可使用 docker kill命令發送 SIGKILL信號來強制停止容器

`# docker kill f0b1c8ab3633`

5、啟動已停止的容器

使用docker run命令,即可新建并啟動一個容器。對于已停止的容器,可使用 docker start命令來啟動

`# docker start f0b1c8ab3633`

6、查看容器所有信息

`# docker inspect f0b1c8ab3633`

7、查看容器日志

`# docker container logs f0b1c8ab3633`

8、查看容器里的進程

`# docker top f0b1c8ab3633`

9、進入容器

使用docker exec命令用于進入一個正在運行的docker容器。如果docker run命令運行容器的時候,沒有使用-it參數,就要用這個命令進入容器。一旦進入了容器,就可以在容器的 Shell 執行命令了

`# docker exec -it f0b1c8ab3633 /bin/bash`

10、刪除容器

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

`# docker rm f0b1c8ab3633`

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

06、將微服務運行在docker上

Dockerfile是一個文本文件,其中包含了若干條指令,指令描述了構建鏡像的細節

先來編寫一個最簡單的Dockerfile,以前文下載的Nginx鏡像為例,來編寫一個Dockerfile修改該Nginx鏡像的首頁

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

FROM nginx

RUN echo '<h1>This is Tuling Nginx!!!</h1>' > /usr/share/nginx/html/index.html

該Dockerfile非常簡單,其中的 FORM、RUN都是 Dockerfile的指令。FROM指令用于指定基礎鏡像, RUN指令用于執行命令。

2、在Dockerfile所在路徑執行以下命令構建鏡像:

`# docker build -t nginx:tuling .`

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

3、執行以下命令,即可使用該鏡像啟動一個Docker容器

`# docker run -d -p 92:80 nginx:tuling`

4、訪問http://Docker宿主機IP:92/,可看到下圖所示界面

注意:RUN命令在image文件的構建階段執行,執行結果都會打包進入image 文件;CMD命令則是在容器啟動后執行。另外,一個Dockerfile 可以包含多個RUN命令,但是只能有一個CMD命令。

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

?07、使用Dockerfile構建微服務鏡像

以項目05-ms-eureka-server為例,將該微服務的可運行jar包構建成docker鏡像

1、將jar包上傳linux服務器/app/eureka目錄,在jar包所在目錄創建名為Dockerfile的文件

2、在Dockerfile中添加以下內容

`# 基于哪個鏡像`

From java:8

`# 復制文件到容器`

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

`# 聲明需要暴露的端口`

EXPOSE 8761

`# 配置容器啟動后執行的命令`

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

3、使用docker build命令構建鏡像

```

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

# 格式:docker build -t 鏡像名稱:標簽 Dockerfile的相對位置

```

在這里,使用-t選項指定了鏡像的標簽。執行該命令后,終端將會輸出如下的內容

4、啟動鏡像,加-d可在后臺啟動

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

使用-v 可以掛載一個主機上的目錄到容器的目錄

`# docker run -p 8761:8761 -v /tmp:/tmp microservice-eureka-server:0.0.1`

5、訪問http://Docker宿主機IP:8761/,可正常顯示Eureka Server首頁

## 08、Docker虛擬化原理

傳統虛擬化和容器技術結構比較:傳統虛擬化技術是在硬件層面實現虛擬化,增加了系統調用鏈路的環節,有性能損耗;容器虛擬化技術以共享Kernel的方式實現,幾乎沒有性能損耗。

?

轉載于:https://my.oschina.net/u/4118408/blog/3051363

總結

以上是生活随笔為你收集整理的Docker部署微服务详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。