1. 程式人生 > >Docker基礎入門及示例

Docker基礎入門及示例

操作 容器 work 我們 cor 運維 又能 不用 控制器

  Docker近幾年的發展可謂一日千裏,特別從是2013年隨著一個基於LXC的高級容器引擎開源,到現在,其在linux和windows上都有了很好的支持,並且已經有很多公司將docker用於實際的生產環境部署當中。這篇文章我將針對以下幾個方面簡單介紹:

1. docker的基礎介紹

2. docker在windows下的安裝配置

3. 基礎命令介紹

4. 使用vs2017在docker下調試

5. 打包一個.net core站點鏡像

一. docker基礎介紹

  可能很多朋友對docker還停留在聽說過,並沒有認真關註了解過,這裏簡單介紹下其基礎部分知識。如有不足,歡迎指正!

  1. docker介紹

  很多同學有一個先入為主的概念,docker是一個輕量級容器。所以這裏先普及一下,docker本身並不是一個容器,而是一個管理容器的引擎工具。它包含一個服務端和客戶端,服務端是一個管理著所有容器和文件系統的服務進程,客戶端則是一個服務端的控制器,用來控制docker的服務端進程。至於容器,主要指的是包含了一些特定應用的運行實例,既保證了當前應用的運行環境獨立,又能保證容器相互之間的獨立。

  一款產品從開發到上線,從操作系統,到運行環境,再到應用配置。作為開發者,我們需要關心很多東西,這也是很多互聯網公司都不得不面對的問題,特別是各種版本的叠代之後,不同版本環境的兼容,對運維人員都是考驗。Docker之所以發展如此迅速,也是因為它對此給出了一個標準化的解決方案。

  Docker提供了一套虛擬化和文件系統的支持,可以讓專業人員自由組裝需要的運行環境到容器中,並提供容器運行時的隔離。就像一個大型油輪,承載著一個個集裝箱,每個集裝箱我們可以理解為我們的容器,這個容器中的內容完全由組裝人員自定義。

  2. docker基礎概念

  docker本身是一個容器運行載體,一個容器的運行,需要正確的理解倉儲,鏡像,和容器這幾個概念。 如上介紹,容器一個運行實例,那麽當前實例是如何部署的,就明白的鏡像的意義了。鏡像就是一個已經打包好的可交付的運行環境,當我們需要的時候,就可以通過docker客戶端創建一個對應的運行實例,也就是我們的容器。至於倉儲,就是放了一堆鏡像的地方,我們可以把鏡像發布到倉儲中,需要的時候從倉儲中拉下來就可以了。

  3. docker基礎使用

  以web應為為例,我們開發完成之後,將應用打包成鏡像,發布到自己的倉儲服務器或者直接上傳到服務器中,服務器拉取或者加載鏡像,設置對應的端口映射並啟動容器。如果我們存在多個web容器,也可以通過negix在前方負載代理。在後邊我會通過一個.net core站點做一個簡單的示例。當然也有很多持續集成方案,比如代碼提交之後自動生成鏡像,部署,這裏就先不做介紹了。

二. docker在windows下的安裝和配置

  這裏我介紹下在windows中安裝Docker以及相關的配置信息。當前Docker for Windows會默認包含兩個引擎containers(linux和windows)

  1. 下載Docker for Windows,https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows

  2. 查看下是否開啟了Hyper-V功能,如果沒有可以在“啟用或關閉windows功能” 中添加Hyper-V 功能,當然你也可以不用關心,docker安裝過程中也會檢查,如果沒有則默認添加啟動,不過可以趁著等待下載docker的時間直接把這步做了,安裝Hyper-V之後可能需要重啟系統。

  3. 安裝完成之後,你可以查看Hyper-V管理器,如果安裝正常,會如下默認創建一個linux虛擬機:

技術分享

我們也可以通過PowerShell查看Docker版本:

技術分享

  安裝成功之後我們就可以對其進行相應的設置

  1. 右擊小鯨魚圖標(這裏我直接找的網上的圖),點擊Settings

技術分享

  2. 設置界面如下,其中Shared Drives 可以設置我們的對應映射驅動盤,保證C盤選中,再選中你應用所在盤符。Advanced選項中你可以設置docker對應的CPU,內存占用資源。Netword主要是當前的Docker IP信息。Proxies可以設置對應的代理信息。Daemon 主要是設置對應的倉儲和對應的倉儲鏡像站點(和docker鏡像區分開,這個是倉儲對應的鏡像,因為訪問國外站點過慢,可以設置國內的鏡像代理站點)。

技術分享

這裏特別強調一下,因為訪問Docker官網倉儲站點拉取鏡像過慢,請自行購買VPN服務,或者查找倉儲代理站點,國內的網易,DaoCloud都有對應的免費加速器,這裏是我的設置:

技術分享

  

  3. 上邊說了,Docker for Windows 提供了兩個引擎,我們可以通過右鍵菜單中的 Switch to Windows Containers 功能進行切換。

  4. 同時Docker for Windows 提供了容器的界面管理工具,可以通過右鍵菜單中的 Kitematic 功能進入,第一次可能提示你需要下載安裝,其界面如下:

技術分享

三. Docker的基礎命令

  安裝設置完成之後我們可以通過以下命令來進行操作docker了,我這裏主要是在PowerShell中進行,也可以通過命令行cmd進行

  1. docker pull: 從倉庫中拖鏡像

  2. docker run:運行容器,如果當前要運行的容器對應鏡像不存在,會自動拉取。例如:docker run hello-world

技術分享

  3.docker stop:停止容器運行
  4.docker start:開始容器運行
  5.docker commit:提交容器到鏡像
  6.docker images: 查看當前有的鏡像

技術分享

  7.docker ps:查看當前啟動的容器

技術分享

  8. docker build : 創建鏡像

  9. docker load : 加載鏡像

上邊這幾個是docker的主要命令,先行解釋一下,後邊我們會用到。

四.使用vs2017在docker下調試

這裏我以一個.net core 站點示例,啟用2017中的docker調試功能,如果是已經存在的項目,右鍵=》添加=》增加Docker支持即可

1. 新建websample站點

技術分享

2. dockerfile 文件介紹

  當項目創建完成,在項目文件中你可以看到一個dockerfile文件,內容如下:

技術分享

這個文件就是docker打包時需要的一個docker命令文件,vs中內部整合docker-compose和docker命令,完成了鏡像生成和容器的創建

技術分享

你會發現調試模塊已經是docker了,如果想回到正常以前的項目,刪除解決方案下自動生成的 docker-compose 項目即可。

我們啟動調試,這個時候如果我們打開 Kitematic 會發現我們的websample容器已經創建了,並且自動添加了dev的標簽,如下圖:

技術分享

五. 打包一個.net core站點鏡像

  這裏我使用剛才創建的.net core站點,演示一下我們完成站點開發之後,不使用vs的情況,如何通過命令完成一個鏡像的打包。

  1. 發布剛才的站點到指定文件夾下

  2. 進入發布後的文件夾,修改docker文件

  查看docker文件是否存在,如果不存在直接把項目中的復制過來,並修改內容如下

FROM microsoft/aspnetcore:1.0

WORKDIR /app
COPY . /app
EXPOSE 80

ENTRYPOINT ["dotnet", "websample.dll"]

a. 使用microsoft/aspnetcore 作為基礎鏡像

  b. 制定容器的工作目錄

  c. 復制當前項目文件到容器的app目錄下

  d. 設置容器對外暴露80端口

  e. 啟動命令,執行websample.dll

  3. 構建鏡像

    進入文件目錄,執行命令 docker build -t websample:latest . (後邊的點是需要的

技術分享

  4. 運行當前鏡像

  鏡像創建完成之後,我們就可以通過鏡像創建對應的運行容器了, 執行如下命令: docker run -it -p 8000:80 websample:latest

技術分享

可以看到我們的容器已經運行起來了,我們訪問 127.0.0.1:8000

技術分享

至此,我們已經嘗試了docker的基礎功能

Docker基礎入門及示例