设为首页 收藏本站
查看: 1131|回复: 0

[经验分享] Docker在windows下的使用【二】

[复制链接]

尚未签到

发表于 2017-6-29 10:19:11 | 显示全部楼层 |阅读模式
  可参考学习地址: 极客学院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¨
  具体的图示如下:
DSC0000.jpg

  此时,再进入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的信息
DSC0001.jpg



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

4. 查看正在运行的container

sudo docker ps
  显示的信息如下:

Container IdIMAGEcommandCreatedstatusportsnames



container的ID
生成该container的image的名称

生成该container的时间
该container的状态

ContainerName(自动分配)

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

sudo docker exec -it containerName bash
  图例:
DSC0002.jpg

  (1)ls
列出docker container下的文件夹
DSC0003.jpg
  可以看到,在container的ls文件夹下,有两个文件夹,分别为caffe和workspace
  (2) cd..
返回到当前文件夹opt的上一级文件夹
并且列出该文件夹下的所有文件ls
DSC0004.jpg
  可以看到该container的所有文件夹
  (3)这里应该注意:


  • 由于前面的命令:

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


  • 由于前面的命令:

-v `pwd`/data:/root/data
  使得本机的当前路径`pwd`下的data文件夹与docker container中的root文件夹下的data发生映射关系
DSC0006.jpg

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389230-1-1.html 上篇帖子: 【终极解决方案】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 下篇帖子: 初探Windows用户态调试机制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表