Docker 简介与安装

Docker 简介与安装

1. 简介

1.1 基本概念

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

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

1.2 实现方式

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

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

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

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

  • 传统虚拟化方案:

    在这里插入图片描述

  • Docker虚拟化方案:

    在这里插入图片描述

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

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

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

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

1.4 Docker 虚拟化特点

  • 操作启动快

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

  • 轻量级虚拟化

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

  • 开源免费

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

2. 在 CentOS 上安装 Docker

以下 CentOS 的版本是 8 。另外,以下命令默认以 root 进行操作。
另外,开发环境中,简单起见,记得关闭 Linux 防火墙

#命令
开启systemctl start firewalld
关闭systemctl stop firewalld
查看状态systemctl status firewalld
开机禁用systemctl disable firewalld
开机启用systemctl enable firewalld

2.1 前期准备工作

  • 查看内核版本

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

    uname -rCopy to clipboardErrorCopied
    

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

  • 卸载旧版本

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

    yum remove docker \
               docker-client \
               docker-client-latest \
               docker-common \
               docker-latest \
               docker-latest-logrotate \
               docker-logrotate \
               docker-engineCopy to clipboardErrorCopied
    
  • 前期准备 3:为配置 docker 软件源作准备

    yum install -y \
        yum-utils \
        device-mapper-persistent-data \
        lvm2Copy to clipboardErrorCopied
    
  • 前期准备 4:为 CentOS 添加 docker 软件源

    yum-config-manager \
        --add-repo  \
        https://download.docker.com/linux/centos/docker-ce.repoCopy to clipboardErrorCopied
    
  • 截至目前为止,我们干了什么?

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

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

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

  • 前期准备 5:查看所有仓库中所有 docker 版本

    yum list docker-ce --showduplicates | sort -rCopy to clipboardErrorCopied
    

2.2 安装 docker 并验证

2.2.1 从网络仓库中下载,安装
yum install -y docker-ce
或
yum install -y docker-ce-xxxCopy to clipboardErrorCopied

上述命令中的 xxx 是指定的版本。例如:

yum install -y docker-ce-18.06.3.ce-3.el7Copy to clipboardErrorCopied

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

从 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]:Copy to clipboardErrorCopied

输入 y 按回车继续安装。

最终会出现:

完毕!Copy to clipboardErrorCopied
2.2.2 启动 Docker,并将其加入开机启动
# systemctl start docker

systemctl enable docker --now

systemctl status dockerCopy to clipboardErrorCopied

会出现类似如下结果:

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

(有 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:    falseCopy to clipboardErrorCopied
2.2.4 验证连接 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]     ...Copy to clipboardErrorCopied

2.3 配置国内镜像

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

国内的镜像本质上就是 docker hub 中央仓库在国内的一份缓存/备份。Copy to clipboardErrorCopied

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

vi /etc/docker/daemon.json Copy to clipboardErrorCopied

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

输入如下内容:

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}Copy to clipboardErrorCopied

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

重新启动 docker 服务:

systemctl restart dockerCopy to clipboardErrorCopied

查看修改结果:

docker infoCopy to clipboardErrorCopied

会有如下内容:

...
Registry Mirrors:
 https://registry.docker-cn.com/
 https://docker.mirrors.ustc.edu.cn/
...Copy to clipboardErrorCopied

2.4 导入已有的镜像文件

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

导出已有 image 使用命令:

docker save <repository>:<tag> -o <repository>.tarCopy to clipboardErrorCopied

例如:

docker save mysql:5.7 -o mysql-5.7.tarCopy to clipboardErrorCopied

导入 image 使用命令:

docker load -i <repository>.tarCopy to clipboardErrorCopied

例如:

docker load -i mysql-5.7.tarCopy to clipboardErrorCopied

3. Ubuntu 上安装 Docker

以下 CentOS 的版本是 8 。另外,以下命令默认以 root 进行操作。
另外,开发环境中,简单起见,记得关闭 Linux 防火墙

#命令
查看状态sudo ufw status
开启并开机启动sudo ufw enable
关闭sudo ufw disable

Ubuntu 的防火墙默认是关闭的。

3.1 前期准备工作

Ubuntu 的默认的 apt 软件源中实际上有 docker 的安装包,理论上来说,你直接利用默认软件源中的 docker 安装包进行安装也是可行的。

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

另外,通常 apt 默认软件源中的软件的版本并不一定是最新版。

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

  1. 查看内核版本

    Docker 官方要求 Linux 内核版本至少 3.8 以上,建议 3.10 以上。Ubuntu 18.04 的内核是符合其要求的。

    通过以下命令可查看内核版本:

    uname -rCopy to clipboardErrorCopied
    
  2. 卸载旧版本

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

    sudo apt remove \
            docker \
            docker-engine \
            docker-ce \
            docker.ioCopy to clipboardErrorCopied
    
  3. 为配置 docker 软件源作准备

    sudo apt install \
            apt-transport-https \
            ca-certificates \
            curl \
            software-properties-commonCopy to clipboardErrorCopied
    

    这一步操作是为下一步操作作准备工作。

  4. 为 apt 将要添加的 docker 软件源添加校验

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -Copy to clipboardErrorCopied
    

    这一步操作是为下一步操作作准备工作。

  5. 为 apt 添加 docker 官方软件源

    sudo add-apt-repository \
      "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) \
      stable"Copy to clipboardErrorCopied
    

    这步操作的最直观的效果就是:你的 /etc/apt/sources.list 文件中会『多出来一行』(一个远程仓库的网址)

    记得执行以此 sudo apt update,去更新『软件清单』。

  6. 验证仓库是否添加成功:查看所有仓库中所有 docker 版本

    apt-cache madison docker-ceCopy to clipboardErrorCopied
    

3.2. 安装 docker 并验证

3.2.1 从网络仓库中下载,安装
sudo apt install \
  docker-ce \
  docker-ce-cli \
  containerd.ioCopy to clipboardErrorCopied

在没有指定版本的情况下,apt 下载的是软件源中的最新版。如果想要指定特定版本,则使用如下语法:

sudo apt install \
  docker-ce=<VERSION_STRING> \
  docker-ce-cli=<VERSION_STRING> \
  containerd.ioCopy to clipboardErrorCopied

带入特定版本号,例如:5:19.03.13~3-0~ubuntu-bionic

3.2.2 启动 Docker

类似于 MySQL,Docker 也是基于 CS 架构的。你的 Ubuntu 上存在一个 Docker 服务端和一个 Docker 客户端。

要使用 Docker 的前提是:确保 Docker 的服务端启动了。

# 启动 docker 服务端
sudo systemctl start docker

# 将 docker 服务端设置为开机启动
sudo systemctl enable dockerCopy to clipboardErrorCopied
3.2.3 验证安装是否成功

Docker 是 CS 架构的,docker 的服务端是以 docker 用户(属于 docker 用户组)身份运行的,因此你去执行 docker 命令时,你的身份(和权限)是不符合的。

当你通过 docker version 命令去验证安装是否成功时,会出现如下信息:

Got permission denied while trying to connect to the Docker daemon socket ...... connect: permission deniedCopy to clipboardErrorCopied

有 client 和 server 两部分表示 docker 安装启动都成功了。

解决办法有 2 个:

  1. 你所执行的所有的 docker 命令前面都加上 sudo 。将你的身份临时提升为 root,root 自然是有权限执行 docker 命令的。

    sudo docker versionCopy to clipboardErrorCopied
    
  2. 将你自己添加到 docker 用户组中。你和 docker 用户所属同一个用户组,你的自然就有权限执行 docker 命令。

    # 创建名为 docker 的用户组。
    # 正常情况下,这条命令的结果会告诉你 docker 用户组已存在。
    sudo groupadd docker 
    
    # 将当前用户(即你所登录系统的账号)添加至 docker 用户组
    sudo gpasswd -a $USER docker 
    
    # 更新 docker 用户组
    newgrp docker Copy to clipboardErrorCopied
    
3.2.4 验证连接 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]     ...Copy to clipboardErrorCopied

3.3 配置国内镜像

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

国内的镜像本质上就是 docker hub 中央仓库在国内的一份缓存/备份。Copy to clipboardErrorCopied

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

sudo vi /etc/docker/daemon.json Copy to clipboardErrorCopied

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

输入如下内容:

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}Copy to clipboardErrorCopied

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

重新启动 docker 服务:

sudo systemctl restart dockerCopy to clipboardErrorCopied

查看修改结果:

docker infoCopy to clipboardErrorCopied

会有如下内容:

...
Registry Mirrors:
 https://registry.docker-cn.com/
 https://docker.mirrors.ustc.edu.cn/
...Copy to clipboardErrorCopied

3.4 导入已有的镜像文件

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

导出已有 image 使用命令:

docker save <repository>:<tag> -o <repository>.tarCopy to clipboardErrorCopied

例如:

docker save mysql:5.7 -o mysql-5.7.tarCopy to clipboardErrorCopied

导入 image 使用命令:

docker load -i <repository>.tarCopy to clipboardErrorCopied

例如:

docker load -i mysql-5.7.tar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值