• [技术博客]windows中使用docker技术


    背景

    我们的工程使用了一个叫做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
    
  • 相关阅读:
    字符串比较,栈溢出引起的程序bug
    C语言实现的矩阵乘法运算器
    n阶魔方阵(奇数阵)的输出
    文件的上传和下载---以图片为例
    数据列表的分页显示---前端及后台
    表单重复提交的解决方法
    JAVA基础----持续更新
    Servlet---基础、转发重定向、编码问题解析
    JDBC的链接及封装
    com.mysql.jdbc.connection和java.sql.connection的区别
  • 原文地址:https://www.cnblogs.com/bingduoduo/p/10918022.html
Copyright © 2020-2023  润新知