• DOCKER 01:说明与安装


    关于 dcoker

    之前写了一些关于这一部分的原因,但是感觉都不全面,所以打算重新完整的做个整理,查漏补缺。

    现在已经是 2020 年,作为运维人员慢慢绕不过的坎就是容器编排这一块的内容。相较于传统运维,容器运维在发展前景和薪资待遇上面还是非常可观的。这也是学习该技术的目的与动力。

    关于 docker 的发展历史,需要事先简单了解以下内容:

    1. docker 是 dotcloud 公司(成立于 2010 年,2013 年更名为 Docker 股份有限公司)开源在 GitHub 上面的一个项目。

    2. 自 2015 年 runC 发布之后,docker 走上了真正跨平台的道路,这也是 docker 的一个核心思想的由来:一次构建,到处运行。

    3. 2016 年开始,docker 拆分成为了社区版 docker CE 和商业版 docker EE,我们都用 docker CE。

    4. docker 在 1.13 版本之后,命名方式更改为 年.月 的方式,如 18.06,每月发布前沿版(Edge)和三个月发布稳定版(Stable)。

    5. docker 在老版本 CentOS 源中叫 docker,Ubuntu 源中叫 docker.io,现在已经统一叫做 docker-ce

    6. docker 存储引擎在 CentOS 中经历了由 devicemapper 到 overlay 再到 overlay2 的进阶,性能已能够和 Ubuntu 的 AUFS 相提并论。 

    关于 docker 的一些概念,需要事先简单了解以下内容:

    1. docker 由 Go 语言开发,属于典型的 C/S 架构的产品。

    2. docker 将容器技术推向了巅峰,但是容器技术并非起源于 docker。

    3. docker 属于 Linux Container(LXC,内核自带,一种内核虚拟化技术,提供轻量级进程和资源隔离)的上层封装,所以并非新技术。

    4. docker 并非容器技术的最佳实践,但是由于名气大,使用广,目前仍然是主流学习的目标。

    5. 学 docker 不是最终目的,是为学习容器编排工具 Kubernetes 做准备。

    6. docker 拥有自己的编排工具 docker swarm,但是由于干不赢 kubernetes 的原因已经快停止维护。

    7. docker 是一个 Paas 服务,关于 Pass,Saas 等服务的概念可以参考下图,红色部分为用户需要管理部分:

    至于其它内容,在后面写到的时候再说!

    docker 的优缺点

    在网上可以随处可见也是官方文档上面随处可见的一张关于 docker 和 VM 做比较的图:

    可以明显的发现:

    传统的 VM 的工作过程:

    1. 首先,需要一台服务器,在上面安装类似于 VMware workstation 这样的软件,只不过在服务器上一般使用的是 VMware esxi 这类。

    2. 然后在这个软件的管理界面上面新建虚拟机,安装操作系统,配置 IP 等。

    3. 最后再在这个新建的虚拟机上面安装想要运行的服务。

    容器的工作过程:

    1. 给服务器安装系统,可以是 Linux 也可以是 Windows,并安装上 docker。

    2. 运行我们想要运行的服务容器,每个容器以一个单独的进程存在与宿主机的系统上面。

    两者做对比可以发现:

    1. 传统的 VM 每次新增虚拟机就需要重装系统,并单独运行系统,这样会导致 CPU,内存,磁盘的额外开销。但是好处在于隔离效果比较好。

    2. 使用容器则不需安装额外的操作系统,每个服务都以进程的方式跑在宿主机上,且拥有独立的虚拟网络环境,独立的磁盘存储划分,能节省系统开销。但相较传统的 VM 在隔离性上不那么好,毕竟还在一个宿主系统下面,如果这个宿主系统挂掉,上面的所有运行的容器都会挂掉。

    docker 的核心组件

    服务端(Server)和客户端(Client):C/S 架构,所有的执行都是通过服务端发送给客户端执行。

    镜像(Image):需要运行的服务和运行环境封装在一起的包。

    容器(Container):通过镜像运行起来的实例。

    仓库(Repository):同一镜像可能有不同版本,这些包含同一镜像不同版本的地址就是该镜像的仓库。

    注册点(Registry):各种仓库的集合地址就是注册点。

    具体关系可以参照下图:

    安装部署

    docker 在网上的安装方式一般会看到这几种:curl 脚本安装,源码安装,yum 安装,rpm 安装。

    通常对于生产环境尽量推荐选择 rpm 版本安装,原因在于便于版本控制。不安装最新的,怕有坑。

    1. 安装准备:

    下载方式可以选择 docker 官方镜像源:

    https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

    但是可能速度会很慢,所以也可以选择中科大提供的源:

    http://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/

    我这里由于是测试版本,所以选择最新的 19.03.6-3 版本,下载所需的包:

    containerd.io-1.2.6-3.3.el7.x86_64.rpm
    docker-ce-19.03.6-3.el7.x86_64.rpm
    docker-ce-cli-19.03.6-3.el7.x86_64.rpm

    这里准备了 4 台 CentOS Linux release 7.5.1804 的虚拟机,IP 分别是 192.168.200.101-104,并事先关闭防火墙和 Selinux。

    为了更好的支持,也可以升级一下机器的内核,当然如果你的服务器已经运行其他服务,最好不要升级,怕出问题。

    具体升级方法可以参照我之前的博客,里面有一键升级脚本:

    https://www.cnblogs.com/Dy1an/p/12011691.html

    2. 安装依赖:

    # 卸载旧版本
    yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
    
    # 安装依赖
    yum install -y yum-utils device-mapper-persistent-data lvm2 bridge-utils bash-completion wget container-selinux
    
    # 更新系统
    yum update

    3. 上传之前下载的包并安装:

    mkdir docker
    cd docker/
    # 上传文件到该目录下面,再执行安装
    yum -y install *

    4. 启动并设置开机自启:

    systemctl start docker
    systemctl enable docker
    systemctl status docker

    5. 查看:

    docker version

    结果如图:

    6. 镜像仓库优化:

    由于 docker 默认的镜像仓库 docker hub 因为某些不可描述的原因访问及其慢,可以将它换为国内的镜像源:

    阿里镜像源:麻烦,需要专门申请账户。

    中科大镜像源:直接配置即可。(我写文章时候中科大打不开,注意一下,不行就用阿里的,虽然麻烦一些

    # 拷贝启动文件
    cp /lib/systemd/system/docker.service /etc/systemd/system
    
    # 修改配置
    sed -i "s#^ExecStart=.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --registry-mirror=https://docker.mirrors.ustc.edu.cn#g" /etc/systemd/system/docker.service
    
    # 重启docker
    chmod 755 /etc/systemd/system/docker.service
    systemctl daemon-reload
    systemctl restart docker

    此时查看 docker 进程:

    ps -ef | grep docker

    能够看到进程后面多了一个中科大镜像地址:

    到此,docker 安装完成,接下来是 docker 的使用!

  • 相关阅读:
    Java异常的分类
    Java SE 6 新特性: Java DB 和 JDBC 4.0
    Java SE 6 新特性: 对脚本语言的支持
    面向对象开发方法优点
    RocketMQ之八:水平扩展及负载均衡详解
    Bluetooth 4.0之Android 解说
    iOS截取视频缩略图的两种方法
    Java NIO Buffer
    spark 启动job的流程分析
    C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针
  • 原文地址:https://www.cnblogs.com/Dy1an/p/12358044.html
Copyright © 2020-2023  润新知