您的位置:首页 > 运维架构 > Docker

Docker学习笔记(一)docker简介及安装

2020-06-04 05:36 337 查看

新手站主第一次建站,笔记由站主查询资料、借鉴前辈笔记制作,初衷全在于锻炼自己和分享经验,如果文中有错别字、错误内容或者有缺点之处,麻烦在评论区进行评论,望与诸君共同进步,在此共勉。

1. docker简介

谈到 Docker,不论我们是否实践过,都应该对它或多或少有一个印象,即“环境一次创建,多端一致性运行”,因为它正解决了曾经困扰我们已久“这段代码在我电脑上运行没问题啊”的烦恼。首先,简单介绍一下 Docker 技术是什么。

1.1. 什么是docker?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或 Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

我们可以通过 docker 来做到什么?

  • 快速部署 Java、MySQL、Tomcat,远离繁多重复配置

为什么要用docker来安装?为什么不直接通过 传统虚拟机 安装?我们需要知道 传统虚拟机 是什么。

  • 传统虚拟机:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

为什么我们需要知道虚拟机?

  • 作为新兴虚拟化方式 docker 出名之初就在于相比于传统虚拟机技术它更加的 “轻”

为什么说它轻?没有对比就没有伤害,下面是两种虚拟化技术使用应用的流程

  • 虚拟机:安装软件 ==> 软件中模拟一个完整功能的操作系统 ==> 系统中下载应用 ==> 运行软件

  • docker:安装 docker ==> 从docker hup 中下载镜像 ==> 运行容器中的进程(运行软件)

1.2. 为什么要用 docker?

因为 docker 相比于 传统的虚拟机技术 有诸多的优势

1、方便快捷、避免过多的配置

  • 它支持将 软件编译成一个镜像 文件
  • 允许使用他人配置好环境的镜像,以实现一键安装

2、能更高效的利用服务器的资源

  • docker 通过容器运行的进程远远低于虚拟机运行 占用的内存

3、可轻松迁移

  • 因为 docker 确保了环境的一致性,使应用的迁移变得更加简单
  • docker 可以在很多平台上运行 笔记本、云、虚拟机 等,运行结果一致
  • 所以用户可以轻松进行迁移

4、对比传统虚拟机总结

特性 虚拟机 容器
隔离级别 操作系统级 进程级
系统资源 5~15% 0~5%
启动时间 分钟级 秒级
镜像存储 GB-TB KB-MB
性能 接近原生 弱于
系统支持量 上百 一般几十个
高可用策略 备份、容灾、迁移 弹性、负载、动态

2. docker的核心概念

docker的核心概念:

  • 镜像(
    Image
    ):从仓库中拉取过来的各个应用的底层
    root
    文件系统
  • 容器(
    Container
    ):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
  • 仓库(
    Repository
    ):用来保存各种镜像并提供镜像下载

2.1. 镜像

我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载

root
文件系统为其提供用户空间支持。

而 Docker 镜像(Image),就相当于是一个

root
文件系统。比如官方镜像
ubuntu:18.04
就包含了完整的一套 Ubuntu 18.04 最小系统的
root
文件系统。

而镜像还有一个特点:可以以

root
文件系统作为基础,在上面配置如 Java、Mysql等环境后,将其构成新的镜像,然后可以发布这个新的镜像给其他有需要的人使用,这也就是 docker 的优点之一:下载已配好部分环境的镜像避免过多重复性的环境配置

2.2. 容器

容器相当于 镜像 的实例化,即安装包和软件的区别;但是与我们平常使用的软件不同的是

  • 手机app:app应用使用时有部分数据缓存会存储到手机中,卸载应用再重新进行安装,应用会读取缓存的数据,不是全新的app
  • 容器:容器会以镜像为基础层,在其上创建一个当前容器的存储层,为容器的读写操作做存储。但删除容器后,该数据存储内容会随着容器消失。所以类似于 MySQL容器 需要将存储位置绑定宿主目录,直接对宿主进行读写操作,卸载容器后不会影响数据

2.3. 仓库

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个 仓库

Repository
);每个仓库可以包含多个 标签
Tag
);每个标签对应一个镜像(相当于不同版本的软件)。

我们可以在 Docker Registry 仓库中筛选我们所需要镜像,常见的 Registry 仓库:

由于某些原因,在国内访问这些服务速度可能比较慢,所以我们可以通过 阿里云加速器DaoCloud 加速器 来提高我们访问的速度

当然国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 网易云镜像服务DaoCloud 镜像市场阿里云镜像库 等。

3. docker安装、运行与加速

使用步骤:

  1. 安装Docker;
  2. 去Docker仓库找软件对应的镜像;
  3. 使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
  4. 对容器的启动停止就是对软件的启动停止

3.1. 安装 docker(Ubuntu)

官方网站上有各种环境下的 安装指南,这里只介绍 Ubuntu 的安装。

安装方法有三种

  1. 在软件源内添加docker,并且安装,这样安装和升级比较方便,官方推荐。

  2. 官方一键安装脚本,不建议在生产环境下使用。

  3. 下载RPM包手动安装,手动升级,一般在与互联网隔绝的情况下使用此方法。(这里不实现此方法的安装,具体可以看官网的三种安装方法

方法一:软件源内添加docker,并且安装

1、卸载旧版本

  • 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:
$ sudo apt-get remove docker docker-engine docker-ce docker.io

2、 由于

apt
源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。

# 更新 apt 索引
$ sudo apt-get update

# 使apt可以通过HTTPS使用存储库(repository)
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

3、为了确认所下载软件包的合法性,需要添加软件源的

GPG
密钥。

鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看

# 国内源
$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# 官方源
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4、 然后,我们需要向

source.list
中添加 Docker 软件源

$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"

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

以上命令会添加稳定版本的 Docker CE APT 镜像源,如果需要测试或每日构建版本的 Docker CE 请将 stable 改为 test 或者 nightly。

5、 更新 apt 软件包缓存,并安装

docker-ce

$ sudo apt-get update

$ sudo apt-get install -y docker-ce

方法二:使用脚本进行安装(禁止在生产环境中使用)

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,如果是你是懒人,可以在服务器版本直接执行官方出品的一键安装脚本(脚本会区分不同的操作系统且脚本会安装体验版**(edge版)而不是稳定版(stable版)且最好不要用于生产环境**,脚本Github地址)。 另外可以通过

--mirror
选项使用国内源进行安装:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
# $ sudo sh get-docker.sh --mirror Aliyun

3.2. 启动 Docker CE

  • 将docker服务设为开机启动
$ sudo systemctl enable docker
  • 启动docker
$ sudo systemctl start docker
  • 关闭docker
$ sudo systemctl stop docker

3.3. 建立 docker 用户组

默认情况下,

docker
命令会使用 Unix socket 与 Docker 引擎通讯。而只有
root
用户和
docker
组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用
root
用户。因此,更好地做法是将需要使用
docker
的用户加入
docker
用户组。

建立

docker
组:

$ sudo groupadd docker

将当前用户加入

docker
组:

$ sudo usermod -aG docker $USER

3.4. 添加国内的镜像源

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务,例如:

由于镜像服务可能出现宕机,建议同时配置多个镜像。各个镜像站测试结果请到 docker-practice/docker-registry-cn-mirror-test 查看。

国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务,具体请参考官方文档。

本节我们以 Azure 中国镜像

https://dockerhub.azk8s.cn
为例进行介绍。

/etc/docker/daemon.json
中写入以下内容(如果没有此文件请创建)

{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://hub-mirror.c.163.com"
]
}

注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。

之后重新启动服务。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

资料来源:
https://docs.docker.com/install/
https://yeasy.gitbooks.io/docker_practice/

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: