Docker安装

Docker安装

前提说明

从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE:Docker CE 即社区免费版;Docker EE 即企业版,强调安全,但需付费使用;按照官网上Docker Engine - Community包现在就是叫做Docker CE。这里将展示在CentOS上安装Docker。

CentOS 版本要求

  • Centos Docker安装

    • Centos7 (64bit)
  • 前提条件

    • Centos7 系统为64位,内核版本为3.10以上
    • 启用centos-extras
    • 推荐使用overlay2存储驱动
  • 查看自己的内核版本

    1
    cat /etc/redhat-release

Docker的基本组成

  • 镜像

    • 就是一个只读的模板,java中的Class。镜像可以用来创建Docker容器,一个镜像可以创建很多的容器
  • 容器

    • 镜像的实例,java中的instance

    • Docker利用容器独立运行的一个或者一组应用
      容器可以被启动、开始、停止、删除。
      每一个容器都是相互隔离的、保证安全的平台

    • 可以把容器看作是简易版的Linux环境(包括root用户权限、进程空间、用户控件和网络空间)和运行在其中的应用程序

    • 容器的定义和镜像几乎是一样的,也是一堆层的统一视角,唯一却别在与容器的最上层是可读可写的

  • 仓库

    • 仓库是集中存放镜像文件的场所

    • 仓库和仓库注册服务器是有区别的

      • 仓库注册服务器上往往存放着多个仓库,每个仓库又包含了多个镜像,每个镜像有不同的标签(tag)
    • 仓库分为公开仓库和私有仓库两种形式

    • 最大的公开仓库是Docker Hub (https://hub.docker.com),它存放了数量庞大的镜像供用户下载
      国内的公开仓库包括阿里云、网易云等

  • 小结

    • Docker本身是一个容器运行载体或者称之为管理引擎
      我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个环境就称之为image镜像文件。只有通过这个镜像文件才能生成Docker容器,image文件可以看作是容器的模板。Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例
    • imags文件生成的容器实例,本身也是一个文件,称之为镜像文件
    • 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是容器
    • 仓储就是存放一堆镜像文件的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了

安装步骤

  • 官网安装参考手册
    https://docs.docker.com/engine/install/centos/

  • 卸载老的Docker及依赖

    为什么你可能还需要删除较低的Docker安装?因为较旧版本的Docker被称为docker或docker-engine(它是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure)

1
2
3
4
5
6
7
8
9
10
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
  • 安装依赖库
    • yum-utils 提供 yum-config-manager 类库
    • device-mapper-persistent-data 和 lvm2 被devicemapper 存储驱动依赖
1
2
3
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
  • 设置stable镜像仓库

    • 非常慢的方式

      1
      yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    • 比较快的方式(使用镜像地址)

      1
      yum-config-manager --add-repo http://mirror.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 更新yum软件包索引

    1
    yum makecache fast
  • 安装社区版docker

    1
    sudo yum -y install docker-ce
  • 启动docker

    1
    sudo systemctl start docker
  • 确认docker安装成功

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@test ~]# systemctl status docker
    ● docker.service - Docker Application Container Engine
    Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
    Active: active (running) since Sat 2022-11-05 20:34:14 CST; 5 days ago
    Docs: https://docs.docker.com
    Main PID: 24058 (dockerd)
    Tasks: 9
    Memory: 70.7M
    CGroup: /system.slice/docker.service
    └─24058 /usr/bin/dockerd --graph=/data/docker -H fd:// --containerd=/run/containerd/containerd.sock
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [root@test ~]# docker run hello-world

    Hello from Docker!
    This message shows that your installation appears to be working correctly.

    To generate this message, Docker took the following steps:

    1. The Docker client contacted the Docker daemon.
    2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
    3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
    4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

    To try something more ambitious, you can run an Ubuntu container with:
    $ docker run -it ubuntu bash

    Share images, automate workflows, and more with a free Docker ID:
    https://hub.docker.com/

    For more examples and ideas, visit:
    https://docs.docker.com/get-started/
  • 配置镜像加速

    Docker 安装好以后,我们就要开始为拉取镜像准备了;国内从 DockerHub 拉取镜像有时会特别慢,此时可以配置镜像加速器

这里配置 Docker官方中国的加速器

​ 对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

1
2
3
4
5
6
7
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF

​ 配置完后重启docker服务

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 启动Docker后台容器(测试运行hello world)

    • docker run helloworld
      • 相当于docker run helloworld:latest
    • run干了什么
      • 先在本地找helloworld这个镜像
      • 如果找不到,就去仓库中去找,找到后pull到本地
      • 根据这个镜像启动一个容器
  • 卸载

    1
    2
    3
    systemctl stop docker
    yum -y remove docker-ce
    rm -rf /var/lib/docker

底层原理

  • Docker是怎么工作的

    • Docker是一个CS结构的系统,Docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器。容器,是一个运行时环境
  • Docker为什么比vm快

    • docker有着比虚拟机更少的抽象层。docker不需要实现硬件资源虚拟化,docker上的程序直接使用的是实际物理机的硬件资源,因此在cpu、内存利用率上docker有明显的优势
    • docker利用的是宿主机的内核,而不是vm的内核,所以加载docker容器会很快。那这就是说,centos上的容器只能跑在centos的机器上