可参考学习地址: 极客学院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. Git submodule 仓库中包含另外的仓库(子仓库)

    Git submodule 仓库中包含另外的仓库(子仓库) 添加 submodule 在父仓库 git 目录下: git submodule add ssh://ip/[path]/xxx.git 注 ...

  2. Linux 文件夹相关常用命令

    Linux 文件夹相关常用命令 查看 ls -la -l 列出详细信息 -a 列出全部,包括.和.. 删除 rm <folder> -rf  -r  就是向下递归,不管有多少级目录,一并删 ...

  3. Tallest Cow POJ - 3263 (区间点修改)

    FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positi ...

  4. Codeforces 1118F1 Tree Cutting (Easy Version) (简单树形DP)

    <题目链接> 题目大意: 给定一棵树,树上的点有0,1,2三中情况,0代表该点无色.现在需要你将这棵树割掉一些边,使得割掉每条边分割成的两部分均最多只含有一种颜色的点,即分割后的两部分不能 ...

  5. HDU 3639 Hawk-and-Chicken (强连通缩点+DFS)

    <题目链接> 题目大意: 有一群孩子正在玩老鹰抓小鸡,由于想当老鹰的人不少,孩子们通过投票的方式产生,但是投票有这么一条规则:投票具有传递性,A支持B,B支持C,那么C获得2票(A.B共两 ...

  6. Stm32基础

    Stm32基础 目录 常用功能函数 跑马灯实验 蜂鸣器实验 按键实验 端口复用与重映射 常用功能函数 初始化gpio函数 作用:初始化一个或者多个io口(同一组)的工作方式和速度该函数主要是操作GPI ...

  7. chrome插件的开发

    基本目录:icon,manifest,html,js. chrome插件的使用,运行,打包. chrome浏览器打开扩展,勾选开发者模式,点击加载没打包的扩展,选中目录,加载插件. 右上角出现插件图标 ...

  8. jmeter使用Beanshell预处理器从指定列表中获取随机值

    变量mynation从列表{"china", "US", "UK"}中随机取值 String[] nation = new String[] ...

  9. CodeForces round 967 div2 题解(A~E)

    本来准备比完赛就写题解的, 但是一拖拖了一星期, 唉 最后一题没搞懂怎么做,恳请大神指教 欢迎大家在评论区提问. A Mind the Gap 稳定版题面 https://cn.vjudge.net/ ...

  10. Codeforces.662C.Binary Table(状压 FWT)

    题目链接 \(Description\) 给定一个\(n\times m\)的\(01\)矩阵,你可以选择一些行和一些列并将其中所有的\(01\)反转.求操作后最少剩下多少个\(1\). \(n\le ...