docker 的简介
docker 绝对是这几年来的重量级开源软件,它是使用 Go 实现的开源容器项目,分属于虚拟化技术。
docker 和 虚拟机
docker 作为一种轻量级的虚拟化方式,在运行应用上和传统的虚拟机方式有许多的优势。
- 启动、停止快
- 对系统资源占用先对小
- 镜像易获取、分发、更新和复用
- 通过使用 Dockerfile 创建和部署灵活
docker 和 虚拟化
虚拟化: 在计算领域,一般指的是计算虚拟化或服务器虚拟化。
在计算机技术中, 虚拟化是⼀种资源管理技术, 是将计算机的各种实体资源, 如服务器、 ⽹络、 内存及存储等, 予以抽象、 转换后呈现出来,打破实体结构间的不可切割的障碍, 使⽤户可以⽤⽐原本的组态更好的⽅式来应⽤这些资源。
概况性的来说:虚拟化是对资源的抽象。
⽬标往往是为了在同⼀个主机上同时运⾏多个系统或应⽤, 从⽽提⾼系统资源的利⽤率, 并且带来降低成本、 ⽅便管理和容错容灾等好处。
虚拟化大致有基于硬件的虚拟化
和基于软件的虚拟化
。
软件虚拟化又有一下的分类:
1、应用虚拟化
- Wine 等模拟类的软件
2、平台虚拟化
- 完全虚拟化。 虚拟机模拟完整的底层硬件环境和特权指令的执⾏过程, 客户操作系统⽆须进⾏修改。 例如IBM p和z系列的虚拟化、 VMware Workstation、 VirtualBox、 QEMU等;
- 硬件辅助虚拟化。 利⽤硬件(主要是CPU) 辅助⽀持(⽬前x86体系结构上可⽤的硬件辅助虚拟化技术包括Intel-VT和AMD-V) 处理敏感指令来实现完全虚拟化的功能, 客户操作系统⽆须修改, 例如VMware Workstation, Xen, KVM;
- 部分虚拟化。 只针对部分硬件资源进⾏虚拟化, 客户操作系统需要进⾏修改。 现在有些虚拟化技术的早期版本仅⽀持部分虚拟化;
- 超虚拟化(paravirtualization) 。 部分硬件接⼜以软件的形式提供给客户机操作系统, 客户操作系统需要进⾏修改, 例如早期的Xen;
- 操作系统级虚拟化。 内核通过创建多个虚拟的操作系统实例(内核和库) 来隔离不同的进程。 容器相关技术 Docker 即在这个范畴。
docker 和 传统虚拟化方式之间的不同
传统⽅式是在硬件层⾯实现虚拟化, 需要有额外的虚拟机管理应⽤和虚拟机操作系统层。 Docker容器是在操作系统层⾯上实现虚拟化, 直接复⽤本地主机的操作系统, 因此更加轻量级。
docker 的核心概念
docker 有三个核心概念:镜像(Image),容器(Container)和 仓库(Repository)。下面我们来详细说明:
docker 镜像
docker 的镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。镜像是创建 docker 容器的基础。
docker 容器
docker 容器类似于一个轻量级的沙盒,docker 利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而容器之间是彼此互相隔离、互不可见的。可以把容器看作⼀个简易版的Linux系统环境(包括root⽤户权限、 进程空间、 ⽤户空间和⽹络空间等) 以及运⾏在其中的应⽤程序打包⽽成的盒⼦。
镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。
docker 仓库
docker 仓库就是存放 docker 镜像的地方。而 Registry
是存放仓库的地方,同一类的镜像会存放在一个仓库中,并使用 tag
来进行区分。其中最大的公开仓库是官方的 Docker Hub,其次国内云服务供应商(如腾讯云、阿里云等)也提供了公开的仓库,国内用户的话最好访问它们。
docker 的安装使用
Docker Engine 是 docker 容器和核心组件,官方提供了社区版本(Community Edition, CE)和企业版本(Enterprise Edition,EE)。官方还提供了除引擎之外的其他服务:Docker Hub、Docker Cloud等。
- Docker引擎: 包括⽀持在桌⾯系统或云平台安装Docker, 以及为企业提供简单安全弹性的容器集群编排和管理;
- DockerHub: 官⽅提供的云托管服务, 可以提供公有或私有的镜像仓库;
- DockerCloud: 官⽅提供的容器云服务, 可以完成容器的部署与管理, 可以完整地⽀持容器化项⽬, 还有CI、 CD功能。
安装 docker
注: 本系列都是使用 CentOS7,运行 Docker。
1.安装 yum 源
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2.安装 docker 社区版
sudo yum install docker-ce docker-ce-cli containerd.io
3.启动 docker 服务
sudo systemctl start docker
4.验证
docker run hello-world
执行成功会输出 Hello from docker!
删除 docker
删除 docker 的命令为:
sudo yum remove docker-ce
删除 docker 后,它对应的配置信息和镜像、卷等文件不会删除,可以使用以下命令清除:
sudo rm -rf /var/lib/docker
注:其他系统上的安装方式这里就不详细说明了,需要的同学直接查看官方文档吧 https://docs.docker.com
配置 docker 服务
为了避免每次使⽤Docker命令时都需要切换到特权⾝份, 可以将当前⽤户加⼊安装中⾃动创建的docker⽤户组, 代码如下:
sudo usermod -aG docker USER_NAME
⽤户更新组信息, 退出并重新登录后即可⽣效。Docker 服务启动时实际上是调⽤了 dockerd 命令, ⽀持多种启动参数。因此, ⽤户可以直接通过执⾏ dockerd 命令来启动Docker服务, 如下⾯的命令启动Docker服务, 开启Debug模式, 并监听在本地的2376端口:
dockerd -D -H tcp://127.0.0.1:2376
这些选项可以写⼊/etc/docker/路径下的daemon.json⽂件中, 由dockerd 服务启动时读取:
{
"debug": true,
"hosts": ["tcp://127.0.0.1:2376"]
}
当然, 操作系统也对Docker服务进⾏了封装, 以使⽤ Upstart 来管理启动服务的 Ubuntu 系统为例, Docker服务的默认配置⽂件为/etc/default/docker, 可以通过修改其中的DOCKER_OPTS来修改服务启
动的参数, 例如让Docker服务开启⽹络2375端口的监听:
DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
修改之后, 通过service命令来重启Docker服务:
sudo service docker restart
对于CentOS、 RedHat等系统, 服务通过systemd来管理, 配置⽂件路径为 /etc/systemd/system/docker.service.d/docker.conf
。 更新配置后需要通过 systemctl
命令来管理Docker服务:
sudo systemctl daemon-reload
sudo systemctl start docker.service
此外, 如果服务⼯作不正常, 可以通过查看Docker服务的⽇志信息来确定问题, 例如在RedHat系统上⽇志⽂件可能为/var/log/messages, 在Ubuntu或CentOS系统上可以执⾏命令journalctl-u docker.service。每次重启Docker服务后, 可以通过查看Docker信息(docker info
命令) , 确保服务已经正常运⾏。