可参考学习地址: 极客学院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下的使用【二】的更多相关文章

  1. Docker在Windows下的安装以及Hello World

    Docker引擎使用了一个定制的Linux内核,所以要在Windows下运行Docker我们需要用到一个轻量级的虚拟机(vm),我们使用Windows Docker客户端以控制Docker引擎,来创建 ...

  2. Docker学习のWindows下安装Docker

    一.docker最初只支持linux的,因此在windows下运行需要虚拟机. 利用VirtualBox建立linux虚拟机,在linux虚拟机中安装docker服务端和客户端 利用Windows的H ...

  3. 解决 docker on windows下网络不通

    问题:公司有一台闭置的windows服务器,于是想利用起来,但是在启动容器后始终无法通信成功. 研究: 1. 发现安装包中包含virtualbox, 于是怀疑windows下的docker是在virt ...

  4. 【Howie玩docker】-windows下玩docker

    Windows下安装toolbox一直没成功,于是投机取巧,用虚拟机手工打造玩docker的方法. 步骤: 安装虚拟机,安装centos 在win下建立共享文件夹,假如是 f:/share 在cent ...

  5. Docker在windows下的使用【一】

    1.windows按照docker的基本要求 (1)64为操作系统,win7或者更高 (2)支持“ Hardware Virtualization Technology”,并且,“virtualiza ...

  6. docker在windows下的安装

    Docker for Windows会默认包含两个引擎containers(linux和windows) 1. 下载Docker for Windows,https://docs.docker.com ...

  7. docker 在Windows下使用遇到的坑

    1.大部分系统不支持直接安装docker for windows,只能使用docker toolbox,相当于在Windows上安装了一个linux的虚拟机 2.启动docker toolbox的时候 ...

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

    背景 时常有容器方面的需求,经常构建调试导致测试环境有些混乱,所以想在本地构建一套环境,镜像调试稳定后再放到测试环境中. Windows Docker 安装 安装docker toolbox 博主的电 ...

  9. docker在windows下上传文件到容器

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

随机推荐

  1. dfs和bfs的区别

    详见转载博客:https://www.cnblogs.com/wzl19981116/p/9397203.html 1.dfs(深度优先搜索)是两个搜索中先理解并使用的,其实就是暴力把所有的路径都搜索 ...

  2. HDU 3594 Cactus (强连通+仙人掌图)

    <题目链接> <转载于 >>> > 题目大意: 给你一个图,让你判断他是不是仙人掌图. 仙人掌图的条件是: 1.是强连通图. 2.每条边在仙人掌图中只属于一个 ...

  3. hdu 3078 Network (暴力)+【LCA】

    <题目链接> 题目大意:给定一颗带点权的树,进行两种操作,k=0,更改某一点的点权,k!=0,输出a~b路径之间权值第k大的点的点权. 解题分析:先通过RMQ的初始化,预处理pre[]数组 ...

  4. Java Lambda基础——Function, Consumer, Predicate, Supplier, 及FunctionalInterface接口

    这几个接口经常与Lambda结合使用,网上当然也有很多介绍,不过有些过于繁琐,有些又偏简单,秉着实用主义精神,今天这里折中一下,把介绍的内容分为两部分,第一部分相当于TLDR,总结几个"口诀 ...

  5. SpringBoot整合elasticsearch

    在这一篇文章开始之前,你需要先安装一个ElasticSearch,如果你是mac或者linux可以参考https://www.jianshu.com/p/e47b451375ea,如果是windows ...

  6. for each ...in / for ...in / for...of

    参考博客: https://www.cnblogs.com/ruoqiang/p/6217929.html https://www.cnblogs.com/dupd/p/5895474.html 1 ...

  7. [ZOJ1482]Partitions

    [ZOJ1482]Partitions 题目大意: 给定一个\(n\times n(n\le3000)\)的\(\texttt 0/\texttt1\)矩阵,求去掉所有的\(1\)以后,矩阵被分成几个 ...

  8. [USACO08JAN]牛大赛Cow Contest

    OJ题号:洛谷2419 思路: Floyd求有向图的传递闭包,只要该点与其他所有点相连即可确定名次. #include<cstdio> #include<cstring> in ...

  9. C语言基础一(敲打键盘、寻找资料)

    事前声明一点:小编的所有材料都是基础,没有什么大的不同,您若觉得不错的话,可以互相探讨下,毕竟本人也是小雏鸟. 大家在学习C语言.C++类似的高端语言时候,往往都是为了学而学,殊不知为什么而学,或许更 ...

  10. Java中Iterator(迭代器)实现原理

    在Java中遍历List时会用到Java提供的Iterator,Iterator十分好用,原因是: 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结 ...