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.mzph.cn/news/276904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网易马进: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;而且会有…

世界领先的界面设计公司: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;可谓是中国风中的典型。同一风…

python3常用模块_Python3 常用模块

一、time与datetime模块 在Python中&#xff0c;通常有这几种方式来表示时间&#xff1a; 时间戳(timestamp)&#xff1a;通常来说&#xff0c;时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”&#xff0c;返回的是float类型。 格式…

地方政府不愿房价下跌 救市或化解房地产调控

地方政府不愿房价下跌 "救市"或化解房地产调控 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;提示我…

语法上的小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;请单击“诊断”的错误提示&…

两段关于统计日期的sql语句

统计月份&#xff1a;selectleft(convert(char(10),[Article_TimeDate],102),7) as月份, count(*) as数量from[hdsource].[dbo].[article]groupbyleft(convert(char(10),[Article_TimeDate],102),7)orderby1统计年份&#xff1a; selectleft(convert(char(10),[Article_TimeDat…

sklearn 安装_sklearn-classification_report

原型sklearn.metrics.classification_report(y_true, y_pred, labelsNone, target_namesNone, sample_weightNone, digits2)参数y_true&#xff1a;1维数组或标签指示数组/离散矩阵&#xff0c;样本实际类别值列表y_pred&#xff1a;1维数组或标签指示数组/离散矩阵&#xff0c…

Python标准库之csv(1)

1.Python处理csv文件之csv.writer() import csvdef csv_write(path,data):with open(path,w,encodingutf-8,newline) as f:writer csv.writer(f,dialectexcel)for row in data:writer.writerow(row)return True 调用上面的函数 data [[Name,Height],[Keys,176cm],[HongPing,1…

我用代码来给你们分析一个赚钱的技巧

2019独角兽企业重金招聘Python工程师标准>>> 赚钱是个俗气的话题&#xff0c;但又是人人都绕不开的事情。我今天来“科学”地触碰下这个话题。 谈赚钱&#xff0c;就会谈到理财、投资&#xff0c;谈到炒股。有这样一个笑话&#xff1a; 问&#xff1a;如何成为百万富…

idea中自动deployment的步骤

转载于:https://www.cnblogs.com/littlehb/p/11322666.html

python怎么编辑文件_如何使用python中的方法对文件进行修改文件名

在使用python语言中的方法操作文件时&#xff0c;打开方法可以直接使用open&#xff0c;但是对文件重命名需要调用os模块中的方法&#xff0c;删除文件也是工具/原料 python 编辑器 截图工具 台式机 方法/步骤 1 进入到python安装文件目录&#xff0c;新建txt文件kou.txt2 打开…