本文先简单介绍Docker,并利用一个例子演示如何使用,然后介绍几种分享Docker的方式。
其实Docker没有想象中难以理解和上手,它非常简单,这里不直接大段复制教科书式的概念。用自己的话来概述其本质。
有几个名词是使用频率很高的,我们一定要有所了解。
我们基本都使用过像VMware、VirtualBox等虚拟机软件,这些软件会虚拟化一个机器的概念,我们需要安装操作系统、软件等,就如同虚拟化了一个硬件机器一样。这层虚拟化可想而知,效率不高,占有宿主机的内存和cpu都较高。
那么Docker同样作为一个虚拟化技术,为何现在这么流行和普及呢?用一张官网的图来说明:
可以从左图看出,Docker中一个执行容器和其他容器都共享当前Linux内核等,它运行在一个进程上,和宿主机器上其他普通的进程没啥区别,不会占用过多内存,所以非常轻量。
而传统的虚拟机就不同了,它在宿主机中完全虚拟化了一个环境,还需要操作系统、运行库等等,这个过程会占用很多的内存和cpu。同时,由于模拟层数过多,效率也不高。我们平时使用虚拟机过程中,应该有所感受。
上面说到Docker很轻量,这还仅仅是它的一个优点,并不足以颠覆目前的运维模式。**我觉得它最重要的一个点就是:通过一次创建或配置,代码就可以在任意机器、时间,完全一样的部署运行**。大家再也不用担心环境不一致的问题,繁琐的部署过程也变得异常简单。这一点解决了诟病多年的环境部署难题,受到了开发、运维、测试等的一致拥护,也从一定程度上颠覆了传统开发和运维的模式。
接下来介绍下mac下如何搭建docker环境,然后演示如何运行Nginx容器。
环境介绍:
机器:mac os 10.12.3
官网下载链接:https://download.docker.com/mac/stable/Docker.dmg
直接很慢,我是用迅雷下的,国内会快点。
双击安装包文件,如下图拖入。
然后在应用列表里双击打开,各种ok都点上,最后系统状态栏会出现Docker的Icon图标,然后点击看到“Docker is running!”,说明安装成功。
打开一个终端,执行以下命令验证是否安装成功:
docker version
我这里显示这样,说明安装成功了:
为了更快的下载image,我们使用阿里云的registry镜像站点。
访问阿里云:https://cr.console.aliyun.com/#/accelerato
下图红框中的地址。
如下图操作点击Preferences,点击Daemon,点+号,添加上面阿里云里得到的地址,然后点击“applly&restart”让它重启生效。
一个简单的示例。
先拉取Nginx的image镜像文件到本地执行:
docker pull nginx
上面命令会从仓库拉取nginx的最新镜像到本地。
然后再运行该image镜像,-d是后台执行,-p是把本地8000端口映射到容器的80端口,执行:
docker run -d -p 8000:80 nginx
打开浏览器,访问:http://127.0.0.1:8000
使用命令将本地配置好的镜像导出为文件,例如将上面的nginx镜像导出为文件,执行:
docker save -o nginx.tar nginx:latest
然后再在前目录就会有镜像文件nginx.tar。
将tar文件载入到本地镜像库中,执行:
docker load --input nginx.tar
某些时候需要将一个容器迁移到另一个容器。
不管容器当前是否在运行,都可使用docker export命令来导出:
docker export -o nginx_container.tar da2
其中da2为容器的唯一标识的前若干位。
docker import nginx_container.tar - nginx:v.1
将镜像push到仓库,类似git一样推到云端。Docker仓库也分公共和私有仓库。如果需要在其它地方部署,只需要从云端的仓库拉到本地运行即可。
Dockerfile就如同一个配置文件,它描述了每一步的操作,最终直接构建出一个镜像出来。其实DockerFile有自己的一套语法,后面有时间专门整理下,这里不阐述。
接下来使用一个小例子来感受一下,以下为官方的hell-world镜像的Dockerfile内容:
FROM scratch
COPY hello /
CMD ["/hello"]
FROM scratch,的意思是以scratch镜像为基础,如果本地没有,会自动拉到本地。
COPY hello /,COPY指令将本地当前目录下的hello文件复制到镜像内“/”路径下。
CMD ["/hello"],CMD指令指明镜像启动时自动执行的命令,此处执行上一步传入的hello文件。
这样,我们使用Dockerfile就能将环境配置固化,大家都能一键生成相同的运行环境。更进一步,开发、测试、运维等等的环境就能轻松统一起来,这样大家就可以更专注地聚焦业务逻辑,而不用关心如何去配置环境。
大家可以看到,简单使用Docker并不是很难。现在公司里运维基本是都是基于Docker了,腾讯云、阿里云上也都能支持Docker部署,后面自己做的项目也会尽量往上靠。
Docker如何改造?Kubernetes如何部署?已经列到计划里啦~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。