为什么要看docker
从去年起就或多或少的接受了docker的熏陶,主要还是Infoq在去年有很多关于docker的实践视频讲座,记得有一篇是《Docker在雪球的技术实践》,当时听的也不是很明白,就萌生了了解docker的想法。
可惜由于工作的关系,一直没有接触到这方面的内容,因此学习的计划也就暂时搁置。直到前不久京东促销买了本docker的书籍、又上网买了本盗版的电子书,想趁着春节好好学习一番,没想到回家就玩了。
直到最近抽出时间读一下《第一本docker书》,就当做先了解了解。
我理解的docker
通过看了前几章的书,以及百度了解,大体上理解了什么是docker。
按照我的理解,docker其实就是一种虚拟化的技术。就像virtualBox,你可以在windows上安装,然后通过不同的镜像装不同的系统。而docker也是差不多,只不过它不是一种操作系统,而是在原生的系统之上直接虚拟出一个容器。这个容器有独立的进程、权限、资源、网络等等。
docker的口号跟java有点像,一次编写,到处运行。因为docker本身作为一种容器,在什么地方安装都是一样的(现在对平台还是有一定要求的),而不管内部装的是什么。
因此开发者只要写代码然后把程序放在容器中运行起来就行;运维人员呢,只需要了解怎么部署docker容器就可以了。
这样就完全解决了,开发完的东西在开发人员自己电脑上好使,到别人电脑上就不好使的问题。
docker能做什么
通过上面的介绍,大致了解docker的生命周期可能是这样的:
- 构建:构建容器
- 分发:CI持续集成,部署,镜像
- 运行:以守护进程的方式运行
那么docker到底都可以做什么呢?
- 加速本地开发、构建流程
- 在不同的环境中,得到相同的运行结果
- 隔离的环境测试
- 构建Paas
不过需要注意一点的是,docker目前对安装环境还是有一定要求的。比如:
- 1 64位CPU
- 2 3.8+内核
- 3 存储驱动,
- 4 内核开启cgroup和命名空间
docker的常用命令
运行容器:
sudo docker run -i -t ubuntu /bin/bash
查看容器列表:
docker ps -a
容器命名:sudo docker run --name bob_the_container -i -t ubuntu /bin/bash
重新启动:
sudo docker start bob_the_container
创建守护容器:
sudo docker run --name daemon_dave -d ubuntu /bin/bash -c "while true;do echo hello world; sleep 1;done"
带时间查看日志:
sudo docker logs -ft daemon_dave
查看容器内的进程:
sudo docker top daemon_dave
容器内运行进程:
sudo docker exec -d daemon_dave touch /etc/new_config_file
交互式运行进程:
sudo docker exec -t -i daemon_dave /bin/bash
停止守护进程:
sudo docker stop daemon_dave或者sudo docker stop 43wqihds8324
自动重启容器:
sudo docker run --restart=always --name daemon_dave -d ubuntu /bin/bash -c "while true;do echo hello world; sleep 1;done"
查看容器详细信息:
sudo docker inspect daemon_dave
删除容器:
sudo docker rm 823919fdsfdas3
删除所有容器:
docker rm 'docker ps -a -q'