【兔年创意投稿】兔兔的奇妙旅程(九)探秘容器化世界&&关于docker的学习记录

2,555 阅读4分钟

我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

笔者注:这也是个人初次接触docker的学习笔记,有可能有误,后续等我再深入了解时再来勘误。

书接上回。

几只兔子开始学习RPC框架kitex。在跑到bizdemo下的easy_note服务时,它们看到README里面写着要docker compose up,而且文件夹下还有个docker-compose.yml文件。虽然之前它们也听说过docker,但这是它们第一次真正需要去接触这个工具。正所谓“纸上得来终觉浅,绝知此事要躬行”,那就借这个机会学习一下相关知识吧。

在这一部分中它们希望搞清楚如下问题:

  • docker是什么?
  • 容器和镜像是什么以及它们之间的关系?
  • docker的常用命令
  • docker还能怎么用?

docker是什么

docker是一个容器工具,它依赖于已存在并运行的 Linux 内核环境。实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。 ——菜鸟教程

以上这段话解答了几个问题:

  • 为什么Windows下安装docker时还要再装一个Linux虚拟机?

因为docker是基于Linux内核的,它没法直接安装在Winodws上。 在Windows下安装docker其实就是在套娃:

image.png

  • docker的机制?

将现有主机资源抽象化、虚拟化成一个个相互独立的容器。

核心概念:容器和镜像

  • 镜像是对实物的一个映射,比如制作ubuntu这个操作系统的镜像,镜像具有ubuntu的所有功能,但它不是一个真正的操作系统。
  • 容器是docker将主机资源虚拟化后重新分配的结果
  • 从某种角度看,镜像类似于面向对象思想中的类,更抽象;而容器类似于其中的对象实体,相对而言是一个具体的东西。

比如现在有一个ubuntu镜像,可以创建a容器也是ubuntu ,b容器也是abuntu,两者相互隔离。你可以认为相对于镜像而言,这两个容器是真实存在的。

docker常用命令

安装docker

  • 使用DaoCloud的源以及通过它的脚本下载docker。 curl -sSL https://get.daocloud.io/docker | sh

  • 验证是否安装成功

docker -v

出现版本信息即说明成功

常用命令

可通过命令docker查看帮助信息:

Usage: docker [OPTIONS] COMMAND

后面还很详细地列出了各种OPTIONS选项和COMMAND选项

在这些命令中又以pull、rm等较为常用。

注意事项

要运用一个新的工具,要重点把握两方面,一是使用方法(cmd下的命令或者gui下的界面操作),二是它的生态圈子。要做到后者,配置/更换正确的镜像很重要。

比如一行docker pull mysql:latest命令,那要看是从哪里拉。如果是国内从国外的官网拉,必然是很慢的。

  • 我目前在用的镜像地址是:f1361db2.m.daocloud.io

  • 配置文件所在路径:/etc/docker/daemon.json (如果文件不存在就新建一个)

  • 写入内容:

{"registry-mirrors": 
[
"http://f1361db2.m.daocloud.io"
]
}

其他镜像,如阿里、腾讯、华为的应该也挺好。如果所用镜像源没有想要的镜像,可以尝试多换几个源。

docker还能怎么用

上面提到可以直接通过命令来拉取、上传、删除镜像和容器,但其实就我目前了解到的还有一种办法,就是通过事先写好配置文件,做到一次配置,处处运行,而不需要每一个运行该应用的用户都自己手动配置一次。

那配置文件是什么呢?就是以.yml为后缀的文件。

那系统如何解析这些文件并运行上面的内容呢?这就需要docker-compose

直接一行命令安装这个工具就可以了。

运行需要docker配置的应用

前提:该应用文件目录下有docker-compose.yml文件

  • docker-compose up
  • 按照README说明依次启动各个服务