前幾個星期實踐的了,再不記錄一下真的就忘乾淨了html
Docker即容器技術,具體的介紹已經有不少,不打算贅述了,說一些優勢linux
對我我的來講,最大的優勢就是在一臺電腦上能夠部署不一樣的環境而不用擔憂它們產生衝突,最多見的衝突就是端口占用,使用Docker技術能夠很方便地規避這一問題,並且便於管理,我不用在本地處理多個環境git
更普遍一點好處還有不少github
下文會看到,即便我在一臺普通電腦上同時運行多個環境,也不會佔用宿主機過多的資源,正常的開發仍然能夠進行,更不用說專門的服務器主機docker
傳統的虛擬機技術啓動應用服務每每須要數分鐘,而 Docker 容器應用,因爲直接運行於宿主內核,無需啓動完整的操做系統,所以能夠作到秒級、甚至毫秒級的啓動時間。大大的節約了開發、測試、部署的時間。npm
開發過程當中一個常見的問題是環境一致性問題。因爲開發環境、測試環境、生產環境不一致,致使有些 bug 並未在開發過程當中被發現。而 Docker 的鏡像提供了除內核外完整的運行時環境,確保了應用運行環境一致性,從而不會再出現 這段代碼在我機器上沒問題啊 這類問題。windows
對開發和運維(DevOps)人員來講,最但願的就是一次建立或配置,能夠在任意地方正常運行。
使用 Docker 能夠經過定製應用鏡像來實現持續集成、持續交付、部署。開發人員能夠經過 Dockerfile 來進行鏡像構建,並結合 持續集成(Continuous Integration) 系統進行集成測試,而運維人員則能夠直接在生產環境中快速部署該鏡像,甚至結合 持續部署(Continuous Delivery/Deployment) 系統進行自動部署。bash
因爲 Docker 確保了執行環境的一致性,使得應用的遷移更加容易。Docker 能夠在不少平臺上運行,不管是物理機、虛擬機、公有云、私有云,甚至是筆記本,其運行結果是一致的。所以用戶能夠很輕易的將在一個平臺上運行的應用,遷移到另外一個平臺上,而不用擔憂運行環境的變化致使應用沒法正常運行的狀況。服務器
Docker 使用的分層存儲以及鏡像的技術,使得應用重複部分的複用更爲容易,也使得應用的維護更新更加簡單,基於基礎鏡像進一步擴展鏡像也變得很是簡單。此外,Docker 團隊同各個開源項目團隊一塊兒維護了一大批高質量的 官方鏡像,既能夠直接在生產環境使用,又能夠做爲基礎進一步定製,大大的下降了應用服務的鏡像製做成本。網絡
基礎的東西就不說了,不一樣操做系統的安裝具體看這個
Docker —— 從入門到實踐。我在文章裏主要記錄一些要點,以及在windows系統上的具體操做
和npm同樣,國內網絡問題,拉去鏡像速度比較慢,因此要配置國內鏡像,可使用Docker官方的或者其餘雲服務商提供的
我使用的是Windows 10系統,配置方式是在系統右下角托盤Docker圖標內右鍵菜單選擇 Settings,打開配置窗口後左側導航菜單選擇 Daemon。在 Registry mirrors 一欄中填寫加速器地址 https://registry.docker-cn.com,以後點擊 Apply 保存後 Docker 就會重啓並應用配置的鏡像地址了。
安裝完Docker以後再使用cmd命令打開命令控制行中就可使用Docker命令了,目前我只作了一些簡單的實踐,記錄一下我使用頻率比較高的指令
首先要查看當前安裝使用了哪些容器
這個命令會列出全部容器的狀態,容器的ID、名稱、使用的鏡像、映射地址等,我我的以爲是使用頻率最高的一個
與npm相似,要想建立容器,須要先選擇鏡像拉取到本地,在Docker Hub找到須要的鏡像,或者本身製做好鏡像後,使用docker pull命令拉取到本地,以.NET Core的官方的示例鏡像爲例
docker pull microsoft/dotnet-samples
執行命令後等待拉取完成便可,再次拉取同一鏡像即更新
查看本機的鏡像
拉取後查看本地鏡像的狀態,會分別列出鏡像來自的倉庫(Repository)、標籤(一般是版本號)、鏡像ID、建立時間、鏡像大小
刪除鏡像或容器,rm指令的用法對於容器和鏡像是相同的,主要不一樣的是就是鏡像沒有名稱
若是要經過名稱刪除鏡像,能夠這樣 docker image rm <倉庫名>:<標籤>
若是要經過ID刪除鏡像,能夠輸入完整的ID,也可使用短ID,短ID就是隻輸入ID的前幾個字符,通常三個以上就能夠區分不一樣的鏡像
須要注意的是,若是有依託於鏡像的子容器就不能刪除,而且容器正在運行時也不能刪除,可是能夠加上-f參數,這樣Docker會發送SIGKILL信號給容器
另外,全部的container指令能夠省掉,docker rm [ID/NAME] 就是刪除指定容器
新建並啓動一個容器,這個命令比較重要且經常使用的參數比較多,這裏用微軟官方鏡像給的命令做爲示例
docker run -it --rm -p 8000:80 --name aspnetcore_sample microsoft/dotnet-samples:aspnetapp
執行這個命令以後,docker首先會看有沒有相應的鏡像,若是沒有就會自動執行拉取操做,咱們前面拉取了微軟官方的Core應用鏡像,這裏則啓動一個Web示例鏡像,這樣會有一個拉取的操做,須要等待一會
這樣就是建立成功並啓動了,訪問http://localhost:8000就能夠看到Core的示例網站
若是去掉 --rm 參數,退出後不會刪除容器,經過下文的 start 命令能夠再啓動,若是不使用參數則不會再進入終端
若是有問題能夠用前面說的第一個命令ps看下當前容器的狀態
當咱們重啓docker後,通常狀況下容器會處於Exited退出狀態,這個時候要經過start命令啓動,ID前面說過,使用長ID短ID都可,名稱就是建立容器是--name參數設定的
這裏用上文已經關閉容器的例子
返回容器ID通常就是啓動成功,這樣就能夠繼續經過80端口訪問
進入容器,還有另外一個指令 docker attach 二者有些不同,這裏會在下文說明緣由
docker exec 後邊能夠跟多個參數,這裏主要說明 -i -t 參數。
前面 run 命令也說過,這裏有些相似,只用 -i 參數時,因爲沒有分配僞終端,界面沒有咱們熟悉的Linux命令提示符,但命令執行結果仍然能夠返回。當 -i -t 參數一塊兒使用時,則能夠看到咱們熟悉的 Linux 命令提示符。
可是不知道是否是命令使用錯誤,只能在後面跟一個 ls這樣的簡單命令,若是用 cd [目錄名稱] 這種有空格的命令就沒法識別,因此使用 bash 命令進入linux終端就能夠正常使用linux命令了
下一節會講一講如何在Docker上部署.NET Core,再也不是官方的示例,而是若是從開發環境到部署的環境,本地如何經過Dockerfile構建鏡像上傳到倉庫