一、前言
docker是运行在linux操作系统上的,可以理解为linux操作系统上的一个软件
如果要在windows上运行docker的话,目前的话需要先跑一个linux的虚拟机,然后在该虚拟机里面装docker,然后使用这个docker容器来跑linux系统,好像有点绕的赶脚
docker也在和微软合作,相信不久支持windows的原生docker容器就会被开发粗来啦
二、安装
安装docker的话机器需要支持Intel VT虚拟化技术,具体可以看见这篇文章:http://blog.163.com/hypc_bevery@yeah/blog/static/92937163201161044713931/
下面就开始安装啦
首先去这个地址:https://github.com/boot2docker/windows-installer/releases/latest下载Docker for Windows Installer,这个会安装:Docker Client for Windows, VirtualBox, Git for Windows (MSYS-git), the boot2docker Linux ISO, and the Boot2Docker management tool
正如上面所说的,"要在windows上运行docker的话,目前的话需要先跑一个linux的虚拟机",所以会安装 VirtualBox,boot2docker Linux ISO这个是一个微型的linux操作系统,MSYS-git,是git的windows客户端,具体可以看我的另外一篇博客:Git初体验,为什么需要这个呢 ,因为需要从远程仓库里下载东西,通过后面的操作我们会看到
安装完成后,会在桌面上粗线2个快捷方式:Oracle VM VirtualBox和Boot2Docker Start
直接双击:Boot2Docker Start,会粗线一个标题有:MINGW32的命令行,这个可以在windows下模拟linux环境
上面的操作实际上是执行docker安装目录下的start.sh,该脚本主要是执行了下面的3个操作,最后一个在通过SSH连接的时候会用到
boot2docker.exe init
boot2docker.exe start
boot2docker.exe ssh
运行下面命令看是否正常:
docker version
运行:
docker run hello-world
这个命令会从远端下载一个非常小的image,并且会打印:Hello from Docker
三、通过CMD启动
添加环境变量:C:\Program Files (x86)\Git\bin,这个操作是必须的
执行:
boot2docker start
如果出错了,可以尝试执行
boot2docker init
然后,会提示让你执行类似下面的命令:
set DOCKER_HOST=tcp://192.168.59.103:2376
set DOCKER_CERT_PATH=C:\Users\whaon\.boot2docker\certs\boot2docker-vm
set DOCKER_TLS_VERIFY=1
如果你没有执行的话,后面的docker操作会提示如下错误:
Get http://127.0.0.1:2375/v1.19/images/json: dial tcp 127.0.0.1:2375: ConnectEx
tcp: No connection could be made because the target machine actively refused it.
. Are you trying to connect to a TLS-enabled daemon without TLS?
执行后,就阔以正常使用了,你可以尝试执行:
docker version
docker images
docker ps
、通过SSH来连接
前面说过,我们实际上是启动了一个linux虚拟机,那么我们当然阔以用ssh连接上去了
执行
boot2docker ip
来查看ip地址,一般都是192.168.59.103,用户名密码为:docker/tcuser
这样我们就愉快的连接上去了,可以正常使用常用的linux命令以及docker命令
五、在docker上运行linux(后面的操作 都以ubuntu为例)
上面说了三种可以操作docker的方式:mingw,cmd,ssh,看你喜欢用哪个
有2中方式可以安装并运行linux
第一种:我们执行:
docker run ubuntu echo hello world
这个会下载ubuntu,并且打印出hello world
然后运行:
docker run -i -t ubuntu
这样就进入ubuntu系统了
也可以直接通过下面的命令来运行,参数为镜像ID:
docker run -it 117efd3c1ae5
可以执行exit命令退出,这样的话这个ubunbu也就退出了,在docker ps中便不再显示了
第二种:
先下载:ubuntu-14.04-x86_64.tar.gz,然后上传到boot2docker linux系统中
然后执行:
cat ubuntu-14.04-x86_64.tar.gz |docker import - ubuntu:ubuntu14
然后运行:
docker run -i -t ubuntu:ubuntu14 /bin/bash
其实,我们也没必要先上传到boot2docker linux系统中,通过cmd或者mingw也可以完成,因为C:\Program Files (x86)\Git\bin这个目录下也有cat命令
六、提交
我们进入运行在docker上的linux后不免要进行很多操作,但是一旦我们退出来,下一次再进入该linux系统后操作是会丢失掉的,所以我们需要提交
先执行下面的命令来查看我们刚刚运行的那个docker的一些信息
docker ps -l
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
710e8c7dbc92 ubunbu:latest "/bin/bash" 4 minutes ago
Exited (0) 3 seconds ago fervent_bardeen
然后用下面的命令提交:
docker commit 710e8c7dbc92 ubunbu:latest
第一个参数是容器ID,第二个参数是镜像ID,如果不小心把第二个参数写错了,就会多出一个镜像,可以通过
docker images
来查看,删除镜像用下面的命令,参数为镜像的ID
docker rmi 117efd3c1ae5
七、安装SSH
下面我们在运行在docker容器中的linux(ubuntu)上安装SSH
apt-get update
apt-get install openssh-server
passwd root #输入用户密码
注意我们要允许root用户通过SSH来登录,所以必须要修改sshd的配置文件
vi /etc/ssh/sshd_confg
# Authentication:
LoginGraceTime 120
#PermitRootLogin without-password #找到这里,把它注释
PermitRootLogin yes #改为yes 然后重启ssh
StrictModes yes
然后启动
/etc/init.d/ssh start
#或者
service ssh start
我们先来查看下ip地址:
ifconfig
比如:172.17.0.97 注意此时我们不能退出来,否则该ubuntu也就会停止
所以我们重新打开一个客户端来连接,然后输入:
ssh root@172.17.0.97
ip地址就是上面查粗来的ip,密码的话就是上面设置的密码,然后就愉快的进去了
八、后台运行linux
前面我们也提到了,你进入ubuntu系统后是不能退出去的,不然ubuntu也相当于关机了,这样岂不是很不爽,怎么破呢
我们可以通过下面的方式来解决:
执行:
docker run -d -p 22 ubuntu:latest /usr/sbin/sshd -D
这样就会在后台运行ubuntu,由于我们按照了sshd,所以启动的时候会开发sshd
再执行:
docker ps
会看到如下:
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
d566335c9461 ubunbu:latest "/usr/sbin/sshd -D" 4 seconds ago
Up 3 seconds 0.0.0.0:32786->22/tcp insane_lalande
即是把32786映射了22端口,那我们就阔以用ssh来连接了
执行:
ssh root@127.0.0.1 -p 32786
就可以连接上了
注意上面的操作是通过ssh连接docker来执行,如果你是在windows下通过CMD来执行,你需要先知道boot2docker的ip地址,比如:192.168.59.103,然后通过下面的命令来连接:
ssh root@192.168.59.103 -p 32786