Docker是一个开源的容器引擎,让开发者可以将应用程序以及依赖环境封装到轻量级、可移植的镜像中。使用Docker技术,可以将应用程序快速的部署到各种不同的Linux平台上。

Docker的相关概念

  • 容器

    容器技术是一种内核轻量级的操作系统层虚拟化技术。和传统的hypervisor虚拟化技术相比,容器没有自己的内核,也没有进行硬件虚拟,而是运行在操作系统内核之上的用户空间,作为一个独立的进程运行。容器内只打包了应用程序及其依赖的二进制文件(bin)和库文件(lib)。通俗的说,容器就是独立运行的一个或一组应用,以及它们的运行态环境。

  • 镜像
    镜像是容器所对应的静态文件,如果把容器比作一个动态运行的进程,那么镜像就相当于容器的“源代码”。

  • Registry和仓库

    Registry是Docker用来集中存储、分发镜像的服务。Registry分为公共和私有两种。公共Registry允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。最常用的公共Registry是Docker官方的Docker Hub,这也是默认的Registry。Docker Hub上已有超过100,000个由软件厂商、开源项目和社区用户上传的镜像。而除了各种公共Registry之外,用户也可以搭建自己的私有Registry服务。

    一个Registry可以包含多个仓库(Repository),每一个仓库,包含同一个软件不同版本的镜像,在一个仓库中,用标签(Tag)来指定具体的版本。开发者可以用<仓库名>:<标签>的格式来指定具体的镜像。

  • 服务器和客户端

    Docker是一个客户端/服务器(C/S)架构的程序。客户端使用REST接口同服务端进行交互。而服务端运行着守护进程(Docker Daemon),负责管理Docker对象,包括镜像、容器、网络和数据卷。Docker客户端和服务器可以在同一台宿主机上运行,也可以在不同的主机上远程交互。

  • Docker的整体架构

    一个完整的Docker服务由服务器、客户端、镜像、仓库和容器组成,如下图所示:

    docker架构图

Docker的安装

安装Docker的环境需求

  • 64位CPU构架的计算机(x86_64或amd64)
  • 运行Linux 3.8或更高版本的内核。(一些老版本的2.6.x或其后的内核版本也能够运行Docker,但运行中可能存在问题,最可靠的版本是3.10及之后的版本)

在Ubuntu系统中安装Docker

  1. 检查依赖环境

使用uname -a命令查看主机信息,例如:

uname

以上执行结果表明当前主机CPU构架为x86_64,内核版本为5.0.0-37,操作系统版本为Ubuntu 18.04 。Docker支持在Ubuntu 12.04 LTS及以上的版本运行,因此这台主机的环境支持Docker运行,就可以进行安装了。

  1. 安装Docker

Docker官方提供了跨平台的快速安装脚本,这也是最便捷的安装方式,只需要切换到root权限下,执行以下命令:

1
wget -qO- https://get.docker.com/ | sh

1
2
curl -fsSL https://get.docker.com -o get-docker.sh
sh test-docker.sh

等待脚本执行完成,即可完成安装。安装完成后显示信息如下:

install

安装完成后可以通过docker info命令确认Docker安装成功

启动和停止Docker Daemon

使用get.docker.com脚本完成Docker后,脚本会自动启动Docker Daemon进程,并添加开机启动服务。此外,也可以通过以下命令手动控制Daemon的启停。

1
sudo systemctl start|stop|restart docker

Docker配置

允许普通用户运行Docker

在默认情况下,Docker Daemon会监听本地的一个Socket或fd文件,而这个文件是由root用户创建的,其他用户没有读写权限,因此在执行Docker命令时,需要使用root用户或sudo权限进行操作。如果要使普通用户有权限执行Docker操作,可以将用户添加到docker用户组中:

1
sudo usermod -aG docker username    #username为要加入docker用户组的用户名

命令执行完毕后需要退出并重新登录用户,使usermod命令生效。

Docker远程访问配置

如前面所讲,默认配置下Docker Daemon通过监听本地Socket或fd文件,实现监听功能,在这种情况下,只能通过本地访问docker。如果想要实现docker客户端远程访问Docker Daemon,就需要修改默认配置,以tcp协议进行监听。

修改Docker宿主机的/lib/systemd/system/docker.service文件:

docker.service

如上图所示,修改ExecStart的内容,在dockerd的执行参数中添加如下参数:

1
-H tcp://0.0.0.0:2375

修改结果如下:

docker.service.tcp

修改后保存文件,然后通知docker服务做出的修改:

1
systemctl daemon-reload

然后重启Docker服务

1
systemctl restart docker

至此配置完成,就可以在远程主机上通过docker客户端访问Docker Daemon了,只需要在执行docker命令时添加-H参数或将远程地址添加到Docker_HOST环境变量:

1
docker -H tcp://192.168.1.200:2375 ps -a

1
2
export Docker_HOST="tcp://192.168.1.200:2375"
docker ps -a