Docker在windows下的使用【二】

可参考学习地址: 极客学院docker教程,还不错,可以参考

1.Dockerhub下载镜像

下载地址:Dockerhub地址

有两种方式可以获得新的镜像

  • 直接从dockerhub下载编译好的image(该编译过程在docker hub的云端完成)(见3.1)
  • 下载docekrfile文件,在本机进行build

直接在dockerhub上pull pre-built image

在terminal中输入如下命令:

sudo Docker pull tingtinglu/docker

注: 
① tingtinglu/docker是dockerhub上的pre-built image的名字 
② 如何获取pre-built image的名字?需要在dockerhub上搜索自己需要的image

下载dockerfile文件,在本机进行build

详细介绍见docker的官方文档:build your own image,介绍来如何利用dockerfile编译自己的镜像

(1)获取dockerfile(即下载名称为dockerfile的文件,内容为构造docker的一些命令)

(2)利用terminal的cd命令进入到dockerfile所在的文件夹

(3)在名称为“dockerfile”的文件所在的文件夹下(即terminal cd到该文件夹),执行如下命令

docker build -t ImageName .

注1:ImageName是利用dockerfile生成的image的name(自行设置) 
注2:不要忘记ImageName后面的点“.”

利用Dockerfile文件对已存在的image做某些更改

有时候,已经得到了一个image,但需要往该image中做新的更改,例如,想要在docker的opt路径下添加一个新的路径workspace,此时,可以通过dockerfile进行,方法如下:

① 新建一个dockerfile,添加如下内容

RUN mkdir /opt/workspace

② 利用terminal进入该dockerfile所在路径,然后,built该dockerfile,即执行如下命令:

docker build -t ImageNameOld

一定要注意,这里的ImageNameOld是你想要添加该变化的那个image的名字

2.利用下载的镜像生成容器

在命令行中输入类似如下的命令:

sudo docker run -it --rm -p 8888:8888 -v `pwd`/workspace:/opt/workspace -v `pwd`/data:/root/data tingtinglu/deepdock

下面对该条命令进行剖析

(1)-p 8888:8888 
将docker中的jupyter的8888接口与本机的8888接口关联

(2)-v `pwd`/workspace:/opt/workspace 
将当前路径下(由`pwd`)的workspaace文件夹映射到docker中的opt路径下的的workspace文件夹,这样,docker下的opt/workspace就指向来本机的`pwd`/workspace文件夹;

要实现该目的,还有一个办法:利用terminel进入到本机的workspace路径下,然后: -v ¨$(pwd):/opt/workspace¨

具体的图示如下:

此时,再进入docker后,docker的/opt/workspace/中的内容就变为的本机的workspace中的内容; 
可以认为,无论原来docker的/opt/workspace中是否由内容,现在该workspace的内容都被本机的workspace覆盖来,即docker的opt/workspace此时不再指向daocker中的opt/workspace,而只是指向本机的workspace文件夹

(3)有时,docker可能不能上网,那么,可以加入--net=host,即完整的命令如下:

sudo docker run -it --rm -p 8888:8888 --net=host -v `pwd`/workspace:/opt/workspace -v `pwd`/data:/root/data tingtinglu/deepdock

(4)如果是windows系统,那么,文件夹映射需要绝对路径 
即需要如下命令:

sudo docker run -it --rm -p 8888:8888 --net=host -v `pwd`/workspace:/root/opt/workspace -v `pwd`/data:/root/data tingtinglu/deepdock

并且,windows目前只支持C盘!一定要注意!

注:docker的指令模式是:标示+参数,即:[sudo] docker [flags] [command] [arguments]

eg.: docker run -i -t ubuntu /bin/bash

3.查看本机的docker images

sudo docker images

会得到本机的所有images的信息

  • 第一列是docker image的名称
  • 第二列是该image的tag(同一个image有时需要进行多次更改,为了区分不同版本image的区别,为image赋予了一个tag)
  • 第三列是docker image的ID
  • 第四列是该docekr image的创建时间
  • 第五列是该docker image的大小

4. 查看正在运行的container

sudo docker ps

显示的信息如下:

Container Id IMAGE command Created status ports names
container的ID 生成该container的image的名称   生成该container的时间 该container的状态   ContainerName(自动分配)

5. 以bash模式进入正在运行的docker

sudo docker exec -it containerName bash

图例: 



(1)ls 
列出docker container下的文件夹 

可以看到,在container的ls文件夹下,有两个文件夹,分别为caffe和workspace

(2) cd.. 
返回到当前文件夹opt的上一级文件夹 
并且列出该文件夹下的所有文件ls 

可以看到该container的所有文件夹

(3)这里应该注意:

  • 由于前面的命令:
-v `pwd`/workspace:/opt/workspace 

使得本机的当前路径`pwd`下(`pwd`为生成docker container时所在的路径)下的workspace文件夹与docker container中的opt文件夹下的workspace发生映射关系 

  • 由于前面的命令:
-v `pwd`/data:/root/data

使得本机的当前路径`pwd`下的data文件夹与docker container中的root文件夹下的data发生映射关系 

6. 将一个容器保存为image

如果对docker的做了一些更改,并且,这些更改不是安装了jupyter这样的软件,而只是安装了一些package,那么,保存新的镜像只需要:

sudo docker commit containerID newImageName

containerID为要保存的容器的ID,newImageName为新image的名字 
例如:ting/caffe:version1这样的名字,其中,version1为新容器的flag,可以用来标识新image的版本信息

7. 从已经创建的容器中更新镜像,并且提交这个镜像

  • 在容器中进行相应的更改 
    例如:apt-get install wget
  • 将容器保存为新的镜像 
    sudo docker commit containerID newImageName:tag

8. 删除/停止等命令

  • 从主机中移除镜像 
    sudo docker rmi 镜像名称
  • 停止正在运行的container 
    sudo docker stop containerName
  • 移除某个container 
    sudo docker rm containerID

注:输入ID时,不必须输入完整的ID,一般输入前几个字符便可以识别出

各种错误记录

Error response from daemon: conflict: unable to delete 40787553f761 (must be forced) - image is being used by stopped container 8a1faaf9d24b

  • 该问题的原因是:由image-40787553f761生成的container(ID:8a1faaf9d24b)仍旧存在
  • 但利用sudo docker ps,却无法显示container-8a1faaf9d24b,因为该container-8a1faaf9d24b虽然没有在运行,但它仍然存在,所以必须将其移除
  • 解决办法:利用docker rm <containerid>8a1faaf9d24b将该container移除

Cannot connect to the Docker daemon. Is the docker daemon running on 
this host?

  • 需要用到sudo

其他注意事项

1.最近发现,自己本机的镜像有许多是none,经过查询发现原因可能是:

重复pull同一个tag的镜像,并且,在pull新的镜像时(与本机已有的旧镜像具有相同的tag),旧镜像已经被容器占用,那么,在pull新镜像后,之前被占用的旧镜像就会变为none

2.在本机书写dockerfile,该dockerfile用到了本机的镜像A(From A),利用该dockerfile build 镜像B,那么,镜像B被称为镜像A的child

时间: 2024-08-10 23:30:10

Docker在windows下的使用【二】的相关文章

Docker在Windows下的安装以及Hello World

本文主要介绍Docker在Windows下的安装.关于Docker的介绍和文档在其官网中可以找到:http://www.docker.com .安装环境:Windows7. Docker引擎使用了一个定制的Linux内核,所以要在Windows下运行Docker我们需要用到一个轻量级的虚拟机(vm),我们使用Windows Docker客户端以控制Docker引擎,来创建,运行和管理我们的Docker容器(关于Docker引擎,容器等具体概念请参考官网). 安装步骤 第一步: 首先到https:

解决 docker on windows下网络不通

问题:公司有一台闭置的windows服务器,于是想利用起来,但是在启动容器后始终无法通信成功. 研究: 1. 发现安装包中包含virtualbox, 于是怀疑windows下的docker是在virtualbox中run了一个DOCKER虚拟机(额外思考一下,你自己构建的容器运行在virtualbox的docker里,跟linux下直接运行在docker里是否多了一层?性能是否会有损失?) 2. 启动virtualbox, 果然有个新建并且在运行的虚拟机 3. 尝试修改:在虚拟网卡中添加转发 注

docker在windows下上传文件到容器

我的系统是windows10,docker是用DockerToolbox工具安装的,安装完之后会默认挂载Windows的C:/Users目录,在docker里面对应路径是/c/Users,docker默认的用户路径是/c/Users/windows的登录用户名,对应windows的登录用户目录:C:/Users/windows的登录用户名. 登录Docker Quickstart Terminal之后的默认用户路径是/c/Users/windows的登录用户名,对应windows系统下的路径是C

【Docker】Windows下docker环境搭建及解决使用非官方终端时的连接问题

https://www.cnblogs.com/Detector/p/9354539.html 背景 时常有容器方面的需求,经常构建调试导致测试环境有些混乱,所以想在本地构建一套环境,镜像调试稳定后再放到测试环境中. Windows Docker 安装 安装docker toolbox 博主的电脑是win7,安装的时候使用的是阿里云的docker toolbox镜像. 这里有必要介绍一下docker toolbox,它 是一个工具集,它主要包含以下内容: Docker CLI 客户端,用来运行d

windows 下使用makefile(二)---- 编译

之所以需要另外设定" 执行时需要="" mspdb60.dll,而它被安装於="" c:\msdev\common\msdev98\bin="" 之中.<="" p><p>如果你写的程式不只是单纯的="" 程式,还用到了="" mfc,一样可以在="" console="" mode="" 下编

Windows下多线程编程(二)

线程的分类 1.     有消息循环线程 MFC中有用户界面线程,从CWinThread派生出一个新的类作为UI线程类CUIThread,然后调用AfxBeginthread(RUNTIME_CLASS(CUIThread));启动线程.UI线程可以直接创建模态对话框,而不用担心消息循环的问题,因为UI线程默认自带消息循环. MFC非用户界面线程,不能创建模态对话框,但是可以创建非模态对话框或普通窗口,但是必须自己写消息循环. MSG msg; while(GetMessage(&msg, NU

windows下docker使用及注意事项

1.windows container模式下,pull镜像会失败 no matching manifest for windows/amd64 in the manifest list entries 2.windows container模式下会存在问题,再次切换到linux container模式下,启动会出现问题 out of memory 3.解决memory问题 右击docker状态栏的图标,选择设置(settings),再将advanced下的memory从2048修改为1280,自

Linux和Windows下查看环境变量方法对比

一.查看所有环境变量的名称和值: Linux下:export Windows下:set 二.根据名称查该环境变量的值: Linux下:echo $环境变量名 如:echo $ORACLE_HOME Windows下:set环境变量名 如:set $ORACLE_HOME 三.设置环境变量: Linux下:export环境变量名=值 如:$export ORACLE_HOME=/home/oracle/product/10.2.0 Windows下:set环境变量名=值 如:>set Path=d

Docker windows下安装,Build和Run的步骤及注意事项

一.关于Docker 什么是Docker?Docker 采用go语言编写,是一个开源的应用容器引擎.让开发者可以快速打包他们的应用以及依赖包到一个封装的可移植的容器Image中,然后发布到任何流行的机器( Linux ,windows,Mac等)上,也可以实现虚拟化.容器是使用完全独立的沙箱机制,相互之间不会有任何接口.可以同时运行多个Container,且相互独立各不干扰,对于多环境下的系统测试非常有用,但是Docker的应用远不止此. 二.安装 1. Windows 7系统下建议使用Dock