首先 理清一下 docker 里面的 image ,container, machine关系
Image(镜像) 可以用命令 docker images列出来
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
我这里面是没有镜像的
Containe(容器) 可以用命令 docker ps列出来
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
我这里面也没有容器的
Machine(可以理解为虚拟机) 可以用
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default*virtualbox Running tcp://192.168.99.100:2376 v1 .12.5
我这里面有一个运行的default
Machine 与 images Containe
Docker 只能运行在linux 环境,所以在window上需要安装虚拟器,其实就是你现在用的docker是跑在虚拟机上的,就是Machine,这个是使用VBoxManage
创建的,所以不用Oracle VM VirtualBox管理工具,就是这个
其实当你第一次打开docker 终端时,他就帮你创建了一个 命名为 default的虚拟机,在Oracle VM VirtualBox上可以看得见。
所以Machine 的理解是所有docker 的活动都是跑在虚拟机上的,就是你安装的images保存在虚拟机上,新建的 Containe 运行在虚拟机上。
images 和 containe
Images 跟我们创建虚拟器用的镜像 iso 一样,containe 的创建也是需要 images
我们需要使用docker 来部署 mysql
,mongodb
,php
,nginx
等等的环境就是启动他们对应的containe(容器),但是这些容器的启动需要镜像,所以我们可以使用 Ubuntu镜像为例子,就是这样, 我下载了 Ubuntu
镜像,以它来创建containe,在这个运行的containe上安装mysql
,mongodb
,php
,nginx
等等,然后这个安装好需要软件(…服务)的containe跑在
Machine(default 虚拟机)上。就是这么一回事
镜像可以用dockerfile 创建 或 远程仓库 pull 下来
现在pull 一个ubuntu 镜像
$docker pull daocloud.io/ubuntu
注意上面 的daocloud.io是国内的一个镜像
你也可以$docker pull ubuntu
然后
$ docker images
REPOSITORY TAG IMAGE ID CREATED
SIZE
daocloud.io/ubuntu latest f49eec89601e 9 weeks ago
129.5 MB
可以看到,接着用 这个ubuntu镜像创建 容器
$ docker run -it --name nginx-ubuntu -p 80:80 daocloud.io/Ubuntu
上面的命令
-it就是以交互模式运行容器,和为容器重新分配一个伪输入终端,简单点就是创建并且进入容器吧,能输入命令行那种
–name 就是为容器添加一个新名字吧
-p 端口对应
daocloud.io/Ubuntu 就是使用镜像名
然后创建成功后自动进入容器
按快捷键 ctrl + p + q ,可以退出容器,然后
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
087e043accce daocloud.io/ubuntu "/bin/bash" 6 minutes ago
Up 4 minutes 0.0.0.0:80->80/tcp nginx-ubuntu
看到运行着容器(Up 4 minutes 表示开启了4分钟)
重新连接docker attach nginx-ubuntu
ps:好像什么都没出来,但是你打点什么 ,例如 clear 就出来了
在这里面就像一台真正的ubunt一样
你可以运行 安装管理器 安装你所有想要的命令,例如我想安装 nginx ,为保持容器(containe)整洁vim 一般不安装,我这为里方便
$ apt-get update
$ apt-get install vim
$ apt-get install nginx
$ nginx
ps: http://192.168.99.100/ 怎么来的,用命令 docker-machine ip 可以查看,这回事对应虚拟机的ip
一般会保存在我们的虚拟里面,就是
而且这东西在 C 盘上,随着时间,你会安装越来越多的镜像,C盘迟早也会满的,
所以要把这些镜像移到其他盘保存,就是把虚拟机移到其他盘
1 首先 复制 dist.vmdk 到你需要保存它的磁盘
例如我的docker 默认会再
C:\Users\Administrator\.docker\machine\machines\default
上保存 default
虚拟器磁盘。
我把他复制到E盘
然后需要做一步,重要!重要!总要!不然会出错的
到 VirtualBoxv安装目录,终端…运行
VBoxManage internalcommands sethduuid " E:\vm\docker-vm\disk.vmdk"
E:\vm\docker-vm\disk.vmdk
是我刚刚在docker 默认帮我设定在
C:\Users\Administrator\.docker\machine\machines\default
里面的disk.vmdk
拷贝到的新目录,就是你需要保存镜像的新目录
成功会有
UUID changed to: bfd5674e-f134-4b35-89c2-1a5e15fbf8d7
之类的提示
然后打开Oracle VM VirtualBox
右键default 虚拟机打开设置 到储存界面选中 disk.vmdk,右键删除盘片-
再新添加盘片,选中我刚刚新copy到的目录
E:\vm\docker-vm\disk.vmdk
当然,上面的 boot2docker.iso 也可以移出C盘的,方法一样。
然后你每次 pull 的 images镜像都是保存在新路径了,不用担心 C 盘爆满