Docker入门笔记(一)
前言
- Docker随着微服务已经流行起来一段时间。最近公司来了一个新的同事,在他的建议下,公司的一部分开发卓见转移到开始使用docker做部署等操作。由于本人想更为详细的了解一下Docker,特整理此学习笔记,记录Docker的学习过程。
什么是Docker
- 个人有一个习惯,在学习一门新的知识的时候,总要先了解,这个知识是什么,紧接着要简单的了解这个东西怎么使用。最后,了解这个软件的优点和缺点。
- 在中文docker网站这样介绍Docker:Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
- docker官方包括一些书籍中也更多的出现把docker比作集装箱。如Docker官网中介绍,Docker是世界领先的软件集装箱化平台。Docker实现了应用程序和基础架构与开发人员和IT运营商之间的真正的独立性,从而发挥潜力,并创建更好的协作和创新模式。---摘自Docker官网
- 如果说云计算是一艘大船,docker就是大船上的集装箱,docker可以解决不同程序会有不同的应用环境的问题,降低开发运维的成本,相对与虚拟机占用内存更小。
- 整体来说docker具有敏捷,可移植性,安全,节约成本等优势。
Docker的基本安装
- 在使用docker的过程中我们首先要学会安装docker,本实例使用centos7作为docker运行环境。
- yum install docker
进行docker的安装,但是我们现在会发现我们的docker版本是1.12.6版本,使用容器安装Docker版本1.13或更高版本。
- 如果我们要对我们的docker版本进行升级,首先升级系统软件包yum update
- 卸载旧版本的docker,yum erase docker docker-common docker-client docker-compose
- 添加docker的yum源,位置/etc/yum/repos.d/docker.repo
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
- 安装docker,
yum install -y docker-engine
- 我们现在通过命令
docker -v
就可以查看我们的docker版本,已经升级成最新的docker版本。 - 我们现在可以创建开机启动我们的docker
systemctl enable docker.service
- 启动我们的docker
systemctl start docker
Docker的架构体系
- 在安装完成以后我们要先了简单的了解一下docker的架构体系,Docker使用客户机 - 服务器体系结构。Docker 客户端与Docker 守护进程通信,Docker 守护进程负责构建,运行和分发Docker容器。Docker客户端和守护进程可以 在同一个系统上运行,也可以将Docker客户端连接到远程的Docker守护进程。Docker客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。
Docker守护进程
- Docker守护进程(dockerd)监听Docker API请求并管理Docker对象,如图像,容器,网络和卷。守护进程还可以与其他守护进程通信来管理Docker服务。
Docker客户端
- Docker客户端(docker)是许多Docker用户与Docker进行交互的主要方式。当你使用诸如这样的命令时docker run,客户端发送这些命令给dockerd其执行。该docker命令使用Docker API。Docker客户端可以与多个守护进程通信。
Docker仓库
- Docker仓库存储Docker镜像,Docker Hub和Docker Cloud是任何人都可以使用的公共仓库,Docker默认配置为在Docker Hub上查找图像。你甚至可以运行你自己的私人仓库。如果你使用Docker Datacenter(DDC),它包括Docker Trusted Registry(DTR)。
Docker对象
image
集装箱
容器是图像的可运行实例。您可以使用Docker API或CLI创建,启动,停止,移动或删除容器。您可以将一个容器连接到一个或多个网络,将存储连接到它,甚至可以基于当前状态创建一个新映像。
默认情况下,一个容器与其他容器及其主机相对隔离。您可以控制容器的网络,存储或其他底层子系统与其他容器或主机的隔离程度。
容器由其图像定义,以及在创建或启动时提供给它的任何配置选项。当一个容器被移除时,没有存储在永久存储中的状态的任何改变都消失。
示例docker run命令
以下命令运行一个ubuntu容器,以交互方式附加到本地命令行会话并运行/bin/bash。
docker run -i -t ubuntu /bin/bash
当您运行此命令时,会发生以下情况(假定您正在使用默认的注册表配置):
如果您ubuntu本地没有镜像,Docker会从您配置的注册表中取出它,就像您docker pull ubuntu手动运行一样。
Docker创建一个新的容器,就像你docker create 手动运行一个命令一样。
Docker将一个读写文件系统分配给容器,作为它的最后一层。这允许正在运行的容器在其本地文件系统中创建或修改文件和目录。
由于您没有指定任何网络选项,因此Docker会创建一个网络接口来将容器连接到默认网络。这包括分配一个IP地址给容器。默认情况下,容器可以使用主机的网络连接连接到外部网络。
Docker启动容器并执行/bin/bash。因为容器是交互式运行的,并且连接到你的终端(由于-i和-t)标志,所以你可以使用你的键盘提供输入,输出记录到你的终端。
当您键入exit以终止/bin/bash命令时,容器停止但不会被删除。您可以重新启动或删除它。
服务
通过服务,您可以跨多个Docker守护进程扩展容器,这些守护进程可以作为一个拥有多个管理者和工作者的群组一起工作。swarm中的每个成员都是一个Docker守护进程,守护进程都使用Docker API进行通信。服务允许您定义所需的状态,例如在任何给定时间必须可用的服务副本的数量。默认情况下,该服务在所有工作节点之间进行负载平衡。对于消费者来说,Docker服务似乎是一个单一的应用程序。Docker引擎在Docker 1.12及更高版本中支持swarm模式。
基础技术
Docker是用Go编写的,利用Linux内核的几个特性来提供它的功能。