学习使用docker
体验一把这两年火了的docker。基本的理解就是一个带版本控制,包概念,平台无关的 VM。
其实和2006年时候开发一样,很多公司在运维部门都会做出一些自定义的开发系统,用于统一开发环境和部署环境。
docker将这个事情简化了很多,并且在网上提供了大量的包。提高了自己构建的效率。
PS 下面的一切容器都可先理解为虚拟机。虽然有一些不同,但是其实办了一样的事情。
安装和使用
从 docker 官方网站 下载相应的程序安装,我的是mac的dmg包。像正常程序一样安装。
安装好后启动shell
$docker version
查看docker的版本
$docker search tutorial
在线上库中名字里含有tutorial的容器,可以理解就是线上有很多已经被发布好的系统容器
$docker pull learn/tutorial
下载线上的容器,这个看起来跟git的pull有点像,其实他就是git的版本控制思想。可以防止提交很大的改变。
$docker run learn/tutorial echo "hello word"
测试一下,下载好后的镜像其实已经启动了。这点非常好,轻快,不用装巨大的系统了,其实那里头很多都是驱动程序。
$docker run learn/tutorial apt-get install -y ping
通过命令行在容器中执行指令并返回。
$docker ps -a
查看现在已有的虚拟机 注意到他前面都有生成的hash值,这个hash值代表了当前的虚拟机
$docker commit 698 learn/ping
提交版本 这里的698就是前面说的hash值,后面的是你为当前版本保存的名字。很像git吧。
$docker run lean/ping ping www.google.com
在运行的新容器中运行刚才安装的ping命令。
$docker images
查看你系统中已经生成了多少容器。看到这里同学你有没有感觉到:系统被版本控制了,对头,就是这样。
$docker push learn/ping
那么这些版本能不能提交到docker hub 呢?我想是能的。注意的是这里需要你去注册一个docker账户,并且科学上网。。。。。否则。。。。。只能用阿里爸爸的镜像了。
到此打住 感谢 这份参考
这里产生了一个🤔️,那这个到底是一堆克隆下来的文件还是一个真正执行中的系统呢?下面来回答你的问题。
第一个问题文件都down到哪里去了。参考这个文档 不过我没仔细找,这个文档应该过时了。
第二个问题系统有在执行么?执行一下下面的命令
$docker run -t -i learn/ping /bin/bash
恭喜您已经登录到你的虚拟机中了,
$apt-get install apache2
$apt-get install wget
$cd~
$netstat –apn
$wget localhost
明白了么,同学,这玩意已经运行起来了。
那么这个虚拟机到底是用了多少资源呢。去看看docker的文档吧。我在这不累述了。
扩展阅读
使用 docker 搭建 web 服务环境
如何获取 docker 容器(container)的 ip 地址
如何进入、退出docker的container
docker 修改80端口
仓库
文档
还有国内翻版的一大把docker。。。因为这个就像是 git 和 github之间的关系。所以,任何公司,任何人都可以搞几台机器整个自己的docker生态。在小公司里这个基础技术栈的好处太多了。最关键一点,可以一定程度上保护公司的产品。😄
扩展玩法,获取别人已经定义好的容器、自定义容器、通过脚本疯狂的克隆容器、自动化的部署容器、假设有几千几万几千万台机器,怎么同时修改一点小环境。
1.停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
2.查看当前有些什么images
docker images
3.删除images,通过image的id来指定删除谁
docker rmi <image id>
想要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
要删除全部image的话
docker rmi $(docker images -q)
2017年11月21日 charlie