Docker(1-1) Docker 简介和安装

Docker 简介和安装

#1. 关于 Docker

#基本概念

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。

#实现方式

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)、Cgroup 等技术。

在 LXC 的基础上,Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

#Docker 和传统虚拟化方式的不同

容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件的基础上,虚拟出自己的系统,再在系统上部署相关的 APP 应用。

  • 传统虚拟化方案:

    Docker(1-1)  Docker 简介和安装

  • Docker虚拟化方案:

    Docker(1-1)  Docker 简介和安装

Docker 虚拟化有三个概念需要理解:镜像、容器、仓库。

  • 镜像:docker 的镜像其实就是模板,跟我们常见的 ISO 镜像类似,是一个样板。

  • 容器:使用镜像所创建的应用或者系统,我们称之为一个容器。

  • 仓库:仓库是存放镜像的地方,分为公开仓库(Public)和私有仓库(Private)两种形式。

#Docker 虚拟化特点

  • 操作启动快

    运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启等等)都是以秒或毫秒为单位的。

  • 轻量级虚拟化

    你会拥有足够的『操作系统』,仅需添加或减小镜像即可。在一台服务器上可以布署几百个 Containers 容器。但是传统虚拟化,你虚拟 20 个虚拟机就不错了。

  • 开源免费

    开源的,免费的,低成本的。由现代 Linux 内核支持并驱动。轻量的 Container 必定可以在一个物理机上开启更多“容器”,注定比 VMs 要便宜。

#2. 安装 Docker 的前期准备工作

  • Step 0: 开发环境中,我们通常会关闭防火墙

    systemctl status firewalld  # 查看防火墙状态
    systemctl stop firewalld    # 关闭,仅对当前生效
    systemctl disable firewalld # 开机禁用
    
    Copied!
  • Step 1: 查看内核版本

    Docker 官方要求 Linux 内核版本至少 3.8 以上,建议 3.10 以上。通过以下命令可查看内核版本:

    uname -r
    
    Copied!

    CentOS 7 的内核版本是满足其要求的。

  • Step 2: 卸载旧版本

    较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

    yum remove docker \
          docker-client \
          docker-client-latest \
          docker-common \
          docker-latest \
          docker-latest-logrotate \
          docker-logrotate \
          docker-engine
    
    Copied!
  • Step 3: 为配置 docker 软件源作准备

    yum install -y \
          yum-utils \
          device-mapper-persistent-data \
          lvm2
    
    Copied!
  • Step 4: 添加 docker 软件源

    yum-config-manager \
          --add-repo  \
          https://download.docker.com/linux/centos/docker-ce.repo
    
    Copied!

    考虑到从 docker 官方的仓库下载 docker-ce 有时会比较慢,可以使用下述命令将下载网址改为华为的镜像服务器:

    sudo sed -i \
        's+download.docker.com+repo.huaweicloud.com/docker-ce+' \
        /etc/yum.repos.d/docker-ce.repo
    
    Copied!

截至目前为止,我们干了什么?

CentOS 的默认的 yum 软件源中实际上有 docker 的安装包,如果直接进行 yum install docker 也是可行的。

但是 docker 官方考虑到不同的用户对 docker 的不同版本有不同的需求(有人追求最新,有人追求稳定),他们专门提供了一个仓库/网址用以提供多个版本的 docker 的下载。

因此,我们必须告知 yum 有这样一个仓库的存在,并且未来要求 yum 从这个仓库中下载我们指定版本的 docker 。而非默认的仓库。

  • Step 5: 验证

    查看所有仓库中所有 docker 版本

    yum list docker-ce --showduplicates | sort -r
    
    Copied!

#3. 安装 docker 并验证

  • 从网络仓库中下载,安装最新版本

    yum install -y docker-ce
    
    Copied!

    或指定具体的某个版本。例如:

    yum install -y docker-ce-18.06.3.ce-3.el7
    
    Copied!

    安装过程中会出现类似如下询问:

    从 https://download.docker.com/linux/centos/gpg 检索密钥
    导入 GPG key 0x621E9F35:
     用户ID     : "Docker Release (CE rpm) <docker@docker.com>"
     指纹       : 060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35
     来自       : https://download.docker.com/linux/centos/gpg
    是否继续?[y/N]:
    
    Copied!

    输入 y 按回车继续安装。

    最终会出现:

    完毕!
    
    Copied!
  • 启动 Docker,并将其加入开机启动

    # systemctl start docker
    
    systemctl enable docker --now
    
    systemctl status docker
    
    Copied!

    会出现类似如下结果:

    Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
    
    Copied!
  • 验证安装是否成功

    (有 client 和 service 两部分表示 docker 安装启动都成功了)

    输入 docker version 命令,会出现类似如下内容:

    Client:
      Version:    17.12.1-ce
      API version:    1.35
      Go version:    go1.9.4
      Git commit:    7390fc6
      Built:    Tue Feb 27 22:15:20 2018
      OS/Arch:    linux/amd64
    
    Server:
     Engine:
       Version:    17.12.1-ce
       API version:    1.35 (minimum version 1.12)
       Go version:    go1.9.4
       Git commit:    7390fc6
       Built:    Tue Feb 27 22:17:54 2018
       OS/Arch:    linux/amd64
       Experimental:    false
    
    Copied!
  • 验证连接 docker hub *镜像仓库

    输入 docker search -f is-official=true mysql 命令,会出现类似如下结果:

    NAME     DESCRIPTION                                     STARS  OFFICIAL ...
    mysql    MySQL is a widely used, open-source relation…   8819   [OK]     ...
    mariadb  MariaDB is a community-developed fork of MyS…   3102   [OK]     ...
    percona  Percona Server is a fork of the MySQL relati…   459    [OK]     ...
    
    Copied!

#4. 配置国内镜像

由于 docker hub 的*镜像仓库在国外,因此有时我们连接 docker hub 从中下载镜像速度会很感人,因此,我们需要配置国内的镜像网址,从国内现在镜像文件。

TIP

国内的镜像本质上就是 docker hub *仓库在国内的一份缓存/备份。

通过 vi 命令编辑相关配置文件:

vi /etc/docker/daemon.json 
Copied!

如果该文件存在,则将其内容清除;如果文件不存在,(打开该文件后,其内容是空白的),编辑结束后保存退出,即创建。

输入如下内容:

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
Copied!

该配置文件配置了两个镜像,一个是 docker 官方在中国境内的官方镜像,一个是中科大维护的一个镜像。

重新启动 docker 服务:

systemctl restart docker
Copied!

查看修改结果:

docker info
Copied!

会有如下内容:

...
Registry Mirrors:
 https://registry.docker-cn.com/
 https://docker.mirrors.ustc.edu.cn/
...
Copied!

#5. 导入已有的镜像文件

考虑到有些场景下的联网的不方便,docker 提供了将已下载的 images 打包导出,再在别处导入的功能。

导出已有 image 使用命令:

docker save <repository>:<tag> -o <repository>.tar
Copied!

例如:

docker save mysql:8.0.16 -o mysql-8.0.16.tar
Copied!

导入 image 使用命令:

docker load -i <repository>.tar
Copied!

例如:

docker load -i mysql-8.0.16.tar
 
上一篇:centos 8安装docker


下一篇:Docker 安装及常用命令