一、安装docker
本文主要介绍Windows上利用 docker toolbox 来安装docker,可以使用阿里云的镜像来安装,
镜像地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/
1.安装镜像
下载完成之后直接点击安装,安装成功后,桌边会出现三个图标,入下图所示:
其中VirtualBox提供了linux虚拟机的运行环境,Docker Quickstart Terminal用于进入linux虚拟机,提供命令行交互,Kitematic是docker GUI很少用到。
2.安装docker
点击 Docker QuickStart 图标来启动 Docker Toolbox 终端。
如果系统显示 User Account Control 窗口来运行 VirtualBox 修改你的电脑,选择 Yes。
第一次运行Docker Quickstart Terminal时会进行Docker环境的初始化,会在VirtualBox中自动创建名字为【default】的linux虚拟机,再此过程中会用到boot2docker.iso镜像文件。boot2docker是基于 Tiny Core Linux 的轻量级Linux发行版,专为 Docker准备,完全运行于内存中,24M大小,启动仅5-6秒。
默认情况下,启动程序会从GitHub上下载此文件的最新版,但经常会下载失败,造成Docker环境无法启动。
如果下载成功,会进入下图界面:
如果自动下载失败,可以先借助第三方下载工具下载boot2docker.iso,之后将下载好的镜像放到上图所示路径中(如:C:\Users\Administrator\.docker\machine\cache\boot2docker.iso),再运行Docker Quickstart Terminal,程序检测到本地已经有boot2docker.iso之后会使用本地的镜像。
注意:安装前需要确保bios中打开xt-v/amd64-v虚拟化支持,否则会出错。
3.更改虚拟磁盘存储位置
虚拟机的默认存储位置是C:\Users\Administrator\.docker\machine\machines ,后期docke镜像文件会不断增加,为了给系统盘减负,最好将磁盘移动到其他位置。
安装完成之后虚拟机时默认启动的,要改变磁盘磁盘存储位置,需要先停止虚拟机,可以通过Docker Quickstart Terminal,也可以使用Windows自带的PowerShell工具。
例如:通过PowerShell或cmd终端中执行【docker-machine stop default】命令停止default虚拟机
通过VirtualBox【管理】-》【虚拟介质管理】界面对虚拟磁盘进行复制
需要注意虚拟磁盘类型的选择
选择分配方式(此处我选择的动态分配),复制disk.vmdk到待存储的位置(如D:\Docker),复制完成之后关闭窗口。
点击“设置-->存储”,右键删除disk.vmdk
为虚拟机添加新复制的虚拟磁盘
通过PowerShell或cmd终端中执行【docker-machine start default】命令启动停止的default虚拟机, 通过执行【docker-machine ssh default】进入到虚拟机。
4.Windows文件目录共享给docker 容器
停止虚拟机,新建D:\DockerToolbox\workspace目录:
将这个目录挂载到docker 的虚拟机下面:设置 -> 共享 -> 添加共享文件夹
默认共享文件夹是workspace,此处我改为data:
启动虚拟机,然后进入虚拟机default :
执行【df】可以看到再虚拟机里共享文件夹已经自动挂载。
到这一步只是将Windows文件夹共享给虚拟机,还需要将虚拟机文件夹data共享给容器才行(下面会说明)。
5.容器ssh服务访问
因为docktools使用了虚拟机做为载体。虚拟机默认虚拟ip是192.168.99.100,所以从其他机器不能直接访问虚拟机,容器依赖虚拟机宿主,所以也不能直接访问。
【Windows ---- VBox(linux虚拟机) ---- 容器】
以ssh服务为例 ,默认主机ip的22端口是访问的是Windows主机(192.168.21.14)
如果访问虚拟机,需要把主机ip的某个端口映射到虚拟机22好端口。
如下图,点击“设置--->网络--->网卡1--->端口转发”,可以看到默认已经配置好了一个名为ssh的规则,这也是指令【docker-machine ssh default】能够登陆到虚拟机的原因,(但这样只能支持Windows本机访问)。
如图规则VM 把ip为192.168.21.14的主机的57211端口映射到了22端口
这样局域网中其他机器就可以使用57211端口ssh连接到虚拟机进行管理虚拟机内的镜像和容器。
Windows主机映射一个端口到虚拟机,再使用虚拟机的8010端口映射到容器的22端口。这样“Windows IP:8010” == “虚拟机IP:8010” == “容器IP:22”,访问"Windows IP:8010"就相当于直接访问"容器IP:22",就可以使用ssh连接到容器了。
二、Docker使用
本文以centos7镜像为例说明:
1.下载及启动容器
使用指令【docker pull centos:7】拉取centos7镜像,【docker images】可以查看本地已下载镜像。
【docker run -t -i -v /data:/soft -p 8010:22 centos:7 /bin/bash】运行容器(首次运行需要使用docker run指令设置一些参数,后面直接“docker start 容器ID”即可启动容器)。
【说明】
容器中会自动创建soft目录,这样容器就可以通过soft访问windows共享目录了;
使用-p把虚拟机端口8010映射到容器22端口;
”centos:7“为"镜像名:tag",也可以使用IMAGE ID代替,只是为了区分不通镜像;
如果不指定 /bin/bash,容器运行后会自动停止。
2.Docker中安装sshd服务
"sudo apt-get install openssh-server"-->回车-->输入"y"-->回车-->安装完成。
打开"终端窗口",输入"sudo ps -e |grep ssh"-->回车-->有sshd,说明ssh服务已经启动,如果没有启动,输入"sudo service ssh start"-->回车-->ssh服务就会启动
修改“/etc/ssh/sshd_config"
把配置文件中的"PermitRootLogin without-password"加一个"#"号,把它注释掉-->再增加一句"PermitRootLogin yes"-->保存,修改成功。
设置root密码123456,就可以使用root登陆了
3.将容器打包生产镜像Image
可看到,镜像Image依赖于容器Container
打包容器成镜像,保存自定义后的镜像:
docker commit -a "YourName" -m "My First Image" d9b1a8798289 centos7:v1
-a "YourName" 作者;
-m "My First Image" 简介;
d9b1a8798289 要打包的容器ID;
centos7 创建的镜像名;
v1 镜像版本;
4.常见docker命令
运行容器(根据镜像生产容器)
docker run --privileged -t -i -v /data:/soft -p 8010:22 centos:7 /bin/bash
退出容器 exit
进入容器 docker exec -i -t a9a30a0f138f /bin/bash
启动容器 docker start a2156e555711
停止容器 docker stop a2156e555711
删除容器 docker rm a2156e555711
删除镜像 docker rmi a8a2ba3ce1a3 (需要先把所有子镜像的容器删除)
查看容器 docker ps -a
查看镜像 docker images
打包容器 docker commit -a "YourName" -m "My First Image" d9b1a8798289 centos7:v1
进入容器也可以docker attach a9a30a0f138f