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
Docker在windows下的使用【二】的更多相关文章
- Docker在Windows下的安装以及Hello World
Docker引擎使用了一个定制的Linux内核,所以要在Windows下运行Docker我们需要用到一个轻量级的虚拟机(vm),我们使用Windows Docker客户端以控制Docker引擎,来创建 ...
- Docker学习のWindows下安装Docker
一.docker最初只支持linux的,因此在windows下运行需要虚拟机. 利用VirtualBox建立linux虚拟机,在linux虚拟机中安装docker服务端和客户端 利用Windows的H ...
- 解决 docker on windows下网络不通
问题:公司有一台闭置的windows服务器,于是想利用起来,但是在启动容器后始终无法通信成功. 研究: 1. 发现安装包中包含virtualbox, 于是怀疑windows下的docker是在virt ...
- 【Howie玩docker】-windows下玩docker
Windows下安装toolbox一直没成功,于是投机取巧,用虚拟机手工打造玩docker的方法. 步骤: 安装虚拟机,安装centos 在win下建立共享文件夹,假如是 f:/share 在cent ...
- Docker在windows下的使用【一】
1.windows按照docker的基本要求 (1)64为操作系统,win7或者更高 (2)支持“ Hardware Virtualization Technology”,并且,“virtualiza ...
- docker在windows下的安装
Docker for Windows会默认包含两个引擎containers(linux和windows) 1. 下载Docker for Windows,https://docs.docker.com ...
- docker 在Windows下使用遇到的坑
1.大部分系统不支持直接安装docker for windows,只能使用docker toolbox,相当于在Windows上安装了一个linux的虚拟机 2.启动docker toolbox的时候 ...
- 【Docker】Windows下docker环境搭建及解决使用非官方终端时的连接问题
背景 时常有容器方面的需求,经常构建调试导致测试环境有些混乱,所以想在本地构建一套环境,镜像调试稳定后再放到测试环境中. Windows Docker 安装 安装docker toolbox 博主的电 ...
- docker在windows下上传文件到容器
我的系统是windows10,docker是用DockerToolbox工具安装的,安装完之后会默认挂载Windows的C:/Users目录,在docker里面对应路径是/c/Users,docker ...
随机推荐
- 基于Keil软件的MCU环境搭建
我们在开发一款新的MCU的时候,偶尔会遇到Keil软件没有对应的Device设备选型,以下,我们以STM32F407VGT6作为实例来演示整个环境的搭建过程: 一.如下所示,我需要选择的是ST公司的S ...
- java分页实现
虽然现在有很多好用的框架,对分页进行支持,很简单的就把分页的效果做出来,但是如果自己手写是一个怎样的流程的?今天就来说说它,手动实现分页效果. 一.分页的思路 首先我们得知道写分页代码时的思路,保持思 ...
- HYSBZ 4034 【树链剖分】+【线段树 】
<题目链接> 题目大意: 有一棵点数为 N 的树,以点 1 为根,且树点有权值.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x ...
- Python语言说明
第一章:Python入门一.语言什么是语言:人与人之间的沟通计算机语言:计算机语言,即人和计算机之间的沟通语言. 按照级别分类:机器语言:最底层,最低级的语言,只能识别0/1,电平信号汇编语言:计算机 ...
- provisional headers are shown 知多少
前言 请求里面provisional headers are shown(显示临时报头) 出现的情况很多,但原因是多样的. 如果你去直接匹配关键字搜索,得到的结果可能与你自己的情况大相径庭. 网上大部 ...
- SpringMVC(十三) RequestMapping 使用servlet原生API作为参数
SpringMVC支持以下Servlet方法: HttpServletRequest HttpServletResponse HttpSession Writer Reader Locale Inpu ...
- 无可奈何的开始了jquery的“奇淫技巧”
转载请注明出处: https://home.cnblogs.com/u/zhiyong-ITNote/ 修改一个已有的项目,主要是前端方面,一般的项目后端都是处理好了的,不需要改也不能改,除非特殊需求 ...
- C# winform 弹出确认消息框
if (MessageBox.Show("确认删除?", "此删除不可恢复", MessageBoxButtons.YesNo) == DialogResult ...
- BZOJ.5461.[PKUWC2018]Minimax(DP 线段树合并)
BZOJ LOJ 令\(f[i][j]\)表示以\(i\)为根的子树,权值\(j\)作为根节点的概率. 设\(i\)的两棵子树分别为\(x,y\),记\(p_a\)表示\(f[x][a]\),\(p_ ...
- JavaScript基础笔记(一)基本概念
基本概念 一.语法 一)区分大小写 二)标识符 书写规则同Java 三)注释 略 四)严格模式 1.在整个脚本中启用严格模式:在顶部添加 "use strict" 2.指定函数在严 ...