docker 实践一:简介和安装

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 命令) , 确保服务已经正常运⾏。

原文地址:https://www.cnblogs.com/xingyys/p/11382327.html