专业编程基础技术教程

网站首页 > 基础教程 正文

一篇文章了解如何使用Docker(docker到底怎么用)

ccvgpt 2024-07-20 11:43:18 基础教程 12 ℃

本文先简单介绍Docker,并利用一个例子演示如何使用,然后介绍几种分享Docker的方式。

一、Docker原理

其实Docker没有想象中难以理解和上手,它非常简单,这里不直接大段复制教科书式的概念。用自己的话来概述其本质。

一篇文章了解如何使用Docker(docker到底怎么用)

1.1 四个名词

有几个名词是使用频率很高的,我们一定要有所了解。

  • image(镜像)
  • 我们可以理解为一个文件,它包含了执行过程中需要的所有东西-代码、执行环境、各种库、配置文件等等。在docker中,image是只读文件,它像一个洋葱,一层一层地累加修改点,从而构成各种各样的形式。例如ubuntu的image、nginx的image等等。当两个image中的几层是相同的,docker就可以只实际保存一份,在底层共享。
  • container(容器)
  • container就是一个image的运行实例。由于image是只读的,加载进内存后,为它挂载文件系统、加入一层可读写文件层,真正跑起来。
  • repository(仓库)
  • 我们的image可以提交push到远程仓库,也可以从仓库里pull拉取到本地。这个和git很类似,其实docker仓库这里借鉴了很多git的设计理念。
  • *registry(注册服务)
  • 额外说一下,这里不要和仓库混淆,注册服务是保存仓库的地方,每个仓库存放某一类镜像。国内有墙的存在,从官方registry下载镜像很慢。所以一般都会将registry替换为国内的镜像,例如阿里云的,这样会快很多,下部分的内容会演示如何操作。

1.2 与传统的虚拟机底层对比

我们基本都使用过像VMware、VirtualBox等虚拟机软件,这些软件会虚拟化一个机器的概念,我们需要安装操作系统、软件等,就如同虚拟化了一个硬件机器一样。这层虚拟化可想而知,效率不高,占有宿主机的内存和cpu都较高。

那么Docker同样作为一个虚拟化技术,为何现在这么流行和普及呢?用一张官网的图来说明:

可以从左图看出,Docker中一个执行容器和其他容器都共享当前Linux内核等,它运行在一个进程上,和宿主机器上其他普通的进程没啥区别,不会占用过多内存,所以非常轻量。

而传统的虚拟机就不同了,它在宿主机中完全虚拟化了一个环境,还需要操作系统、运行库等等,这个过程会占用很多的内存和cpu。同时,由于模拟层数过多,效率也不高。我们平时使用虚拟机过程中,应该有所感受。

1.3 Docker受欢迎的根本原因

上面说到Docker很轻量,这还仅仅是它的一个优点,并不足以颠覆目前的运维模式。**我觉得它最重要的一个点就是:通过一次创建或配置,代码就可以在任意机器、时间,完全一样的部署运行**。大家再也不用担心环境不一致的问题,繁琐的部署过程也变得异常简单。这一点解决了诟病多年的环境部署难题,受到了开发、运维、测试等的一致拥护,也从一定程度上颠覆了传统开发和运维的模式。

二、Mac下搭建环境

接下来介绍下mac下如何搭建docker环境,然后演示如何运行Nginx容器。

环境介绍:

机器:mac os 10.12.3

2.1 搭建docker环境

2.1.1 官网下载Docker安装包

官网下载链接:https://download.docker.com/mac/stable/Docker.dmg

直接很慢,我是用迅雷下的,国内会快点。

2.1.2 安装

双击安装包文件,如下图拖入。

然后在应用列表里双击打开,各种ok都点上,最后系统状态栏会出现Docker的Icon图标,然后点击看到“Docker is running!”,说明安装成功。


打开一个终端,执行以下命令验证是否安装成功:

docker version

我这里显示这样,说明安装成功了:


2.1.3 设置阿里云registry镜像站点加速

为了更快的下载image,我们使用阿里云的registry镜像站点。

  • 获取专属阿里云镜像站点地址

访问阿里云:https://cr.console.aliyun.com/#/accelerato

下图红框中的地址。


  • 本地设置

如下图操作点击Preferences,点击Daemon,点+号,添加上面阿里云里得到的地址,然后点击“applly&restart”让它重启生效。


2.2 本地运行Nginx容器

一个简单的示例。

2.2.1 拉取Nginx的image镜像

先拉取Nginx的image镜像文件到本地执行:

docker pull nginx

上面命令会从仓库拉取nginx的最新镜像到本地。

2.2.2 run镜像

然后再运行该image镜像,-d是后台执行,-p是把本地8000端口映射到容器的80端口,执行:

docker run -d -p 8000:80 nginx

2.2.3 验证

打开浏览器,访问:http://127.0.0.1:8000



三、几种分享方式

3.1 镜像本地导出、载入

3.1.1 导出镜像

使用命令将本地配置好的镜像导出为文件,例如将上面的nginx镜像导出为文件,执行:

docker save -o nginx.tar nginx:latest

然后再在前目录就会有镜像文件nginx.tar。

3.1.2 载入镜像

将tar文件载入到本地镜像库中,执行:

docker load --input nginx.tar

3.2 容器本地导出、载入

某些时候需要将一个容器迁移到另一个容器。

3.2.1 导出容器

不管容器当前是否在运行,都可使用docker export命令来导出:

docker export -o nginx_container.tar da2

其中da2为容器的唯一标识的前若干位。


3.2.2 导入镜像

docker import nginx_container.tar - nginx:v.1

3.3 将镜像push到仓库

将镜像push到仓库,类似git一样推到云端。Docker仓库也分公共和私有仓库。如果需要在其它地方部署,只需要从云端的仓库拉到本地运行即可。

3.4 Dockerfile编写

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如何部署?已经列到计划里啦~

Tags:

最近发表
标签列表