架構師修煉之微服務部署 - Docker簡介

架構師修煉之微服務部署 - Docker簡介

Docker簡介
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器或Windows 機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。Docker動手實驗平臺:Play with Docker。

Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部項目,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於2013 年 3 月以 Apache 2.0 授權協議開源,主要項目代碼在
GitHub上進行維護。Docker 項目後來還加入了 Linux 基金會,併成立推動開放容器聯盟(OCI)。

Docker 自開源後受到廣泛的關注和討論,至今其 GitHub 項目已經超過 4 萬 6 千個星標和一萬多個 fork。甚至由於 Docker 項目的火爆,在 2013 年底,dotCloud 公司決定改名爲 Docker。Docker 最初是在 Ubuntu 12.04 上開發實現的;Red Hat 則從 RHEL 6.5 開始對 Docker 進行支持;Google 也在其 PaaS 產品中廣泛應用 Docker。

Docker 使用 Google 公司推出的Go 語言進行開發實現,基於 Linux 內核的cgroup,namespace,以及AUFS類的Union FS等技術,對進程進行封裝隔離,屬於操作系統層面的虛擬化技術。由於隔離的進程獨立於宿主和其它的隔離的進程,因此也稱其爲容器。最初實現是基於LXC,從 0.7 版本以後開始去除 LXC,轉而使用自行開發的libcontainer,從 1.11 開始,則進一步演進爲使用runC和containerd。

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

容器(Containers) 虛擬主機(Virtual Machines)

容器內應用進程直接運行於宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。 虛擬出一套硬件後,在其上運行一個完整操作系統,在該系統上再運行所需應用進程。缺點:消耗硬件資源;配置和啓動都慢。
內部架構

組成部分:

Docker客戶端
Docker服務端
daemon 守護進程
image 鏡像
container 容器
Docker鏡像倉庫
概念
Docker客戶端
發佈操作指令給Docker服務端進行容器與鏡像操作,類似Xshell,Teraterm。

Daemon守護進程
daemon在服務端宿主主機後臺運行,接受來自客戶的請求,並處理這些請求(創建、運行、分發容器)。

DockerFile文件
一個用來構建鏡像的文本文件,包含了一條條構建鏡像所需要的指令和說明。

鏡像(image)
創建容器的模板,一般程序員通過編譯DockerFile文件創建。

鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。無法對鏡像進行修改。--簡書

容器(Container)
鏡像實例-標準化的應用,可以進入容器進行修改。一個鏡像可以創建多個獨立運行的容器。

容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的命名空間。因此容器可以擁有自己的root文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶 ID 空間。容器內的進程是運行在一個隔離的環境裏,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。--簡書

倉庫(Repository)
集中化存儲鏡像的地方,一般使用Docker Registry構建自己的私有倉庫。而官方的DockerHub提供操作系統、數據庫、web服務或者其他公開的鏡像。

鏡像構建完成後,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。--簡書

鏡像容器創建實操(Windows版)
創建Asp.netCore項目
因爲安裝VS2019太費時間,所有通過SDK命令來創建項目。

安裝Asp.netCore開發環境
因爲需要使用模板創建項目,所有需要進入官網(https://dotnet.microsoft.com/download)下載安裝.NETCore SDK 3.1

確認是否安裝成功
啓動cmd命令窗口
輸入以下命令
dotnet --version
如果輸出爲 3.1 打頭,代表安裝成功
啓動cmd窗口,cd到作業目錄。輸入以下命令創建項目。
dotnet new webapp -o aspnetcoreapp
進入項目目錄,運行項目。
D:docker>cd aspnetcoreapp
D:dockeraspnetcoreapp>dotnet restore
D:dockeraspnetcoreappaspnetcoreapp.csproj 的還原在 65.58 ms 內完成。

D:dockeraspnetcoreapp>dotnet run
info: Microsoft.Hosting.Lifetime[0]

Now listening on: https://localhost:5001

info: Microsoft.Hosting.Lifetime[0]

Now listening on: http://localhost:5000

info: Microsoft.Hosting.Lifetime[0]

Application started. Press Ctrl+C to shut down.

info: Microsoft.Hosting.Lifetime[0]

Hosting environment: Development

info: Microsoft.Hosting.Lifetime[0]

Content root path: D:\docker\aspnetcoreapp

進入瀏覽器,輸入地址:https://localhost:5001 或者 http://localhost:5000。如果顯示了Welcome,代表創建成功。

創建DockerFile
在作業目錄,創建無後綴的文件:DockerFile。內容如下:

備註:如果使用VS2019可以通過右鍵項目,選擇“Docker支持”自動生成此文件。

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["aspnetcoreapp/aspnetcoreapp.csproj", "aspnetcoreapp/"]
RUN dotnet restore "aspnetcoreapp/aspnetcoreapp.csproj"
COPY . .
WORKDIR "/src/aspnetcoreapp"
RUN dotnet build "aspnetcoreapp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "aspnetcoreapp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "aspnetcoreapp.dll"]
創建鏡像
安裝Docker Desktop for windows.
https://www.docker.com/products/docker-desktop
進入CMD窗口,查看安裝版本。(因爲是本地演示,必須保證Client和Server都存在)
D:docker>docker version
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:23:10 2020
OS/Arch: windows/amd64
Experimental: false

Server: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:29:16 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
CMD窗口進入工作目錄,通過DockerFile創建鏡像
備註:因爲我有緩存Aspnet3.1和sdk3.1,所以沒有出現下載信息。

D:docker>dir
驅動器 D 中的卷是 Soft
卷的序列號是 CC3B-E6AD

D:docker 的目錄

2020/04/22 15:46

.
2020/04/22 15:46 ..
2020/04/22 13:08 aspnetcoreapp
2020/04/22 15:40 615 DockerFile
        1 個文件            615 字節
        3 個目錄 86,923,542,528 可用字節

D:docker>docker build -t aspnetcore .
Sending build context to Docker daemon 6.373MB
Step 1/17 : FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
---> 0661f995e7db
Step 2/17 : WORKDIR /app
---> Running in 361e77bdad90
Removing intermediate container 361e77bdad90
---> add07effc24a
Step 3/17 : EXPOSE 80
---> Running in 9a384d1bd5e4
Removing intermediate container 9a384d1bd5e4
---> bea582d752fc
Step 4/17 : EXPOSE 443
---> Running in 4690332ca309
Removing intermediate container 4690332ca309
---> 47da2ca7d6ce
Step 5/17 : FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
---> 3edbb65c61da
Step 6/17 : WORKDIR /src
---> Using cache
---> 5464ff3ac1fb
Step 7/17 : COPY ["aspnetcoreapp/aspnetcoreapp.csproj", "aspnetcoreapp/"]
---> Using cache
---> d9cbfaaf5a1a
Step 8/17 : RUN dotnet restore "aspnetcoreapp/aspnetcoreapp.csproj"
---> Using cache
---> f3fc708d4809
Step 9/17 : COPY . .
---> Using cache
---> c30b51b049a7
Step 10/17 : WORKDIR "/src/aspnetcoreapp"
---> Using cache
---> 089b9f9f7a27
Step 11/17 : RUN dotnet build "aspnetcoreapp.csproj" -c Release -o /app/build
---> Using cache
---> 01728a06901e
Step 12/17 : FROM build AS publish
---> 01728a06901e
Step 13/17 : RUN dotnet publish "aspnetcoreapp.csproj" -c Release -o /app/publish
---> Using cache
---> bf5986a7c2e4
Step 14/17 : FROM base AS final
---> 47da2ca7d6ce
Step 15/17 : WORKDIR /app
---> Running in 098789c69783
Removing intermediate container 098789c69783
---> 373b88783227
Step 16/17 : COPY --from=publish /app/publish .
---> 2a00a6670e90
Step 17/17 : ENTRYPOINT ["dotnet", "aspnetcoreapp.dll"]
---> Running in 94f2bb2fae82
Removing intermediate container 94f2bb2fae82
---> 73ae1ad12839
Successfully built 73ae1ad12839
Successfully tagged aspnetcore:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

D:docker>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aspnetcore latest 73ae1ad12839 32 seconds ago 212MB

創建容器
先確認容器列表,然後使用鏡像名稱創建容器。
-d:表示後臺運行;-P:表示自動分配端口(-p 8080:80 形式自定義端口)

D:docker>docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

D:docker>docker run -d -P aspnetcore
4129eb2516af33ea9346c8d6eefec6e1d5d83ec728ab3ddb093a4a3610dd3001

D:docker>docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4129eb2516af aspnetcore "dotnet aspnetcoreap…" 4 seconds ago Up 3 seconds 0.0.0.0:32771->80/tcp, 0.0.0.0:32770->443/tcp elegant_chebyshev
執行結果
打開瀏覽器,輸入地址:http://localhost:32771/

原文地址https://www.cnblogs.com/lixiaobin/p/dockerdescription.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章