一、Docker 的基本组成
1、Docker 的架构图
2、镜像(image)
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。 就好似 Java 中的类和对象,类就是镜像,容器就是对象。
3、容器(container)
Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。 它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等) 和运行在其中的应用程序。 容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
4、仓库(repository)
仓库(Repository)是集中存放镜像文件的场所。 仓库 (Repository) 和仓库注册服务器(Registry)是有区别的。
仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。 最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。 国内的公开仓库包括阿里云 、网易云。
5、小节
1、Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image 镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
2、image 文件生成的容器实例,本身也是一个文件,称为镜像文件。一个容器运行一种服务,当我们需要的时候,就可以通过 docker 客户端创建一个对应的运行实例,也就是我们的容器。
3、仓库,就是放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来就可以了。
二、环境说明
我们使用的是 CentOS 7 (64-bit),目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上,要求系统为 64 位、系统内核版本为 3.10 以上。
输入 uname -a 来查看当前的内核版本:
输入 cat /etc/os-release 查看版本信息:
三、安装步骤
1、官网安装参考手册:https://docs.docker.com/engine/install/centos/
2、确定系统是 CentOS7 及以上版本,我们上面已经做过了。
3、yum 安装 gcc 相关环境(需要确保虚拟机可以上外网 ),命令如下:
yum -y install gcc
yum -y install gcc-c++
4、卸载旧版本,命令如下:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
5、安装需要的软件包,命令如下:
yum install -y yum-utils device-mapper-persistent-data lvm2
如果报下面的这个错的话,就执行 rm -f /var/run/yum.pid 即可。
6、设置阿里云镜像仓库,可以加快下载速度,命令如下:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo 的单词为 super user do 表示以超级管理员的权限执行相关语句。
su 的单词为 switch user 表示切换用户。
7、更新 yum 软件包索引,命令如下:
sudo yum makecache fast
8、安装 docker-ce,命令如下:
sudo yum -y install docker-ce
9、启动 Docker 后台服务,命令如下:
sudo systemctl start docker
10、测试是否启动成功,命令如下:
docker version
如果 docker 是未启动的状态,如果查看版本号如下所示:
如果 docker 是启动的状态,如果查看版本号如下所示:
11、重启 Docker 服务,命令如下:
sudo systemctl restart docker
12、卸载 Docker 服务,命令如下:
sudo yum remove docker-ce
sudo rm -rf /var/lib/docker
13、配置加速器, 由于国内网络问题,后续拉取 docker 镜像十分缓慢,我们可以需要配置加速器来解决,编辑下面文件。
vi /etc/docker/daemon.json
添加以下内容:
{
"registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
}
配置完成后需要重启 docker 服务,如下所示:
# daemon-reload: 重新加载某个服务的配置文件,使修改的配置文件生效
sudo systemctl daemon-reload
# 重启服务
sudo systemctl restart docker
# 查看镜像地址与所配置的镜像地址是否匹配,如过匹配,则说明配置成功
docker info
四、测试 Hello-world
1、启动 hello-world ,执行命令:
docker run hello-world
2、run 干了什么?
五、底层原理
1、Docker 是怎么工作的
Docker 是一个 Client-Server 结构的系统,Docker 守护进程运行在主机上, 然后通过 Socket 连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。
2、为什么 Docker 比 VM 快
1、docker 有着比虚拟机更少的抽象层。由于 docker 不需要 Hypervisor 实现硬件资源虚拟化,运行在 docker 容器上的程序直接使用的都是实际物理机的硬件资源。因此在 CPU、内存利用率上 docker 将会在效率上有明显优势。
2、docker 利用的是宿主机的内核,而不需要 Guest OS。因此,当新建一个容器时,docker 不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 Guest OS,返个新建过程是分钟级别的。而 docker 由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker 容器只需要几秒钟。