1 容器化 vs 虚拟化与 Docker 基本操作

容器化 vs 虚拟化

从前文 技术的架构图中,你能清晰地看出,虚拟化技术是由虚拟机管理程序创建抽象层并完成分离,使多个操作系统运行在单一的硬件平台之上。

而你安装操作系统的目的,不就是为了提供环境以使用某个特定的应用程序吗?如此看来,虚拟化技术通过一个完整的内核来为你实现隔离的代价确是很大。

容器是一个打包了代码及其全部依赖的软件标准单元,是依靠内核功能,对操作系统而非硬件的虚拟化。单词容器 container 又有集装箱之意,这样一层封装便如同集装箱一样为你带来了隔离与标准。

接下来就是如今最主流的容器化技术 Dcoker。


安装 Docker

这里使用的是 Docker Community Edition (docker-ce),官方安装指南:https://docs.docker.com/install/linux/docker-ce/centos

首先安装必要的程序包,并且设置稳定的 Docker 仓库:

<code>yum install yum-utils device-mapper-persistent-data lvm2 -y
yum-config-manager \\ 


--add-repo \\
https://download.docker.com/linux/centos/docker-ce.repo/<code>

接着安装最新社区版的 Docker 引擎以及 containerd:

<code>yum install docker-ce docker-ce-cli containerd.io/<code>

启动 Docker 并且通过运行 hello-world 镜像验证安装结果:

<code>systemctl start dockerdocker run hello-world/<code>

后文,先来对其输出来学习 Docker,

知识点

此 Docker 的架构图取自官网:

docker.com

其为 C/S 架构,Docker 客户端工具与 Docker 守护进程通信,以完成镜像的构建、拉取以及容器的运行等操作。

你敲击 docker run,通过 Docker Client 向监听中的 dockerd 进程发送运行容器命令。如输出第一行所示,你本地没有名为 hello-world 且默认标签为 lateset 的镜像。随后便开始了从 registry 远程仓库的拖拽操作。

再看向第二段,该容器只完成了一件事,输出操作。随着该指令运行完成的退出,其容器也退出了,

<code>docker container ls --all/<code>

查询当前全部容器的状态,其中也记录它退出了的时间信息。

为 Docker 加速!编辑 /etc/docker/daemon.json 为其添加如下一行,并重新启动服务:

<code>{ "registry-mirrors": ["https://registry.docker-cn.com"] }
systemctl restart docker/<code>

来一个更大点的,在容器上安装 CentOS 系统;-i 指明你将要 interactive 交互式地运行 /bin/bash,并为其分配 tty 终端,

<code>docker container run -it centos /bin/bash/<code>

以容器化的方式创建操作系统就是这么简单,而且通过 docker image ls 命令查看镜像信息,它也仅仅 237MB。

当然在 Docker 中仅仅运行一个应用程序,才是其高明之处。这里以 httpd 为例 ,先拖拽镜像,

<code>docker pull httpd/<code>

同样拖拽的是默认 latest 标签的镜像,其中 -d 意为在后台运行容器,并将之命名为 web1,同时将容器中的 80 端口发布在主机上的 8080 端口,

<code>docker container run --name web1 -d -p 8080:80 httpd/<code>

容器启动后,你来通过 curl 命令访问本机的 8080 端口,

<code>curl localhost:8080/<code>

It works!

最后还要为你介绍查看容器信息的命令,

<code>docker container inspect web1/<code>

输出结果中,不难找到容器 web1 的 ip 地址为 172.17.0.2,接着通过 curl 命令访问 web1 的 80 端口,

<code>curl 172.17.0.2:80/<code>

同样,It works!

关注 一栋人,订阅下期内容。