第1次實踐做業

課程調查

覺得是脫離企業需求的校內課程,沒想到是軟件開發相關技術課程。可是聽到說像軟工實踐相似的課程仍是有些懼怕,畢竟不是一我的可以輕鬆完成的。由於疫情的關係,本學期的時間嚴重不足,但願不要佔用太多時間爲好。mysql

瞭解微服務

微服務是一種軟件開發技術,是面向服務的體系結構(SOA)結構樣式的一種變體,它將應用程序安排爲一組鬆散耦合的服務。在微服務架構中,服務是細粒度的,協議是輕量級的。sql

Martin Fowler將基於微服務的體系結構描述爲具備如下屬性:docker

  • 適合於持續交付軟件開發過程。對應用程序的一小部分進行更改僅須要重建和從新部署一個或少許服務。
  • 遵循諸如細粒度的接口(可獨立部署的服務),業務驅動的開發(例如域驅動的設計)之類的原則。

概念

微服務運用了以業務功能爲導向的設計概念,應用程序在設計時對業務功能或流程設計先行分割,將各個業務功能都獨立實現成一個能自主運行的個體服務,而後再利用相同的協議將全部應用程序須要的服務都組合起來,造成一個應用程序。編程

若須要針對特定業務功能進行擴展時,只要對該業務功能的服務進行擴展就好,不須要整個應用程序都擴展,同時,因爲微服務是以業務功能導向的實現,所以不會受到應用程序的干擾,微服務的管理員能夠視運算資源的須要來配置微服務到不一樣的運算資源內,或是布建新的運算資源並將它配置進去。json

好處

  • 模塊化:這使應用程序更易於理解,開發,測試,而且對體系結構侵蝕更具彈性。
  • 可擴展性:因爲微服務彼此獨立地實現和部署,即它們在獨立的進程中運行,所以能夠獨立地對其進行監視和擴展。
  • 分佈式開發:它支持小團隊自主開發,部署和獨立擴展服務;還容許經過連續重構出現單個服務的體系結構。基於微服務的體系結構促進了持續集成,持續交付和部署。

缺點

  • 服務構成信息障礙。就網絡延遲和消息處理時間而言,網絡上的服務間調用比總體服務過程當中的進程內調用成本高。
  • 測試和部署更加複雜。微服務是獨立的,可使用多種編程語言進行開發。可是每種語言都依賴於其本身的庫和框架,所以,這些正在運行的多種編程語言將須要一套徹底不一樣的庫和框架。這增長了資源開銷(和成本),並使部署成爲複雜的考慮因素。
  • 認知負荷。該架構引入了額外的複雜性和新問題,例如網絡延遲,消息格式設計,備份/可用性/一致性(BAC),負載平衡和容錯。根據2020年微服務狀態報告的發現,維護和調試仍然是構建微服務開發團隊的最大問題之一。

Docke與微服務

因爲微服務是獨立的,獨立的應用程序單元,每一個微服務單元僅履行一個特定的業務功能,所以,它們自己能夠被視爲小型應用程序。若是應用程序建立十幾個微服務或者構建具備不一樣技術棧的多個微服務,那麼,開發團隊很快就會遇到麻煩,由於開發人員必須負責比開發傳統的單體應用程序更多的開發任務。windows

不過,目前有一個解決方案:使用容器封裝每一個微服務。Docker是一個容器化工具,旨在提供一種更簡單的方式來處理容器化應用程序。它將微服務封裝爲所謂的Docker container,而後能夠對其進行獨立維護和部署。每個容器中將負責一種特定的業務功能,而開發人員只需專一於自身的技術特色,開發微服務並將微服務封裝成容器,微服務之間架構的任務只需交給另外一些專業人員便可。tomcat

優勢

  • Docker是一種流行的,不斷髮展的軟件,具備出色的社區支持,併爲微服務而構建
  • 與VM相比,它是輕量級的,從而使其成本和資源效率更高
  • 它提供了跨開發和生產環境的統一性,使其很是適合構建雲原生應用程序
  • 它提供了用於持續集成和部署的工具
  • Docker提供了與流行工具和服務的集成,例如AWS,Microsoft Azure,Ansible,Kubernetes,Istio等。

學習docker技術

什麼是docker

Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基於 Linux 內核,對進程進行封裝隔離,屬於 操做系統層面的虛擬化技術。因爲隔離的進程獨立於宿主和其它的隔離的進程,所以也稱其爲容器。bash

Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極大的簡化了容器的建立和維護。使得 Docker 技術比虛擬機技術更爲輕便、快捷。服務器

傳統虛擬機技術是虛擬出一套硬件後,在其上運行一個完整操做系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行於宿主的內核,容器內沒有本身的內核,並且也沒有進行硬件虛擬。所以容器要比傳統虛擬機更爲輕便。網絡

docker基本概念

Docker 包括三個基本概念:鏡像(Image)、容器(Container)、倉庫(Repository)

鏡像

Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建以後也不會被改變。鏡像並不是是像一個 ISO 那樣的打包文件,鏡像只是一個虛擬的概念,其實際體現並不是由一個文件組成,而是由一組文件系統組成,或者說,由多層文件系統聯合組成。

容器

鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的 類 和 實例 同樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器能夠被建立、啓動、中止、刪除、暫停等。

每個容器運行時,是以鏡像爲基礎層,在其上建立一個當前容器的存儲層,咱們能夠稱這個爲容器運行時讀寫而準備的存儲層爲容器存儲層。

倉庫

一個倉庫會包含同一個軟件不一樣版本的鏡像,而標籤就經常使用於對應該軟件的各個版本。咱們能夠經過 <倉庫名>:<標籤> 的格式來指定具體是這個軟件哪一個版本的鏡像。若是不給出標籤,將以 latest 做爲默認標籤。

docker compose

Compose 項目是Docker官方的開源項目,負責實現Docker容器集羣的快速編排。Docker Compose 能夠輕鬆、高效的管理容器,它是一個用於定義和運行多容器 Docker 的應用程序工具。

Dockerfile

Dockerfile是一個包含用於組合映像的命令的文本文檔。可使用在命令行中調用任何命令。 Docker經過讀取Dockerfile中的指令自動生成映像。

Docker Machine

Docker Machine 是一個工具,它容許你在虛擬宿主機上安裝Docker,並使用docker-machine命令管理這個宿主機,可使用Docker Machine在本地的MAC或者windows box、公司網絡,數據中心或者AWS這樣的雲提供商上建立docker。Docker Machine 也能夠集中管理因此得docker主機。

Docker Swarm

Docker Swarm提供 Docker 容器集羣服務,是 Docker 官方對容器雲生態進行支持的核心方案。Docker Swarm 能夠在多個服務器或主機上建立容器集羣服務,對於微服務的部署,顯然 Docker Swarm 會更加適合。

kubernetes(k8s)

Kubernetes(k8s)是Google開源的容器集羣管理系統。在Docker技術的基礎上,爲容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能,提升了大規模容器集羣管理的便捷性。

搭建docker環境

安裝

在測試或開發環境中 Docker 官方爲了簡化安裝流程,提供了一套便捷的安裝腳本,Ubuntu 系統上可使用這套腳本安裝:

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun

安裝完成後輸入:

$ docker version

出現版本信息即爲成功安裝。

Docker 鏡像加速器

國內從 Docker Hub 拉取鏡像有時會遇到困難,此時能夠配置鏡像加速器。Docker 官方和國內不少雲服務商都提供了國內加速器服務,例如:

  • Docker 官方提供的中國 registry mirror
  • 阿里雲加速器
  • DaoCloud 加速器

這裏以阿里雲加速器爲例進行介紹。在 /etc/docker/daemon.json 中寫入以下內容(若是文件不存在請新建該文件)

{
        "registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}

以後重啓服務。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

在命令行執行

$ docker info

若是從結果中看到了以下內容,說明配置成功。

使用docker鏡像

獲取

從 Docker 鏡像倉庫獲取鏡像的命令是 docker pull。其命令格式爲:

docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤]
  • Docker 鏡像倉庫地址:地址的格式通常是 <域名/IP>[:端口號]。默認地址是 Docker Hub。
  • 倉庫名:如以前所說,這裏的倉庫名是兩段式名稱,即 <用戶名>/<軟件名>。對於 Docker Hub,若是不給出用戶名,則默認爲 library,也就是官方鏡像。
    如:
$ docker pull tomcat

上面的命令中沒有給出 Docker 鏡像倉庫地址,所以將會從 Docker Hub 獲取鏡像。而鏡像名稱是 tomcat,所以將會獲取官方鏡像 library/tomcat 倉庫中標籤爲 latest(默認) 的鏡像。

查詢

使用命令:

docker images

能夠查看目前docker已獲取的鏡像。列表包含了 倉庫名標籤鏡像 ID建立時間 以及 所佔用的空間

運行

有了鏡像後,就可以以這個鏡像爲基礎啓動並運行一個容器。以上面的 tomcat 爲例,打算啓動以tomcat爲鏡像的容器,能夠輸入下面的命令:

$ docker run -it --rm -p 8080:8080 tomcat

下面驗證一下tomcat是否啓動成功。

再登錄hub.docker.com中查看版本是否正確。

能夠看到,tomcat的版本號正好是5.54,與hub.docker.com中一致。

刪除

若是要刪除本地的鏡像,可使用 docker image rm 命令,其格式爲:

$ docker image rm [選項] <鏡像1> [<鏡像2> ...]

其中,<鏡像> 能夠是 鏡像短 ID、鏡像長 ID、鏡像名 或者 鏡像摘要。
如:

docker image rm tomcat

使用docker容器

啓動

啓動容器有兩種方式,一種是基於鏡像新建一個容器並啓動,另一個是將在終止狀態(stopped)的容器從新啓動。所須要的命令主要爲 docker run。

以上面的 tomcat 爲例,打算新建以tomcat爲鏡像的容器並啓動,能夠輸入下面的命令:

$ docker run -it --rm -p 8080:8080 tomcat

下面驗證一下tomcat是否啓動成功。

能夠利用

$ docker container start

直接將一個已經終止的容器啓動運行。

終止

使用

$ docker container stop CONTAINER ID

來終止一個容器

進入

在啓動容器時附帶-d參數,容器會在後臺駐留。這時若是須要進入容器,可使用

$ docker exec -it CONTAINER ID bash

進入容器。其中參數 i 表示交互式,參數 t 表示以Linux 終端形式進行。

退出容器時,輸入 exit 便可。

刪除

使用

$ docker container rm

來刪除一個容器。須要注意的是,在刪除一個容器前,必須先終止它,不然出現錯誤提示。

使用docker倉庫

註冊

登陸 https://hub.docker.com/ 免費註冊一個屬於本身的我的帳戶。

登陸

使用

$ docker login

命令,並根據提示登陸帳號。

搜索

使用

$ dokcer search

能夠搜索在docker hub中的相關鏡像。如 docker search mysql:

能夠看到有關MySQL鏡像的信息,其中包括鏡像名字、描述、收藏數(表示該鏡像的受關注程度)、是否官方建立、是否自動建立。另外,在查找的時候經過 --filter=stars=N 參數能夠指定僅顯示收藏數量爲 N 以上的鏡像。

拉取

使用

$ docker pull

進行拉取鏡像操做。如 docker pull mysql:

推送

先使用

$ docker tag

爲鏡像打上本身的用戶名/鏡像名:標籤。再使用

$ docker push

將鏡像推送到本身的鏡像倉庫。

登陸docker hub,可以看到相關鏡像倉庫

相關文章
相關標籤/搜索