阿里P8架构师分享:Docker容器详解-操作系统级虚拟化技术
最近接触了一下docker,容器这个概念一直有听到过,但不知道具体是做什么的,于是就花了点时间看了一下,发现这东西还是很实用的。
可以把docker比喻成是windows的系统ghost,只要有了docker,我们可以在liunx系统(目前docker只支持linux)中搭建好项目的开发环境,然后上传到类似github的docker hub 上,这样就可以在生产环境中直接复制开发环境的镜像,省去了复杂的系统环境配置过程。这个相信大家一定都深有体会,项目上线前常常为了搭建系统环境出现各种各样的错误而花费大量的时间。
那怎么样使用docker,我使用了一下之后发现使用docker是相当简单的,如果你用过github,那么发现很多操作都是类似的。
那我们就具体来看一下docker是怎么使用的
首先我们先要在物理机上或者云服务器上安装docker,通过指令
apt-get install docker
装完之后可以通过 docker -v 查看docker的版本
然后我们可以新建镜像或者从docker hub上拉取官方镜像或者别人自制的镜像,这就和github中pull一个项目的操作一样,这里我们来拉取一个nodejs的镜像
拉取镜像通过 docker pull 指令
我这里因为原来已经拉取过了,所以显示镜像已存在,默认没加版本的时候,会自动拉取latest版本的镜像。
接着,我们可以通过 docker images 指令来查看本地系统里已经拉取过的镜像列表
REPOSITORY - 镜像名称
TAG - 镜像版本号
IMAGE ID - 镜像的ID 唯一标识一个镜像文件
CREATED - 镜像创建时间
VIRTUAL SIZE - 镜像文件的大小
这里可以看到我的本地有5个镜像文件,这时我们就可以通过 docker run 指令来运行我们需要的docker环境,我们这里先跑一个node的镜像看看
docker的镜像运行有两种模式,一种是交互式容器,一种是守护式容器,用过nodejs的forever模块的话应该就会比较好理解,交互式就是带有交互指令界面的,就像我们直接运行 node app.js ,而守护式的容器则就像forever,执行完之后服务是在后台执行的。
我们先来执行一下交互式的容器,通过 docker run -it 镜像名 /bin/bash 来执行。
这里就可以看到,我开启了一个node的容器,当我在容器里执行指令 node -v 的时候,我们就能看到node的版本,这就说明我们现在已经在node的容器环境里了。
我们可以通过 Ctrl+D 指令来退出当前容器
接下来我们来开启一个守护式容器,通过 docker run -d 镜像名 来执行。
这里我们看到因为没有指定redis的版本号,所以docker会默认去找本地latest版本的镜像,如果本地没有,就会自动从docker hub上拉取。当我们指定了版本号为2.8.19的redis镜像之后,因为本地我之前已经拉取过该镜像,所以会返回一长串字符串,这时就说明该容器已经在后台跑起来了,我们可以通过 docker ps 指令来查看我们在运行的容器。
这里可以看到redis镜像已经在后台运行了,CONTAINER ID是容器对应的ID,之后对容器的一些操作可以通过容器ID来执行。
比如我们想查看镜像的具体信息,可以通过 docker inspect 容器ID 来查看,会返回一个json格式的信息
我们也可以通过 docker stop 指令来停止一个容器,通过 docker rm 指令来删除一个容器, docker logs 指令来显示容器里的标准输出内容。
那当我们修改了容器里的内容之后,如果我们希望将我们的最新的容器可以给别人共享使用,那么我们可以将容器提交到docker hub上。
首先我们需要执行 docker commit 指令来提交容器,然后通过 docker push 指令将本地提交的容器推送到docker hub上,这个过程和github的提交过程是一致的。
docker commit 有两个参数 -m 版本信息 -a 指定作者
提交成功了之后我们就可以通过 docker push 指令来把我们的容器提交到docker hub上
这样就提交成功了,我们可以登录docker hub看一下,就能看到我刚刚提交的容器镜像已经成功了,这样别人就可以在docker hub上共享我们的容器了。
docker hub
当然我们也可以通过 docker bulid 指令来创建一个空的镜像,在这里我就不多介绍了,包括docker hub还可以和github做关联
最后给大家提供一点docker比较不错的学习资料(免费获取)
今天为大家带来的是深入浅出Docker
特点
- 标准化应用发布,docker容器包含了运行环境和可执行程序,可以跨平台和主机使用;
- 节约时间,快速部署和启动,VM启动一般是分钟级,docker容器启动是秒级;
- 方便构建基于SOA架构或微服务架构的系统,通过服务编排,更好的松耦合;
- 节约成本,以前一个虚拟机至少需要几个G的磁盘空间,docker容器可以减少到MB级;
- 方便持续集成,通过与代码进行关联使持续集成非常方便;
- 可以作为集群系统的轻量主机或节点,在IaaS平台上,已经出现了CaaS,通过容器替代原来的主机。
Docker
现在免费送给这篇文章的读者朋友,关注+转发+收藏后私信【架构资料】即可免费获取!