docker wsl2啟動不了_Docker學習筆記

在筆記本上主要還是想以輕量、方便為主,所以采用的是在WSL2中使用docker的這么一個方案。

WSL2

我筆記本原來是預裝的是WIN10家庭版,需要先升級為專業版,并加入windows預覽體驗計劃。更新完之后,安裝WSL,我選擇的是Ubuntu16.04,并且升級到WSL2[1],就可以支持docker了。

在WSL2中安裝docker-ce[2]。因為WSL2中沒法正常的使用systemctl,我參考了韋易笑的文章[3]對docker做了自啟動。

Why docker?

  • 環境隔離,相當于輕量級的虛擬機
  • 可更新、可擴展,一次配置,到處享用
  • 一鍵部署

鏡像與容器

鏡像與容器是我們接觸得最多的東西和基本的概念。鏡像是一個只讀的模板,它可以包含一個完整的linux系統、軟件和其它運行環境。docker利用容器來運行應用,容器是鏡像的運行實例,每個容器都是相互隔離的。

Hello world

我們從hello-world,來看看docker運行容器的流程。

安裝完docker后,為了不用每次運行docker命令都需要加上sudo,需要先將用戶加入docker用戶組:sudo adduser $USER docker 。然后登出賬戶,再登陸即可。

完了我們運行docker官方的hello-world,看看能否正常運行:docker run -rm hello-world

09b4bcdac6c085a8dfa3219e7ed6e264.png

這條命令的意思是,從hello-world鏡像創建一個容器并運行容器。

容器被創建后,可以啟動(start)和停止(stop),不需要之后可以刪除。一個容器在程序運行完成后會自動停止,但是容器不會被自動刪除。--rm參數是讓容器運行完成、停止后自動刪除該容器。 我們可以通過docker ps -a命令查看已存在的容器。

從圖中第二、三行可以看到,docker在從鏡像創建容器時,首先會查找本地鏡像。當本地查找不到時,會從倉庫查找。這里的倉庫概念和github、maven的倉庫概念類似,默認是從官方的dockerhub查找,可以自行添加其它鏡像源。

此外,我們運行nginx測試一下在容器中運行web服務,執行命令docker run nginx。我們可以通過localhost來訪問WSL2中的服務:

9868dcfff30664a4e5677472aac993c4.png

fde3908dbbe0774113845547cb62ffee.png

創建開發環境

一般情況下,我們不需要自己從頭制作一個鏡像,可以在別人做好的鏡像上進行二次制作。以python的flask程序為例,可以把python3.6的鏡像作為基礎鏡像:docker pull python:3.6

c36f3e5bd4ff1e1d091e3685ea42449c.png

其中冒號后面的3.6是tag,如果不加tag的話默認是latest。

然后從該鏡像中運行一個容器實例:docker run -it --name="flask" python:3.6 /bin/bash

88a184fbbfcae67497373d070981de74.png

可以看到,其實容器內是有一個完整的文件系統的,并且容器內安裝好了python 3.6.10。 關于命令,-i是以交互的形式運行容器,-t是為其分配一個偽輸入終端,--name="flask"則是為該容器創建一個別名。之后我們可以用docker start/stop flask之類的命令來啟動或停止該容器。

接著我們在容器容器內的根目錄創建一個名為app的文件夾(后來發現不用手動創建),為的是之后將宿主機(WSL2)的目錄直接映射到docker容器中,就省去了將宿主機的代碼傳到docker容器這個步驟。并且這種方式對安全、以及數據持久化來說都有幫助。

然后根據需要,在容器內安裝flask:pip install flask,并用docker commit 4f6 eagle/flask命令保存新的鏡像。4f6是容器的id,和git的版本號有些類似,后面是新鏡像的名字。可以看到,由于安裝flask,鏡像的尺寸也比原來大了一些。

70aca6be1aa980788b2ddc9918f15eb2.png

3df339bd50e1aefb6cf17c5e71269cdb.png

這樣我們開發環境的鏡像就創建完成了,接下來要測試一下是否可行。先刪除之前的容器或者運行容器時指定其它的別名,然后使用命令創建新的容器:

docker run -it --name="flask" -p 5555:2333 -v /home/eagle:/app eagle/flask /bin/bash

其中-p 5555:3333是將宿主機的5555端口映射到容器的2333端口,-v /home/eagle:/app則是將宿主機的目錄映射到容器的app目錄。

接著寫一個簡單的flask測試程序,來看看這個容器是否能否充當開發環境。在宿主機創建app.py文件并寫入以下代碼:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello():return 'flask in docker'if __name__ == '__main__':app.run(host='0.0.0.0', port=2333)

在docker容器中運行python app.py啟動flask服務,并在瀏覽器中查看結果:

a2cdf8f102bf6fc4d21cf4598f516bed.png

9f1f1f88d82041f0820a054dea2ba045.png

環境移植

接下來我們要考慮如何把自己制作好的鏡像移植到別的機子上,做到“一次配置,到處享用”。很簡單,導出鏡像和導入鏡像只需要:

docker save eagle/flask > flask-docker-image.tar.gz
docker load < flask-docker-image.tar.gz

但是,我們的問題不在于此。從前面可以看到,我們制作好的鏡像足足有900+MB那么大,能不能有什么辦法可以使鏡像小一些呢?

答案是肯定的!那就是使用alpine版本的python鏡像。alpine[4]是一個超輕量級的linux系統,只有5MB的大小,而dockerhub[5]上也提供了python的alpine版本鏡像。

運行命令docker pull python:3.6-alpine下載鏡像,然后對比一下幾個鏡像的大小,可以看到這個鏡像也只有95MB,僅占原來的十分之一:

cb377b0842cf845eaa9c160f08f4dc37.png

即使安裝了flask,也才105MB,并且程序可以正常運行,測試過程和結果和之前差不多,就不贅述了。

另外我這里采用的是在容器中安裝依賴和用目錄映射,做開發環境的搭建。至于制作鏡像和鏡像瘦身,還有別的方法[6],等我實際用到的時候再把這部分的坑填了吧。

結語

docker提供的容器化方案為我們日常的開發和部署提供了很大的便捷,所以受到許多人的青睞。但是做機器學習的話,還需要考慮到調用顯卡這回事,目前Nvidia官方也提供了nvidia-docker這么個東西。因筆記本沒有顯卡,無法測試,日后也會把這部分的坑填上,判斷其是否能作為日常開發的環境。

參考

  1. ^如何在 Windows 10 中安裝 WSL2 的 Linux 子系統?https://blog.csdn.net/WPwalter/article/details/101508601
  2. ^Docker Ce | 鏡像站使用幫助 | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror?https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
  3. ^WSL服務自啟動的正確方法?https://zhuanlan.zhihu.com/p/47733615
  4. ^Docker之操作系統Alpine_菲宇運維-CSDN博客?https://blog.csdn.net/bbwangj/article/details/81088231
  5. ^python - Docker Hub?https://hub.docker.com/_/python/
  6. ^Docker Layers Explained - DZone Cloud?https://dzone.com/articles/docker-layers-explained

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276904.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276904.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276904.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

暑假集訓-8.06總結

學習內容&#xff1a; 搜索 今日完成題數&#xff08;不包含多校&#xff09;&#xff1a;4 今日看書情況&#xff1a;15頁 今日心得&#xff1a; 今天學的是搜索&#xff0c;雖然以前學過&#xff0c;但書上講的更具體些&#xff0c; 比如說如何去優化搜索的次數等 英語題目好…

網易馬進:DDB從分布式數據庫到結構化數據中心的架構變遷

導語&#xff1a; 本文根據馬進老師在2018年5月10日【第九屆中國數據庫技術大會(DTCC)】現場演講內容整理而成。馬進 網易 DDB項目負責人來自網易杭研大數據平臺組&#xff0c;入職以來先后參與了分布式數據庫DDB&#xff0c;緩存NKV&#xff0c;網易數據運河NDC等項目&#xf…

element label動態賦值_淺析 vuerouter 源碼和動態路由權限分配

背景上月立過一個 flag&#xff0c;看完 vue-router 的源碼&#xff0c;可到后面逐漸發現 vue-router 的源碼并不是像很多總結的文章那么容易理解&#xff0c;閱讀過你就會發現里面的很多地方都會有多層的函數調用關系&#xff0c;還有大量的 this 指向問題&#xff0c;而且會有…

MessagePack Java 0.6.X List, Map 對象的序列化和反序列化

為了序列化原生的容器對象例如 List 和 Map 對象&#xff0c;你必須使用 Template。 Template 對象是 serializer 和 deserializer 的配對。例如&#xff0c;為了序列化一個 List 對象&#xff0c;在 List 對象中 Integer 對象為元素&#xff0c;你可以使用下面的方法來創建一…

世界領先的界面設計公司:The Skins Factory

該公司的網站&#xff1a; http://www.theskinsfactory.com/skinsfactory/ 該公司誕生于2000年&#xff0c;由一群狂熱的界面愛好者&#xff0c;帶著對GUI的熱情和大膽的洞察力創立。很快&#xff0c;皮膚工廠便成長為世界領先的、真正的、革命性界面解決方案提供商。 更多的精…

HDU 1253 勝利大逃亡 題解

勝利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 44540 Accepted Submission(s): 15483 Problem DescriptionIgnatius被魔王抓走了,有一天魔王出差去了,這可是Ignatius逃亡的好機會.魔王住在一個城堡…

lstm需要優化的參數_使用PyTorch手寫代碼從頭構建LSTM,更深入的理解其工作原理...

這是一個造輪子的過程&#xff0c;但是從頭構建LSTM能夠使我們對體系結構進行更加了解&#xff0c;并將我們的研究帶入下一個層次。LSTM單元是遞歸神經網絡深度學習研究領域中最有趣的結構之一&#xff1a;它不僅使模型能夠從長序列中學習&#xff0c;而且還為長、短期記憶創建…

有哪些漂亮的中國風 LOGO 設計?

提到中國風的logo&#xff0c;我覺得首先登場的應該是北京故宮博物院的logo&#xff0c;鐺&#xff01;故宮博物院的logo&#xff0c;從顏色&#xff0c;到外形&#xff0c;到元素&#xff0c;無一例外&#xff0c;充滿了中國風的味道&#xff0c;可謂是中國風中的典型。同一風…

大家放松下,仿《大腕》經典對白

仿《大腕》經典對白&#xff1a; 一定要找那最流行的框架&#xff0c; 用功能最強大編輯器&#xff0c; 做就要做最復雜的系統&#xff0c; 輕量級的絕對不行&#xff0c; 框架最簡單也得是&#xff33;&#xff30;&#xff32;&#xff29;&#xff2e;&#xff27;&…

MySQL-8.0.12源碼安裝實例

1、通過官網下載對應的版本后&#xff0c;通過FTP上傳至云服務器的/usr/local/src 目錄 2、解壓縮文件 [rootJSH-01 src]# ls mysql-boost-8.0.12.tar.gz [rootJSH-01 src]# tar zxvf mysql-boost-8.0.12.tar.gz [rootJSH-01 src]# ls mysql-8.0.12 mysql-boost-8.0.12.tar.gz…

python3常用模塊_Python3 常用模塊

一、time與datetime模塊 在Python中&#xff0c;通常有這幾種方式來表示時間&#xff1a; 時間戳(timestamp)&#xff1a;通常來說&#xff0c;時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行“type(time.time())”&#xff0c;返回的是float類型。 格式…

Windows下的HEAP溢出及其利用

Windows下的HEAP溢出及其利用 作者: isno 一、概述 前一段時間ASP的溢出鬧的沸沸揚揚&#xff0c;這個漏洞并不是普通的堆棧溢出&#xff0c;而是發生在HEAP中的溢出&#xff0c;這使大家重新認識到了Windows下的HEAP溢出的可利用性。其實WIN下的HEAP溢出比Linux和SOLARIS下面的…

地方政府不愿房價下跌 救市或化解房地產調控

地方政府不愿房價下跌 "救市"或化解房地產調控 2008年05月09日 07:29:38  來源&#xff1a;上海證券報 漫畫 劉道偉 由于房地產業與地方政府利益攸關&#xff0c;地方政府最不愿意看到房價下跌。中央房地產調控政策剛剛導致部分城市的房價步入調整&#xff0c;一些…

App移動端性能工具調研

使用GT的差異化場景平臺描述release版本development版本Android在Android平臺上&#xff0c;如果希望使用GT的高級功能&#xff0c;如“插樁”等&#xff0c;就必須將GT的SDK嵌入到被調測的應用的工程里&#xff0c;再配合安裝好的GT使用。支持AndroidiOS在iOS平臺上&#xff0…

UITabBar Contoller

。UITabBar中的UIViewController獲得控制權&#xff1a;在TabBar文件中添加&#xff1a;IBOutlet UITabBar *myTabBar; //在xib中連接tabBar&#xff1b;(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:      (UIViewControlle…

python3.5安裝pip_win10上python3.5.2第三方庫安裝(運用pip)

1 首先在python官網下載并安裝python。我這兒用的是python3.5.2&#xff0c;其自帶了pip。如果你選擇的版本沒有自帶pip&#xff0c;那么請查找其他的安裝教程。 2 python安裝好以后&#xff0c;我在其自帶的命令提示符窗口中輸入了pip&#xff0c;結果尷尬了&#xff0c;提示我…

C語言程序設計 練習題參考答案 第八章 文件(2)

/* 8.&#xff18;從文件ex88_1.txt中取出成績&#xff0c;排序后&#xff0c;按降序存放EX88_2.TXT中 */ #include "stdio.h" #define N 10 struct student { int num; char name[20]; int score[3]; /*不能使用float*/ float average; }; void sort(struc…

語法上的小trick

語法上的小trick 構造函數 雖然不寫構造函數也是可以的&#xff0c;但是可能會開翻車&#xff0c;所以還是寫上吧。&#xff1a; 提供三種寫法&#xff1a; ? 使用的時候只用&#xff1a; 注意&#xff0c;這里的A[i]gg(3,3,3)的“gg”不能打括號&#xff0c;否則就是強制轉換…

Ubuntu18.04如何讓桌面軟件默認root權限運行?

什么是gksu? 什么是gksu:Linxu中的gksu是系統中的su/sudo工具,如果安裝了gksu,在終端中鍵入gksu會彈出一個對話框. 安裝gksu: 在Ubuntu之前的版本中是繼承gksu工具的,但是在Ubutu18.04中并沒有集成, 在Elementary OS中連gksu的APT源都沒有. Ubuntu18.04 安裝和使用gksu: seven…

win10診斷啟動后聯網_小技巧:win10網絡共享文件夾出現錯誤無法訪問如何解決?...

win10系統共享文件夾時在資源管理器中的網絡里能夠看到所共享的文件夾&#xff0c;但在打開文件夾時卻出現 Windows無法訪問 Desktop-r8ceh55新建文件夾 請檢查名稱的拼寫。否則&#xff0c;網絡可能有問題。要嘗試識別并解決網絡問題&#xff0c;請單擊“診斷”的錯誤提示&…