docker入门:win10家庭版安装docker toolbox及容器使用
最近想要有一个Linux环境来学习,又不想装双系统,想起来有个朋友给我推荐过docker,于是开始入坑docker,主要参考的是docker菜鸟教程。
win10家庭版安装docker
我的电脑系统是win10家庭版,不能直接用docker for windows安装,按照教程里介绍的利用docker toolbox安装,我下载的是DockerToolbox-18.03.0-ce.exe,然后打开任务管理器查看一下CPU是否开启了虚拟化,需要开启,安装toolbox一路点确定就行,没啥操作,安装完成后发现桌面有三个图标。
我打开Oracle VM一看,这不就是一个虚拟的linux操作系统吗?我才明白,docker只能运行在Linux系统下,我最开始希望有一个Linux环境所以入坑了docker,然而docker本身就需要一个Linux环境。。。所以我为啥不直接装VMware?但是既然都装好了总不能不用啊,继续搞!
docker快速使用
打开Quickstart就进入docker的命令行了,会提示获取IP地址之类的,我猜应该就是虚拟机在联网,出现一个小鲸鱼图案就可以开始使用docker了。
从仓库获取镜像:
docker pull XXX
仓库指的是Docker Hub,我点开安装好的docker toolbox文件夹,发现一个叫installers的文件夹,点进去一看,一个是git,一个是virtualbox,也就是说安装了git,所以这个docker hub应该就是用git来管理的。
我先pull了一个Ubuntu,然后docker images查看自己已经有的镜像文件,有了镜像文件就可以生成容器了,docker run -i -t ubuntu /bin/bash生成了一个Ubuntu容器,-i表示交互式操作,-t表示终端,ubuntu是镜像文件,/bin/bash表示打开所生成容器的shell。然后就进入到了Ubuntu容器了,通常装好Ubuntu第一步当然是apt-get update,等了比较久终于搞定了,apt install vim,apt install g++,先整一个hello world试试。
我在home文件夹下创建了一个cpp文件夹,然后vim a.cpp,vim刚进去的时候不能直接编辑,先按下a键进入插入模式就可以开始编辑了,写了一个hello world然后按下esc键可以退出插入模式,键入冒号,光标会自动跳到最后一行,然后输入wq按回车就会保存并退出vim。
直接g++ a.cpp生成了a.out,然后./a.out,输出了hello。
想退出的话,ctrl+D,直接exit的话,亲测关不掉,会在后台继续运行,所有运行的容器可以通过docker ps来查看。当然不小心没有关掉,可以docker stop XXX,这个XXX可以是容器的名字或者ID。然后docker ps -a可以查看全部容器,如果想要重新开启某个容器,就docker restart XXX,进入容器用docker exec,比如docker exec -it XXX /bin/bash就可以进入我之前创建的那个容器了。docker rm XXX可以删除容器。
这个容器已经可以正常使用了,但是如果我们继续用镜像文件生成容器,那就还是初始状态,还是要继续执行update,好麻烦,所以我们用docker commit -m="has update" -a="runoob" e352d073e741 runoob/ubuntu:v2
提交一个容器副本,相当于现在我们有了一个新的镜像叫做runoob/ubuntu:v2,可以用docker images查看。
关于docker和虚拟机
简单使用以后我就发现,这玩意儿对于学东西来说非常好用,如果我想学习mysql,我可以直接pull一个mysql镜像,然后生成一个容器,就可以开始学习了,省去了很多配置环境的麻烦事,而且镜像众多,想学啥都能找到,有个朋友说有一种web容器,可以让你直接在网页编辑python程序并调试运行,你想用哪个版本就用哪个,也就是说不需要自己装conda了,十分方便。
所以这个所谓的docker镜像文件,其实可以理解成一种类,你可以修改别人的类,创建自己的类,然后容器就是对象,利用镜像文件(类)可以生成容器(对象),想生成多少都可以,我可以创建一百个Ubuntu容器,一百个web,创建容器的速度很快。而全部的容器,共享一个操作系统,这个操作系统必须是Linux系统。
虚拟机就不同了,虚拟机可以创建多个操作系统,但是很慢,所有操作系统共享我的电脑的硬件资源。
所以区别就很明显了,他们的层次不同,一个是创建虚拟操作系统,一个创建容器。
踩坑提醒
不知道为啥更换镜像源以后docker指令全部失效,显示无法connect,无奈只好删掉虚拟机重新创建,之前的镜像和容器全部丢失。这个虚拟机的管理用docker-machine指令,默认虚拟机名字是default,具体使用就不写了。
我想搞一个共享文件夹,这样我在Windows上创建文件到那个文件夹,可以在Ubuntu容器里使用这些文件,反之亦然。然而处理了两天依然没能解决,始终映射不到,创建命令是
docker run -i -t -v /D/docker_data:/home/cpp runoob/ubuntu:v2 /bin/bash
始终无法联通容器文件夹和windows文件夹,但是创建的两个容器确实能够共享/home/cpp,大概是windows文件路径的问题,主要冒号在这个指令中表示映射,但是Windows的文件路径都有C:,D:这样的,不知道该如何解决。