使用的是Docker Toolbox,非Docker for Windows
一、docker的认识与安装(windows安装)
http://blog.csdn.net/tina_ttl/article/details/51372604
http://www.linuxidc.com/Linux/2016-07/133506.htm
为什么 Docker Toolbox 需要 VirtualBox?Linux 上面可以直接安装 Docker,在 Windows / Mac 需要 Docker Toolbox?
因为Docker 的实现高度依赖 Linux kernel 的 cgroup,namespace 等特性和接口,这些是目前 windows 和 osx 没有的,简单的解决方法之一就是起个虚拟机跑 linux,然后把 docker 跑在虚拟机的linux之上。
win7/8运行docker是用boot2docker了,你要知道boot2docker是基于virtualbox的
官方版Docker for windows 10 是基于稳定的Hyper V 运行的一个linux vm 再来运行docker的,对外也提供了docker 命令的封装,用到了一个多月下来感觉是很稳定的
1.1镜像,容器,仓库
首先,需要了解一下几个概念:镜像,容器,仓库
镜像(image):Docker 镜像就是一个只读的模板,镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。镜像是一种文件结构。Dockerfile中的每条命令都会在文件系统中创建一个新的层次结构,文件系统在这些层次上构建起来,镜像就构建于这些联合的文件系统之上。Docker官方网站专门有一个页面来存储所有可用的镜像,网址是:index.docker.io。
容器( Container):容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境,Docker 利用容器来运行应用。
仓库:仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。目前,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
1.2Docker定义
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。Docker是一个重新定义了程序开发测试、交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是Docker提出的"Build once,Run anywhere"
Docker仓库用来保存我们的images,当我们创建了自己的image之后我们就可以使用push命令将它上传到公有或者私有仓库,这样下次要在另外一台机器上使用这个image时候,只需要从仓库上pull下来就可以了。注意:Docker不是容器,而是管理容器的引擎!
Docker中文手册上解释说:Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
从这里我们可以看出,Docker并非是容器,而是管理容器的引擎。Docker是为应用打包、部署的平台,而非单纯的虚拟化技术。
二、
Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上
2.0 安装docker machine
以标题的形式把整个流程讲一遍,但是真正安装docker时,
我是参照的http://blog.csdn.net/tina_ttl/article/details/51372604 与 http://www.linuxidc.com/Linux/2016-07/133506.htm
2.1 在VirtualBox中创建虚拟机(创建docker主机)
下图的命令是用docker-machine
命令创建一个 VirtualBox 虚拟机
--driver virtualbox
选项表示我们要在 VirtualBox 的虚拟机里面部署 docker ,defalut是虚拟机的名字(docker主机的名字)
2.1 这台docker machine创建后就启动了,如果下次我们再打开电脑,想要启动docker machine,可以打开Docker Quickstart Terminal或者Git Bash,然后执行下面的命令:
docker-machine start
来启动docker machine。
2.2 Docker Quickstart Terminal中:,也可以在Git Bash中运行:
docker-machine ls (查看所有docker主机)
这里面就是一个linux风格的Docker环境,提示的IP:192.168.99.100就是Docker虚拟机的IP了。(docker主机的ip)
2.3 管理docker主机
现在我们可以随心所欲地使用上述的 docker-machine 命令来不断创建docker主机(在virtualBox中为虚拟机)了。
当你使用完 docker 时,可以运行 docker-machine stop 来停止所有主机,如果想开启所有主机,运行 docker-machine start。
# docker-machine stop
# docker-machine start
你也可以只停止或开启一台主机:
$ docker-machine stop defalut
$ docker-machine start
defalut
2.4利用ssh软件登录docker machine
SSH登录虚拟机(此处使用的XShell软件,自行百度下载,当然还有其他的ssh软件):
docker machine的IP是192.168.99.100,用SSH工具登录它,用户名是docker
,密码是tcuser
2.5总结
最后,我们使用 Docker Machine 成功在 VirtualBox 上创建并管理一台 Docker 主机。Docker Machine 确实能让用户快速地在不同的平台上部署 Docker 主机,就像我们这里部署在 VirtualBox 上一样。这个 virtualbox 驱动可以在本地机器上使用,也可以在数据中心的虚拟机上使用。Docker Machine 驱动除了支持本地的 VirtualBox 之外,还支持远端的 Digital Ocean、AWS、Azure、VMware 以及其它基础设施。
我觉得是因为windows不支持Docker,所以采用将Docker主机部署在VirtaulBox上的方法。Docker容器是在VirtualBox的虚拟机里面,不是在Windows里面
三、
我们需要了解一个概念,就是现在我们有了两个系统,一个 windows 系统即我们直接操作的图形界面系统,我们称为主机,在主机上安装了VirtualBox
,该软件内有 linux 虚拟机,称为docker主机(docker machine),在 docker 主机中我们之后还会创建 linux 系统,称为容器。
可以通过终端显示的用户名@计算机名来区分
参考: https://www.jianshu.com/p/d809971b1fc1
四、(镜像加速)
在国内使用Docker Hub的话就特别慢,为此,我们可以给Docker配置国内的加速地址。我看了一下,DaoCloud和阿里云的镜像加速还不错,另外还有网易的蜂巢。选一个就行了。
以DaoClound为例,注册账号,然后在https://www.daocloud.io/mirror 就可以看到DaoClound提供给您的镜像加速的URL。然后到PowerShell中去依次执行:
(结合DaoClound的使用方法,参考:https://www.cnblogs.com/luwenbin/p/5590655.html)
在Docker Quickstart Terminal中:(我用的阿里云)
docker-machine ssh default
sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile
exit
docker-machine restart default
这样重启Docker后就可以用国内的镜像来加速下载了。
试一下下载一个mysql看看快不快:
docker pull mysql
下载完镜像,我们运行一个容器:
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123 mysql:latest
接下来我们打开windows下的mysql客户端,服务器地址填docker虚拟机的IP地址,通过docker-machine env可以看到,我这里是192.168.99.100,然后用户名root,密码123,这样我们就可以连接到docker容器里面的mysql了。
【注意,Docker容器是在VirtualBox的虚拟机里面,不是在Windows里面,所以不能用127.0.0.1访问】
五、
简单解释镜像是什么。在使用Docker的时候,你需要构建很多镜像,它们可能是Nginx镜像,Nginx + PHP + MySQL镜像,Cassandra镜像,或者只是一个简单纯粹的Linux镜像。这些镜像就像软件安装包,你可以到处使用,随时随地的使用任何一个镜像,将镜像变成容器。镜像和容器的关系就像:安装包和安装好的软件的关系。如果你觉得你的某个IDE因为某些莫名的原因不好用了,你会选择卸载重装,Docker也是你这个思路。
docker run命令有两个参数,一个是镜像名,一个是要在镜像中运行的命令。