背景

我们的工程使用了一个叫做termux的安卓上的linux终端,这个终端在所有的软件包里硬编码了软件的运行路径(/data/data/com.termux/..),由于安卓系统的权限设计,我们名为bingduoduo的应用并没有使用该目录的权限。这个bug在alpha阶段查找,调试折磨了我们很长时间,因为实在没有想到应用的运行会和应用applicationId耦合在一起。我们最终找到的解决方法是自己编译一份termux支持的所有的软件包,将运行路径改为/data/data/bingduoduo/..,并自己维护一个apt的下载源。为了解决编译时的环境问题,我们使用了Termux项目组提供的docker镜像,所以本篇文章主要是介绍windows下docker的使用。

首先应该介绍一下docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

————百度百科

简而言之,docker是一个轻量级的为了解决环境依赖问题的虚拟机。

docker可以在windows上使用,不过很少博客提到的是需要windows开启Hype-V,而这项功能是windows 10家庭版和教育版不支持的,有的博客提供的改注册表的功能亲测无效。所以windows上使用docker的基本条件就是保证操作系统是windows专业版。

安装

首先开启Hype-V

任务栏windows图标上右键应用与功能—右边栏程序与功能—左边栏启用或关闭Windows功能—选择Hype-V并确定,重启电脑后Hype-V功能就已经是开启状态的了。

安装软件

windows上的软件安装过程比较简单,在docker官网上直接下载Docker for Windows并安装就可以了,操作过程都是图形界面,比较符合windows用户的使用习惯

使用

windows上的docker使用逻辑与linux上有所不同,不能一键启动容器,必须先启动docker desktop才可以启动具体的容器。启动时间比较长,在docker desktop没有启动的情况下使用docker命令,或出现permission denied的报错信息

docker启动以后可以使用docker run hello-world命令来检查自己是否安装正确。

我们上文所说docker的目的之一是为了保证软件的依赖关系,它与常见的VM相比,一个最大的不同就是它提供的dockerhub平台使别人已经配置好的镜像可以供大家下载,这样可以避免自己再去辛苦配置环境。

简单解释一下docker 容器和镜像的概念,容器是由镜像实例化而来,类比我们学习过的面向对象的概念,镜像就是程序中定义的类,而容器是类实例化后的对象。

我们可以这样得到一个镜像

docker pull ubuntu:14.04
#下载一个基于ubuntu14.04的镜像,在不指明下载地址的情况下,默认下载地址是docker hub

在镜像的基础上可以得到一个容器

docker run ubuntu:14.04
#会实例化一个容器,并给容器分配一个id

windows上使用docker的常用命令有(在powershell中)

#查看所有镜像
docker images -q
#查看所有容器
docker ps -a
#查看所有运行中容器
docker ps
#进入容器
docker exec -it containerID /bin/bash
#停止所有容器
docker stop $(docker ps -q)
#删除所有容器
docker rm $(docker ps -aq)
#删除所有镜像
docker rmi $(docker images -q)
#删除某个镜像
docker rmi imageID
#docker与宿主机互传文件
#从docker到宿主机
docker cp containerName:containerpath/file.txt filepath
#从宿主机到docker
docker cp filepath containerName:containerpath/file.txt

[技术博客]windows中使用docker技术的更多相关文章

  1. [技术博客] Django中文件的保存与访问

    [技术博客] Django中文件的保存与访问 在TextMarking项目开发中,数据库需要保存用户上传的文本文档. 原型设计:用户点击上传文本->保存文本->文本发送到后端保存为文件. ...

  2. 红眼技术博客 » redis连接池红眼技术博客 » redis连接池

    红眼技术博客 » redis连接池 redis连接池

  3. [技术博客]React-Native中的组件加载、卸载与setState问题

    React-Native中的组件加载.卸载与setState问题. Warning: Can only update a mounted or mounting component. This usu ...

  4. [技术博客]Pyqt中View类别容器和Widget类别容器的区别

    Pyqt中View类别容器和Widget类别容器的区别 简介 在beta迭代中,我们选择用pyqt5来重写alpha迭代中使用tkinter库编写的界面. ​ 按钮之类的与tkiner使用无异,在显示 ...

  5. C++中实现对map按照value值进行排序 - 菜鸟变身记 - 51CTO技术博客

    C++中实现对map按照value值进行排序 - 菜鸟变身记 - 51CTO技术博客 C++中实现对map按照value值进行排序 2012-03-15 15:32:36 标签:map 职场 休闲 排 ...

  6. [技术博客] 自制 apt deb Repository

    [技术博客] 自制 apt deb Repository (termux) 在修改整合遵循GPLv3的Android terminal app and Linux environment:termux ...

  7. 创建GitHub技术博客

    创建GitHub技术博客全攻略 githubio技术博客网站生成 说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字.本 ...

  8. [福大软工] Z班——个人技术博客评分

    个人技术博客 作业地址 https://edu.cnblogs.com/campus/fzu/SoftwareEngineering2015/homework/1070 作业要求 个人技术博客单次作业 ...

  9. 【技术博客】Django中文件下载的实现

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. Django中文件下载的实现 1.背景 在VisualPy ...

随机推荐

  1. 服务上的图片直接在浏览器上可以打开,但是在img上报404错误处理方法

    在index.html中添加代码如下 <meta name="referrer" content="no-referrer" /> 如果还是存在问题 ...

  2. Python - 实现矩阵转置

    有个朋友提出了一个问题:手头上现在有一个二维列表,比如[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],现在要把该二维列表变成为[[1, 4, 7, 10 ...

  3. 升级.net core 3.x 后mvc项目调试状态编辑view代码不能实时预览

    https://stackoverflow.com/a/58126955 简单来说 需要在nuget上安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilati ...

  4. I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2

    遇到了这个问题,意思是你的 CPU 支持AVX AVX2 (可以加速CPU计算),但你安装的 TensorFlow 版本不支持 解决:1. 如果是初学者 或者 没有太大计算速度的需求,在开头加上这两行 ...

  5. JUnit 4.x 与 5.x 的区别?

    区别项 4.x 5.x 手动把测试和测试方法声明为public 需要 不需要 @Test 与JUnit 4的@Test注解不同的是,它没有声明任何属性,因为JUnit Jupiter中的测试扩展是基于 ...

  6. 跑起来JEE论坛、商城和网站的经验总结

    前言:昨天我们老大给我分配了几个任务,让我把几个公司的项目运行起来跑一下,几个项目都是JEE上开源的,三个项目,一个网站内容系统.一个BBS论坛.一个jspgou商城,这三个都是开源的,倒腾了两天,今 ...

  7. Servlet 容器

    Servlet容器主要是JavaWeb应用提供运行时环境,所以也可以称之为JavaWeb应用容器,或者Servlet/JSP容器.Servlet容器主要负责管理Servlet.JSP的生命周期以及它们 ...

  8. 编程语言与dsl

    通用编程语言面向的是计算机通用功能: 即数据.计算.资源管理及数据与计算的组合方式: 数据与计算.计算与计算的组合方式是通用语言的问题域,是通用编程语言的在计算机硬件的基础上对问题解决通用描述方式: ...

  9. js 对小数进行格式化(保留小数,去除小数后的0)

    // 如果去零时需要保留位数: (比如 19.520100 --> 19.52) parseFloat(Number(19.520100).toFixed(2)) // 如果只想去除小数点后多余 ...

  10. HDU 6091 - Rikka with Match

    思路 树形dp,设计状态如下: 设 $dp_u_i_0$表示 以点 u 为根的子树 最大匹配数模 m 为 i 时,且 u 点没有匹配的方案数 DP[u][i][1] 表示 以点 u 为根的子树 最大匹 ...