目录
- Centos7 安装 Docker
- Docker 架构node
目前 docker 有三个分支,moby、docker-ce、docker-eelinux
moby 是继承了原先的docker的项目,是社区维护的的开源项目,谁均可以在moby的基础打造本身的容器产品。sql
docker-ce 是docker公司维护的开源项目,是一个基于moby项目的免费的容器产品docker
docker-ee 是docker公司维护的闭源产品,是docker公司的商业产品。json
这里在 CentOS 7 上 经过 yum 安装 docker-cevim
[root@node1 ~]# uname -r 3.10.0-327.el7.x86_64 [root@node1 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)
清华yum 源关于 docker-ce 的安装过程已经很清楚了:https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/centos
安装依赖: [root@node1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 下载 repo 文件: [root@node1 ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo 软件仓库替换为 TUNA [root@node1 ~]# sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
查看docker-ce 版本:bash
目前安装版本是:19.03.3服务器
[root@node1 ~]# yum install docker-ce -y 安装完成,启动服务: [root@node1 ~]# systemctl start docker
查看 docker 相关信息:网络
[root@node1 ~]# docker info
运行 docker info 出现告警信息:
WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled
解决办法:
[root@node1 ~]# vim /etc/sysctl.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 [root@node1 ~]# sysctl -p
再次运行 docker info
出现如上告警信息,建议升级到 CentOS 7.4 以上版本,xfs 原生支持。
告警信息:不推荐使用devicemapper存储驱动程序,它将在未来的版本中被删除。
在docker 19版本中,再也不推荐使用 devicemapper 存储驱动程序,须要切换到 overlayfs,那什么是 overlayfs?
首先,overlayfs是一种文件系统,也是目前dokcer在使用的最新的文件系统,其余的文件系统还有:aufs、device mapper等。而 overlayfs 其实和 aufs 是相似的。更准确的说,overlayfs,实际上是 Linux 文件系统的一种上层文件系统。下面的底层的文件系统格式,是支持overlayfs的:
如何查看当前操做系统是否支持 overlay
[root@node1 ~]# lsmod | egrep overlay
若是没有输出,表示不支持,能够经过下面的命令开启overlay
[root@node1 ~]# modprobe overlay
须要注意的是:
xfs文件系统的 d_type是什么
d_type 是 Linux 内核的一个术语,表示 “目录条目类型”,而目录条目,实际上是文件系统上目录信息的一个数据结构。d_type,就是这个数据结构的一个字段,这个字段用来表示文件的类型,是文件,仍是管道,仍是目录仍是套接字等。
d_type 从 Linux 2.6 内核开始就已经支持了,只不过虽然 Linux 内核虽然支持,但有些文件系统实现了 d_type,而有些,没有实现,有些是选择性的实现,也就是须要用户本身用额外的参数来决定是否开启d_type的支持。
为何docker在overlay2(xfs文件系统)须要d_type
不管是 overlay,仍是 overlay2,它们的底层文件系统都是 overlayfs 文件系统。而 overlayfs 文件系统,就会用到 d_type 这个东西用来文件的操做是被正确的处理了。换句话说,docker只要使用 overlay 或者 overlay2,就等于在用 overlayfs,也就必定会用到 d_type。
docker info 用来检测你docker服务,是否在使用overlay的时候正确的使用 d_type。若是用了 overlay/overlay2,但 d_type 没有开,就报警告。
若是在不支持 d_typ 的 overlay/overlay 驱动下使用docker,也就意味着 docker 在操做文件的时候,可能会遇到一些错误,好比 没法删除某些目录或文件,设置文件或目录的权限或用户失败等等。这些都是不可预料的错误。举个具体的场景,就是,docker构建的时候,可能在构建过程当中,删除文件等操做失败,致使构建中止。
如何检测当前的文件系统,是否支持 d_type ?
其中的 ftype,1表示支持 d_type,0表示不支持。
所以要处理这个错误,在安装操做系统的时候就须要作好准备:
.
由于这里是虚拟机,经过添加一块磁盘,格式化后进行挂载使用。
[root@node1 ~]# systemctl stop docker [root@node1 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 4G 0 rom /mnt/centos7 vda 252:0 0 100G 0 disk ├─vda1 252:1 0 500M 0 part /boot └─vda2 252:2 0 99.5G 0 part ├─centos-root 253:0 0 50G 0 lvm / ├─centos-swap 253:1 0 7.9G 0 lvm [SWAP] └─centos-home 253:2 0 41.6G 0 lvm /home vdb 252:16 0 10G 0 disk
这里使用 vdb进行分区并挂载做为 docker 的文件系统。
分区
[root@node1 ~]# fdisk /dev/vdb
格式化
挂载
[root@node1 ~]# mount /dev/vdb1 /var/lib/docker
启动 docker 服务
[root@node1 ~]# systemctl start docker
告警解除,而文件启动更改成默认的 overlay2 文件系统格式。
测试 docker 运行:
输出这段提示之后,hello world 就会中止运行,容器自动终止。有些容器不会自动终止,由于提供的是服务,好比Mysql镜像等。
Docker 提供了一套简单实用的命令来建立和更新镜像,能够经过网络直接下载一个已经建立好了的应用镜像,并经过 Docker RUN 命令就能够直接使用。当镜像经过 RUN 命令运行成功后,这个运行的镜像就是一个 Docker 容器,容器能够理解为一个轻量级的沙箱, Docker 利用容器来运行和隔离应用,容器是能够被启动、中止、删除的,这并不会影响 Docker 镜像。
Docker 客户端是 Docker 用户与 Docker 交互的主要方式。当您使用 docker 命令行运行命令时, Docker 客户端将这些命令发送给服务器端,服务端将执行这些命令。 docker 命令使用 docker API 。 Docker 客户端能够与多个服务端进行通讯。
Docker 架构图
Docker 的核心组件包括:
Docker 采用的是 Client/Server 架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器能够运行在同一个 Host 上,客户端也能够经过 socket 或 REST API 与远程的服务器通讯。
Docker Client
Docker Client ,也称 Docker 客户端。它其实就是 Docker 提供命令行界面 (CLI) 工具,是许多 Docker 用户与 Docker 进行交互的主要方式。客户端能够构建,运行和中止应用程序,还能够远程与Docker_Host进行交互。最经常使用的 Docker 客户端就是 docker 命令,咱们能够经过 docker 命令很方便地在 host 上构建和运行 docker 容器。
Docker daemon
Docker daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,咱们也把它称为守护进程。它负责响应来自 Docker Client 的请求,而后将这些请求翻译成系统调用完成容器管理操做。该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将经过Docker daemon 内部的一个路由分发调度,由具体的函数来执行请求。
Docker Image
Docker 镜像能够看做是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建以后也不会被改变。咱们可将 Docker 镜像当作只读模板,经过它能够建立 Docker 容器。
镜像有多种生成方法:
Docker Registry
Docker registry 是存储 docker image 的仓库,它在 docker 生态环境中的位置以下图所示:
运行docker push、docker pull、docker search时,其实是经过 docker daemon 与 docker registry 通讯。
Docker Container
Docker 容器就是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。 Docker Container 提供了系统硬件环境,咱们可使用 Docker Images 这些制做好的系统盘,再加上咱们所编写好的项目代码, run 一下就能够提供服务啦。
Docker组件是如何协做运行容器
容器启动过程以下:
能够经过docker images 能够查看到 hello-world 已经下载到本地
能够经过docker ps 或者 docker container ls 显示正在运行的容器,咱们能够看到, hello-world 在输出提示信息之后就会中止运行,容器自动终止,因此在查看的时候没有发现有容器在运行。
Docker 组件协做运行容器能够分为如下几个过程:
Docker 经常使用命令
参考连接: